Building Kochab
Why Kochab is a paid, client-direct mobile app for a self-hosted media stack instead of another free web wrapper.
Kochab starts from a constraint that shapes every other decision: your media stack already belongs to you. The Sonarr database, the Radarr config, the download queue, the library itself. They all live on hardware you own. The only thing missing is a real way to manage all of it from your phone.
Most existing answers fall into one of two camps. Browser tabs work, but you end up juggling five of them, pinching to zoom, and re-authenticating into each service. Self-hosted dashboards tidy the view into one page, but they are still web pages: one more service to run, with a desktop layout doing its best on a phone screen.
Kochab is a paid, native mobile app instead: it talks straight to each service’s own API, with credentials in your device keychain and no central account system storing your library or queue.
Client-direct by default
When you add Sonarr in Kochab, you give the app the URL and the API key for your Sonarr instance. From that point on, the app talks to Sonarr directly. Requests leave your phone, hit your server, and come back. The same is true for Radarr, Prowlarr, your download clients, Seerr, your media server, and your host.
There is no Kochab backend that holds your library, your watch history, or your API keys. The only server we operate is a small push relay, and it carries even less than that.
The one server we do run
Push notifications are the one thing a pure client-direct app cannot do alone. When a download finishes at 2am and your phone is asleep, something has to wake the app up.
Kochab uses a data-only relay for this. Your service posts its notification to the relay, which reads only a coarse event category from it and hands that category plus your device token to Google’s FCM, which delivers it to your device (via Apple’s APNs on iOS). It never stores or passes on media titles, file names, queue contents, or anything else about your library. If the relay disappeared tomorrow, the app would keep working; you’d just stop getting push until it came back.
Why paid instead of free
The free apps that do this are honest projects. They talk to your services the same client-direct way, and they route nothing through anyone’s servers. What kills them is time: keeping up with half a dozen service APIs that keep changing is continuous work, and more than one well-loved client has gone unmaintained that way.
Buying the app is how we fund that work. Every service we add and every integration we deepen lands in the app you already bought. No credits, and no unlock fee when we add a service.
There is no free tier with a paid upgrade, and no account to register.
What this means in practice
Install Kochab, point it at each service you run, and start managing. Your data stays where it already was. The app is a window onto your own infrastructure. A particularly nice window, tuned for a phone, with push. But a window nonetheless.
The work now is about how wide that window gets: which services we add next, how deep the controls go, and how much of the day-to-day homelab loop fits in one screen.