A self-hosted video streaming platform. Upload source files, let FFmpeg transcode them to HLS in the background, and stream to your own users — with authenticated profiles and zero third-party cloud.
Floxflix is an open-source, self-hosted video streaming API written in Go. It ingests your own video files, transcodes them to adaptive HLS with FFmpeg, and serves them to authenticated clients — no vendor lock-in, no proprietary media server, no third-party cloud.
- HLS streaming — source files become
.m3u8playlists with.ts,.m4sor.mp4segments, playable anywhere. - JWT authentication — HTTP-only cookies plus bearer tokens, hashed passwords, revocable sessions.
- Viewer profiles — Netflix-style multi-profile support under a single account.
- Upload & transcode — multipart uploads for
mp4,mkv,mov,avi,webmand more. - Background queue — uploads return immediately while FFmpeg jobs process in a worker queue.
- OpenAPI contract — a complete
openapi.ymland Postman collection ship with the project.
| Repository | Description | Stack |
|---|---|---|
| floxflix | Self-hosted video streaming API — upload, transcode, authenticate, stream | Go · FFmpeg · MongoDB |
| floxflix-ui | Admin dashboard and web client for the floxflix stack | TypeScript |
| floxflix-manifests | Raw Kubernetes manifests for the floxflix stack | Kubernetes |
| floxflix-telegram-bot | Telegram bot for floxflix | Go |
| floxflix.github.io | Project website | HTML |
# clone the API
git clone https://github.com/floxflix/floxflix
cd floxflix
# set the required secret
export JWT_SECRET_KEY=$(openssl rand -base64 48)
# start the API + MongoDB
docker compose up --buildThe API listens on http://localhost:7777, with health checks at /healthz and routes under /v1/api.
# get a token (cookies are also set)
curl -X POST http://localhost:7777/v1/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com", "password": "••••••••"}'
# upload a movie and kick off conversion
curl -X POST http://localhost:7777/v1/api/videos/upload \
-H "Authorization: Bearer $TOKEN" \
-F "file=@movie.mkv" \
-F "type=movie" \
-F 'values={"title":"Arrival","release_year":2016}'- Upload your source — POST a video with its title, year, genre and cast. Movies and episodes are organized on disk automatically.
- FFmpeg transcodes it — the background queue converts the source into HLS segments and a playlist, then marks the job complete.
- Stream to your users — authenticated clients hit the streaming endpoint and play the HLS output in any modern browser, app or TV client.
Floxflix is intended only for content you own or otherwise have the rights to stream. It ships with no media, and you are responsible for how you use it.
- Issues — bug reports and feature requests
- Discussions — questions and ideas
- Contributing — how to get involved
Released under the MIT License · Built for people who host their own media.