Self-hosted · Open source · No account

Your media server, in the browser.

WebDLNA reads the media servers you already run, whether that is DLNA on the NAS, Plex, Jellyfin, Emby or a mounted folder, and builds one library out of all of them that any browser on your network can play. Browse, cast, and take it offline.

Node 18+ and one supported media source. One process serves the whole thing.

How it works

One process between your media and your screens

Browsers cannot discover DLNA servers, read mounted folders or make every media format playable by themselves. WebDLNA speaks DLNA and media-server APIs, indexes the sources the host can reach, and hands the browser streams it understands.

Your media servers DLNA, Plex, Jellyfin, Emby, mounted folders and network shares
WebDLNA Connects sources, builds one catalogue, proxies and transcodes the stream
Any browser Desktop, phone, tablet, or cast onward to a Chromecast
What you get

A full client, not a file listing

Everything a media library needs once you actually live in it: a queue, playlists, resume, search that answers instantly, and playback that copes with real files.

Finds your servers

Continuous SSDP discovery picks up servers as they come online, with manual connection by IP for networks that block multicast.

One library, every source

DLNA, Plex, Jellyfin, Emby and mounted folders become a single catalogue on six shelves. A film you own twice is one entry with two copies behind it, and it remembers where you got to whichever one plays.

Plays what browsers can't

HEVC, AC-3, exotic containers. Anything the browser would refuse is transcoded on the fly and starts playing in a second or two.

Search that answers

Searching reads the catalogue, so it covers every source at once and comes back immediately, with filters for type, year, genre and resolution.

Works offline

Download to the browser's own storage and play it back with the network gone entirely, on a plane or a train or just off the LAN.

Casts to the television

Send anything to a Chromecast with full remote control, working out the network address your TV needs on its own.

Remembers where you were

Resume for anything long enough to warrant it, a queue with shuffle and repeat, favourites, history and play statistics.

Transcoding

Only when it's needed, and only what's needed

Most files don't need touching. WebDLNA probes each one and streams it straight through when the codecs are already browser-ready, with no re-encode and no quality loss, no CPU burnt.

When a file does need converting, the encode streams as fragmented MP4 through MediaSource, so playback starts after the first fragment rather than after the whole file. Seeking restarts the encode at the new position and keeps the clock honest. NVIDIA hardware encoding is used automatically when it's available.

H.264 + AAC already playable HEVC + AC-3 browser can't decode direct stream ffmpeg fMP4 fragments your browser plays either way
Privacy

Nothing to sign up for, nothing to upload

Your library stays on the machines you already own. WebDLNA doesn't index anything to a cloud, doesn't phone home, and has no account system to leak. It reads from your servers and streams to your browser, over your own network.

Casting is the one part that reaches outside: it loads Google's Cast SDK, then hands your Chromecast a local address to stream from. Everything else stops at your router.

your network media server WebDLNA browser no account · no upload · no telemetry
Install

Four ways to get it

Pick the one that matches where it is going to live.

Docker

For a homelab, a NAS, or any always-on Linux box. ffmpeg is in the image, so MKV and Dolby audio work with nothing else installed.

docker run -d --name webdlna   --network host   -v webdlna-config:/config   ghcr.io/alopexus/webdlna:latest

Use --network host or server discovery finds nothing. Linux only. Why.

Debian and Ubuntu

Installs to /opt/webdlna, runs under systemd from boot, and lets apt fetch Node and ffmpeg for you. Works on a Raspberry Pi.

curl -fsSL https://raw.githubusercontent.com/Alopexus/WebDLNA/main/scripts/install.sh -o install.sh
less install.sh
sudo sh install.sh

Read it before you run it. It fetches the .deb, checks it against the release checksums, and hands it to apt.

Desktop app

Windows, macOS and Linux, with ffmpeg bundled. It sits in the tray and keeps serving the rest of the house after you close the window.

Download

The builds are unsigned, so Windows and macOS will both warn you the first time.

From source

What you want if you are going to change it. One Node process serves the API and the app together.

git clone https://github.com/Alopexus/WebDLNA.git
cd WebDLNA
npm install
npm run build && npm start

Needs Node 18 or newer. ffmpeg is optional and only affects transcoding.

Full setup guide All downloads

Before you start

What it needs

RequirementDetail
Node.js 18+ With npm 9 or newer. The backend and the build both run on it.
A supported media source Connect a DLNA/UPnP server, Plex, Jellyfin, Emby, a mounted folder, or a network share.
Source connectivity WebDLNA must be able to reach each source. DLNA discovery also needs local UDP multicast on port 1900; API and file sources can be elsewhere.
ffmpeg (optional) Only needed for transcoding. Found on PATH automatically; without it, files stream direct and browser-incompatible ones won't play.
A modern browser Chrome, Edge, Firefox or Safari. Chromium-based browsers get Chromecast; MediaSource is used for transcoded playback where available.

Point it at your library

It takes about five minutes, and the servers you want it to read are almost certainly already running.