Runs on your own hardware
Free-WAN
Your media library on your own hardware, reachable from anywhere, with no forwarded ports and nothing exposed.
People who own their files and want to keep it that way.
- Your phoneanywhere
- Tailscale ServeHTTPS :443
- free-wan127.0.0.1:8080
- Your drivemounted read-only
Library
- heist.mp4mp4 · h264 · aacdirect
- E03.mkvmkv · hevc · eac3HLS
- beach.movmov · h264 · aacdirect
- live-set.aviavi · mpeg4 · mp3HLS
Category: Shows › Nature › Season 1 on drive-b
- ✗Container
mkvnot mp4 / m4v / webm / mov - ✓Video
hevcplays in a browser - ✗Audio
eac3not aac / opus / mp3
GET /api/media/2/playback
{ "mode": "hls",
"url": "/api/media/2/hls/master.m3u8" }
ffmpeg converts it on the fly: H.264 (libx264 veryfast), AAC at 160k, in 4-second segments. Playback starts once the first ones exist.
What it does
Your media on your hardware, reachable from anywhere without opening ports.
Video your browser can play directly streams as-is, and everything else gets converted to HLS on the fly. All your drives show up as one library with full-text search and filters, sorted automatically based on your folder structure. You can also put your own branding on it.
- 01
Plays files directly when it can, and converts to HLS on the fly when it can’t
- 02
One searchable library across multiple drives, organized from your folder structure
- 03
Embedded and separate subtitle files, playback speed, and pick up where you left off
- 04
Reachable from anywhere over Tailscale with no ports forwarded
Sorting
Your folders are the catalog.
You point Free-WAN at the drives you already have, as libraries. Every folder above a file becomes a category, so nothing needs tagging by hand, and full-text search and filters work across all of them at once. A watcher picks up new files as they land.
/media/drive-a/Movies/Action/2021/heist.mp4 Movies › Action › 2021 /media/drive-b/Shows/Nature/Season 1/E03.mkv Shows › Nature › Season 1
Getting in
The way in is your tailnet.
Free-WAN runs as two containers. One is Tailscale, which joins your tailnet and serves HTTPS on port 443. The app shares its network and listens only on 127.0.0.1:8080, so the way in is through your tailnet. No ports get forwarded on your router, and your drives are mounted read-only.
# docker-compose.yml, trimmed
tailscale:
image: tailscale/tailscale
# serves https://free-wan.<tailnet>.ts.net
free-wan:
network_mode: service:tailscale
HOST: 127.0.0.1
PORT: 8080
volumes:
- /path/to/drive-a:/media/drive-a:roWhere it stands
Built, tested, not released.
All eleven phases of the v1 build plan are done, from scanning and search through clips, branding and the Tailscale setup. It has unit and integration tests and a Playwright suite that runs the main flows in a real browser. There’s no release yet, so there’s nothing to install today. There’s also an iPhone and Android app in the repository that talks to the same server, and it isn’t in either store.
Specification
What it’s built with, and when.
Pulled from the repository each time this site is built.
- State
- In development
- Discipline
- Applications
- Shape
- Installed software
- Started
- Jun 2026
- Last change
- Oct 2026
- Commits
- 127
- TypeScript
- Docker
- ffmpeg
- HLS
- Tailscale
- TypeScript 87%
- Swift 7%
- JavaScript 4%
Related work
Built alongside Free-WAN
Next
Get Free-WAN
Ask about availability, a build for your platform, or a license.