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.
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.
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.
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.
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.
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.
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.
What it needs
| Requirement | Detail |
|---|---|
| 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.