Nodes, guests, storage and disk health across every server you run — with start, shut down and restart behind Face ID. No account, no telemetry, and nothing between you and your servers.
Eleven platforms today, plus an agent you run on your own network so your fleet is still watched when your phone isn't.
iPhone and iPad · iOS 17 or later · coming to the App Store
A monitoring app is only useful if you believe it. These are the parts that earn that.
A degraded pool, a failing drive, a volume filling up, a node that stopped answering — stated in plain language at the top, worst first. You shouldn't have to interpret a wall of numbers to find out whether anything is wrong.
Most stopped guests are stopped on purpose. The alert fires only when the platform's own auto-start flag is set and the guest isn't running — your declaration, on your server, so it can't drift out of sync with reality.
Start, shut down, restart or force stop any VM or container. Controls sit behind a swipe or a long press, every action names what it's about to affect, and force stop is worded so you know you're pulling the power.
Biometrics unlock a short window rather than prompting on every tap. A prompt you tap through without reading protects nothing; the confirmation sheet naming the guest is what stops you halting the wrong VM.
SMART status, drive temperature, SSD life remaining and serial numbers — so the drive you need to replace is the one you actually pull. On TrueNAS, live ZFS vdev state and error counters, not the result of a self-test somebody ran months ago.
ZFS ARC and Unraid's page cache deliberately fill RAM. A single bar paints a healthy machine permanently red, so memory is drawn as two segments: real pressure, and reclaimable cache. Neither figure alone is honest.
Leave power management off your API token and the whole dashboard still works. Controls then return a clear "missing privilege" message rather than failing strangely.
A warning states the problem in plain words. When the cause is configuration — a missing privilege, a token without a role — it carries the fix: numbered steps and the exact command, copyable. When there's no fix, a diagnostics report is one tap from your support inbox.
A text console on a container, a shell on the node itself, and a full graphical display for VMs — driven like a trackpad, not a touchscreen. Behind the same Face ID gate as every control, and the socket closes the moment you leave the screen.
Long-press a concern and it collapses out of the way. It comes back only if the severity changes or the number gets measurably worse — measured from where you acknowledged it, not from a fixed tier you'd trip over immediately.
The part a phone can't do on its own — and the reason this isn't just another dashboard.
A backgrounded app runs when iOS feels like letting it, and "sometime in the next few hours" is a weak way to find out a pool degraded at 3am. The agent polls every server every minute, on hardware that never sleeps.
A container, a VM, a Pi, a Docker host. One static binary — no runtime to install, no database, no dependencies. It fits in 256 MB of RAM and 2 GB of disk.
Every poll is kept: a week at full resolution, then a year by the hour with peaks as well as averages. It serves its own dashboard in a browser, so the fleet has a desktop screen too.
ntfy, Gotify, a webhook, or a push notification to your phone — the alert says what is wrong. Prefer to keep the detail on your own network? One switch sends only "something needs attention".
Away from home, on cellular, or behind someone else's wifi, the app shows the agent's latest reading and labels it — "via agent", with its age — rather than claiming a freshness it doesn't have.
The agent talks to your servers and to your phone. It's free, entirely optional, and the app works without it — pointing the phone straight at each server is still the primary way to use it.
Every screen below is running against sample data — the same mode you can try before you own a token.
You're handing this app an API token to your infrastructure. Here's exactly what happens to it.
Stored with kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly —
never readable before the device's first unlock after a restart, and
never synced unless you turn on iCloud Keychain sync and choose which
servers go. Console passwords never sync.
Self-signed certs are fine — you compare the fingerprint on first connect. A changed certificate afterwards is a hard failure that asks you again. It's never silently accepted.
There's no server of ours to sign in to and no third-party code in the app at all. It talks to the addresses you typed in — plus, only if you ask for them, a version check on the Agent screen and our push relay. Both are spelled out.
Each of these needs an API token from the system itself. The app's setup guide walks through it, and so does the support page.
| Platform | Supported from | Supported through | Credential |
|---|---|---|---|
| Proxmox VE | 7.0 | 9.0 | API token (user@realm!tokenid) |
| TrueNAS SCALE | 23.10 | 25.10 | API key |
| Unraid | 7.0 | 7.2 | API key from unraid-api |
| Proxmox Backup Server | 2.0 | 4.0 | API token (user@realm!tokenid) |
| Portainer | 2.11 | 2.33 | Access token |
| Uptime Kuma | 1.21 | 2.0 | API key |
| Home Assistant | 2023.1 | 2026.8 | Long-lived access token |
| UniFi Network | 9.0 | 9.4 | API key |
| OPNsense | 23.1 | 26.1 | API key and secret |
| Pi-hole | 6.0 | 6.2 | App password |
| AdGuard Home | 0.107 | 0.108 | Web interface sign-in |
Older releases use different API shapes; support goes back to the last clean architectural break on each platform rather than to 1.0.
The app is built so that a platform is an adapter behind one shared interface — the dashboard, the alerting and the controls are already platform-agnostic, so adding one is a contained job rather than a rewrite. What gets built next is decided by what people actually ask for.