I wanted to send a movie link to a friend. Plex wanted me to scan a library, create an account, configure metadata agents. Jellyfin was lighter but still required a database server. Emby wanted a subscription.
All I needed: point at a file, get a link, let the other person click play. So I built ShareBox — a self-hosted media server in pure PHP, no framework, no dependencies. Version 5 just shipped.
25 MB of RAM, no scan, no plugins
ShareBox is a lightweight self-hosted alternative to Plex and Jellyfin. Point at a folder, launch Docker, it's online. No library scan (the filesystem is the library), no external database, no plugins. PHP 8 + SQLite + ffmpeg, that's it.
The grid view pulls TMDB posters automatically, with season navigation for TV shows. The built-in player handles subtitles (SRT, ASS, PGS), multiple audio tracks, and Picture-in-Picture. I covered the zero-dependency philosophy in the v1 article — that hasn't changed.
What's new in v5
GPU hardware transcoding — auto-detected, zero config
This is the big one. ShareBox auto-detects available hardware and picks the best encoder:
- Intel VAAPI — Synology NAS, mini-PCs, most servers. Available whenever an Intel iGPU is present.
- NVIDIA NVENC — desktop/laptop GPUs via Docker with the NVIDIA runtime. A dedicated
docker-compose.nvidia.ymlis included. - Raspberry Pi V4L2M2M — the Pi 4's hardware codec. Good enough for real-time 720p on a 2 GB Pi.
If the GPU fails (missing driver, unsupported format), ShareBox falls back to software transcoding automatically. No config, no flags to toggle. The fallback is transparent.
Continue Watching
A "Continue Watching" row appears at the top of the browse page, showing the last 8 videos in progress with progress bars. Stored in localStorage on the client — no user account needed. Close the browser, come back, pick up where you left off.
9 security fixes
Path traversal on mark_watched, IDOR letting non-admins delete
system links, XSS via error responses and search queries, race condition on
the download counter, HTTP host header injection. Every fix is documented in
the
CHANGELOG.
52 Playwright e2e tests + CI
Browse, posters, admin, player, ZIP, search, security — all covered. Tests run on GitHub Actions against the Docker demo container on every push and every PR. Combined with the 159 PHPUnit unit tests, that's 211 tests total.
Installation guides
Docs now cover Docker, Raspberry Pi, Synology NAS, Unraid, and bare metal installation. With exact commands, not just "check the documentation".
How it compares
| ShareBox | Plex | Jellyfin | |
|---|---|---|---|
| Setup | 30 seconds | 15-30 min | 10-20 min |
| RAM | 25 MB | 500 MB - 2 GB | 300 MB - 1 GB |
| Media library scan | None | Required | Required |
| File sharing links | Built-in | No | No |
| GPU transcoding | Auto-detected | Plex Pass required | Built-in |
| Raspberry Pi | Yes (2 GB) | Barely | Yes (4 GB) |
| Cost | Free (MIT) | Freemium | Free (GPL) |
ShareBox doesn't replace Plex for everyone. If you need multi-device sync, live TV, or music management, Jellyfin or Plex are better fits. But for sharing files and streaming videos without maintaining a media library, it's the simplest option.
Try it in 30 seconds
git clone https://github.com/ohugonnot/sharebox.git && cd sharebox
docker compose up -d
Open http://localhost:8080/share — it's live. Demo content is
included so you can test without configuring anything.
For NVIDIA GPU owners:
docker compose -f docker-compose.nvidia.yml up -d
The live demo is here:
Films grid
— and the
admin panel
with admin / demo2026.
Conclusion
ShareBox started from a simple need — sending a link — and it still does exactly that, just faster and more solid. GPU transcoding is the game changer on modest hardware: a Raspberry Pi that could barely software-transcode can now serve real-time 720p via V4L2M2M.
The repo is on GitHub. Star it if you find it useful. PRs are welcome — especially if you've dealt with ffmpeg remux audio sync issues.