ntfy vs Gotify: which open-source push server?
Both are open source, both self-hostable, both loved in r/selfhosted. The choice usually comes down to two questions: do you want a hosted option, and does anyone in your house carry an iPhone?
The short version
| ntfy | Gotify | |
|---|---|---|
| Hosted option | ✅ ntfy.sh (free, no account) | ❌ self-host only |
| Self-host | ✅ single binary / Docker | ✅ single binary / Docker |
| Android | ✅ excellent, UnifiedPush | ✅ solid (websocket) |
| iOS | ⚠️ app exists; officially “bare bones… a little buggy” | ❌ no official app |
| Send API | POST to a topic name | POST with an app token |
| Access model | topic name is the secret | per-app tokens, admin UI |
ntfy
ntfy is built around topics. Pick a name, subscribe to it in the app, POST text to it — no account, even on the public server:
curl -d "Backup done" ntfy.sh/your-topic-nameThe elegance has a flip side: the topic name is the entire secret. Anyone who guesses it can read your notifications and send you fake ones, so the docs tell you to pick something unguessable. Reserved (locked) topics require a paid plan or self-hosting.
Android delivery is first-class, including UnifiedPush for the de-Googled crowd. iOS is the documented weak spot — the project’s own FAQ calls the app “very bare bones and quite frankly a little buggy,” and the known-issues page covers notifications that stop arriving until you remove and re-add the subscription. Self-hosted servers additionally have to relay through ntfy.sh to reach iOS devices at all (APNs requires it).
Gotify
Gotify skips the hosted question entirely: you run the server or you don’t use Gotify. In exchange you get a clean admin UI, per-app tokens (no guessable topics), and full ownership of the data path.
curl "https://push.example.com/message?token=APP_TOKEN" \
-F "title=Backup" -F "message=done"Two caveats decide most Gotify evaluations. First, Android delivery runs over a persistent websocket, and the docs warn in bold that battery optimization will kill it — you have to exempt the app manually. Second, there is no official iOS app — it’s the most-requested issue in the project’s history, closed as won’t-do. Third-party bridges exist; none are officially maintained.
So which one?
- Android household + want a hosted option: ntfy.
- Android household + strictly self-hosted: either; Gotify’s token model is tidier, ntfy’s app is busier in a good way.
- Any iPhones involved: ntfy is the only one of the two with an official app, with documented reliability caveats.
One more consideration before self-hosting either: if the alert channel runs on the same infrastructure it’s supposed to alert you about, an outage silences its own alarm. Monitoring is the one workload where hosted has a structural argument.
That’s the gap trigger.fyi sits in — hosted, private keys instead of guessable topics, no server to maintain, and one curl to send. If the reason you’re comparing ntfy and Gotify is “I just want my scripts to ping my phone,” it’s the shorter path.
Related: ntfy alternatives · Pushover alternatives · Self-hosted push notifications · What is trigger.fyi