All articles
AnnouncementBehind the scenes

Welcome to KROMA

By Maxime Scharwath2 min read

Standing up a self-hosted media library today means wiring together half a dozen services: an indexer, a tracker aggregator, a BitTorrent client, a VPN wrapper, a media server, a request interface. Six containers, six configuration files, six things that break, each in its own way, and never at the same time.

KROMA refuses the premise. None of that should be your problem.

One server, written in Rust

A classic setup bolts together Sonarr, Radarr, Prowlarr, qBittorrent, Gluetun and Jellyfin. KROMA is one server, and it starts in a few milliseconds. The indexer, the download engine, the VPN bridge with its kill-switch and the player all run under it. You install the server once; everything past playback and catalog arrives as a module, not as another container to cable up.

There is no transcoding farm to keep warm either. The server streams the original files by byte range, and each client decodes HEVC/H.265 itself, in hardware on Samsung and LG televisions. Your NAS stays at rest.

The same design, everywhere

The other decision is visual. KROMA speaks one design language, deep charcoal and warm amber, two type families, no emoji, and holds it on the web, on mobile, and on the 10-foot experience driven by a remote in the living room.

The components and the design tokens exist once, in a shared kit, and render natively on React Native as well as in the browser through react-native-web. A tile looks the same on an Apple TV and on a Samsung panel because it is the same tile.

Free, and built to be owned

KROMA is open source, under the GPL-2.0 license. Your library and your activity never leave your network. There is no account to create, no subscription, no central service that could shut down.

Built to be owned, not rented.

Later posts take the technical choices one at a time: the spatial focus engine for the remote, direct-play decoding, the WireGuard bridge, and how one UI kit serves six platforms.