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, and neither is good enough. Browser tabs work, but you end up juggling five of them, pinching to zoom, and re-authenticating into each service. Free web wrappers and dashboards centralize the view but usually by routing your data through someone else’s server, which defeats the entire point of self-hosting.
Kochab is a different bet: a paid, native mobile app that 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, Jellyseerr, 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. The relay receives a tiny payload, a device token and a category, and hands it to FCM and APNs to deliver. It never sees media titles, file names, queue contents, or anything about your library. If the relay disappeared tomorrow, the app would keep working; you’d just stop getting push until it came back.
Why pay-once instead of free
A free app that talks to your self-hosted services has to make money somewhere, and the usual answer is the same routing problem from earlier: a central account, a sync server, a “cloud” feature that quietly becomes the place your data lives. Subscription pricing pushes the same direction, because the server has to keep running to justify the recurring bill.
A one-time purchase inverts the incentive. You pay once, the app unlocks, and there is no server we need to keep alive to earn back a subscription. The relay is small and cheap to run. The app’s job is to be a good client, not to grow a service around your data.
That is also why there is no free tier with a paid upgrade, no account system, and no analytics passing through our infrastructure. The cleanest way to respect a self-hoster’s stack is to not be in the middle of it.
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.