Installation

Install KROMA on every screen you own.

The model fits in one sentence: install the server once, then every client, TV, computer, phone, browser, points at it and remembers it.

The server

Installed once, on a NAS, in Docker or on a Raspberry Pi.

The clients

Every screen asks for its address on startup.

Install the server

A single Rust server: on a NAS, in Docker, or built by hand. It serves the API, the web app and the video stream on port 4040 in direct-play: video is never transcoded.

Docker / Docker Compose

Recommended

The image is multi-architecture (linux/amd64 + linux/arm64) : it runs just as well on x86 as on a Raspberry Pi 4/5 with a 64-bit OS. Save this file, then bring the stack up.

docker-compose.yml
services:
  kroma:
    image: ghcr.io/maxscharwath/kroma:latest
    restart: unless-stopped
    ports:
      - "4040:4040"
    environment:
      # Library roots INSIDE the container (must match the bind-mount below).
      KROMA_MEDIA_DIRS: /media
    volumes:
      - kroma-data:/data
      - /volume1/video:/media
volumes:
  kroma-data:
bash
docker compose up -d

MediaKROMA_MEDIA_DIRS points at your media inside the container; mount the folder read-write if you use the built-in requests / downloads.

Synology (.spk)

The package is self-signed, not Synology-certified: you have to allow it once.

  1. 1Package Center → Settings → Trust Level : allow Any publisher.
  2. 2Package Center → Manual Install, pick the .spk, follow the wizard.
  3. 3Open KROMA; configure the media folders in its admin console.

From source (cargo)

A single Rust binary: build it yourself. SQLite and TLS are bundled; ffmpeg/ffprobe are still required for metadata and HLS audio.

bash
# Rust ≥ 1.86 + ffprobe. From the repo:
cd server
KROMA_MEDIA_DIRS=/mnt/media cargo run --release
Server options (server/README) →

Install the apps

Grab the right package from GitHub Releases (one vX.Y.Z tag carries every artifact). A single setup per device, developer mode or lifting quarantine, then the client asks for the server address on first launch. GitHub Releases →

Televisions

Sideload from a computer on the same network. Developer mode is enabled once.

Detailed steps

Samsung (Tizen)

.wgt

Developer modeThe Apps panel, type 1 2 3 4 5, turn it on and enter your computer's IP. The .wgt is already signed, no certificate required, just the Tizen Studio CLI.

bash
sdb connect 192.168.1.50
tizen install -n KROMA.wgt -t <device-id>

LG (webOS 4.0+)

.ipk

Developer modeInstall the Developer Mode app (free LG account), enable Dev Mode then Key Server. The session lasts 50 h, extend it from the app.

bash
bun add -g @webos-tools/cli
ares-install tv.kroma.webos_*_all.ipk -d tv

Android TV / Google TV / Chromecast

.apk

Developer optionsSettings → About → Android TV OS build : tap 7 times, then enable network debugging. Without a computer, the Downloader app installs the .apk from a URL.

bash
adb connect 192.168.1.60:5555
adb install -r KROMA-androidtv.apk

Apple TV

Beta

TestFlightDistributed through TestFlight, no sideloading. Join the beta →

Computers

Regular installers. The desktop apps update themselves from there on.

Detailed steps

macOS

.dmg

QuarantineNot notarized: on first launch, macOS calls it "damaged". Drag it into Applications, then lift the quarantine once (or Settings → Privacy → Open anyway).

bash
xattr -dr com.apple.quarantine /Applications/KROMA.app

Windows

.exe.msi

SmartScreenUnsigned installer: "Windows protected your PC" → More infoRun anyway. Silent updates from there on.

Linux (desktop)

.AppImage.deb

Videompv is bundled (the kroma-mpv sidecar drives hardware decoding), nothing to install.

bash
chmod +x KROMA_*.AppImage && ./KROMA_*.AppImage
# .deb : sudo apt install ./KROMA_*.deb

Steam Deck

.AppImage
  1. 1Copy KROMA_*.AppImage onto the Deck and chmod +x (Desktop Mode).
  2. 2Steam → Add a Non-Steam Game → Browse, then pick the AppImage.
  3. 3Launch in Game Mode, set the controller layout to Gamepad (D-pad = focus, A = OK, B = back).

Mobile

The phone apps are being finished, distributed through the test channels.

Detailed steps

iPhone / iPad

Beta

TestFlightJoin the iOS beta through TestFlight. Tester instructions →

Android

Beta

FirebaseDistributed through Firebase App Distribution. Tester instructions →

NAS & browser

Where the server already lives, there is usually nothing more to install.

Detailed steps

Web browser

Nothing to installThe server serves the web app itself. Open its address in any browser, or let mDNS discovery find it on the network.

url
http://nas.local:4040

Synology

.spk

Automatic updatesThe best route on a NAS: add KROMA as a package source in Package Center. The server installs, then updates itself, without re-downloading a .spk for every release.

  1. 1Package Center → SettingsPackage SourcesAdd.
  2. 2Paste the source URL below, then confirm the "Any publisher" trust level (the package is self-signed).
  3. 3Install KROMA from the source; updates then arrive automatically.
package source
https://packages.kroma.tv

Prefer a manual install? Download the .spk from the releases and go through Package Center → Manual Install. See the releases →

Signed for development, not for a store.

The builds are signed with a development certificate, not a paid store certificate. That is the whole reason for the one-time setup per device (developer mode, quarantine, SmartScreen): once done, updates go through without friction. Everything stays self-hosted, your library and your activity never leave your network.

A package that refuses to install? Most often a signature that changed: uninstall the old version, then reinstall.