a single Rust binary · open source · GPL-2.0
Your media library, at home.
KROMA is a self-hosted media server. It direct-plays HEVC on the web, on mobile and on every television. The indexer, the download engine, the VPN and the AI install as modules, in one click.
- starts in milliseconds
- zero containers
- video is never re-encoded
A single server
Six containers. One server.
A typical setup bolts together half a dozen services: six configs, six things that break, never at the same time. KROMA replaces them with one Rust server that starts in milliseconds, and a set of modules it installs and supervises itself.
Before · six containers
- Sonarr · Radarracquisition
- Prowlarr / Jackettindexers
- qBittorrentdownloading
- GluetunVPN + kill-switch
- Jellyfinserver + player
- Overseerrrequests
In the server
- Direct-play player, native HEVC
- Library scan, TMDB metadata, requests
- Accounts, profiles, casting
Modules, one click
- Cardigann + Torznab indexers
- librqbit BitTorrent engine
- Quality decisions, import and renaming
- WireGuard → SOCKS5 bridge with kill-switch
The server and its modules
The whole chain, without the container farm
Find, download, organize, stream. The server plays and catalogs; the rest are modules you install from inside the app. Nothing to wire between them.
Automatic acquisition
Ask for a title: KROMA searches every one of your indexers, scores each release on resolution, codec, size, seeders and your keywords, grabs the best one, then imports and renames it Plex-style.
decision engine · wanted-list
VPN with a real kill-switch
Paste a WireGuard config and all torrent traffic goes through a managed WireGuard→SOCKS5 bridge. A failed tunnel check pauses every download on the spot: no leak, no Gluetun to wire up.
WireGuard → SOCKS5
Native indexers
A reimplemented Cardigann engine runs the tracker definitions from Jackett and Prowlarr, directly.
Cardigann + Torznab
Download engine
A librqbit BitTorrent client fetches releases directly, driven by KROMA. Transmission and qBittorrent stay supported.
librqbit
Direct-play player
Original files are streamed by byte range and decoded by the client. Video is never re-encoded.
HEVC/H.265 · range-streamed
On-device AI
Recommendations and semantic search over local embeddings, subtitles generated by Whisper. On your machine, no cloud.
on-device · Whisper
Multi-user
Accounts, profiles, PIN locks, WebAuthn passkeys, invitations and per-user permissions. Share without opening everything up.
profiles · PIN · passkeys
Live statistics
Downloads, library scans and playback pushed in real time over a WebSocket bus, to dashboards and clients.
WebSocket bus
Modules
The server plays. The modules do the rest.
A fresh install is a media server: playback, library, accounts. Downloading, indexers, the VPN and the AI arrive as modules, from a store inside the app. No compose file, no ports to map, no credentials to copy between services.
How modules work12 official modules
- Embeddings
- mDNS discovery
- Release parser
- Remote access
- Whisper transcription
- qBittorrent engine
- Torznab indexers
- Transmission engine
- VPN
- Indexers
- Acquisition
- Torrent downloads
Direct-play, HEVC first
The server never transcodes video.
KROMA streams the original files by byte range; each client decodes HEVC/H.265 itself, in 10-bit and HDR, in hardware on Samsung and LG televisions. No transcoding pipeline, no CPU farm to keep warm.
One exception: an audio-only HLS stream for browsers that cannot decode AC3/EAC3/DTS. The video is copied, only the audio is transcoded to stereo AAC.
Decoded by the client
Nothing to re-encode: playback never wakes the processor. Your NAS stays free for everything else.
Platforms
The same KROMA, on every screen
The components and design tokens exist once, in a shared kit. They render natively in a browser, on a phone, and on a television driven by a remote.
Self-hosted
Built to be owned, not rented.
Open source, under the GPL-2.0 license. No account to create, no subscription, no central service that could shut down. Your library and your activity never leave your network.
- Free
- Open source, GPL-2.0 license
- Private
- Nothing leaves your network
- No central service
- No account, no subscription
- Offline
- Playback works without internet
$ docker run -d -p 4040:4040 \
-v /volume1/video:/media \
-v kroma-data:/data \
ghcr.io/maxscharwath/kromaJournal
From the blog
One UI kit, six platforms
How the same component renders on an Apple TV, a Samsung panel and in a browser, without ever being rewritten.
Welcome to KROMA
Why we collapsed six containers into a single Rust binary, and what that changes for your media library.
Run your own media server.
One binary to launch, your hardware, your files. No subscription, no telemetry.
© 2026 · free software · GPL-2.0 license