
34.1k stars · Apache-2.0 · v2.28.0 (2026-08-27) · Track this in Rising ↗
Push notification to your phone from one line of curl — the missing last step of every alert and long job in this ledger.
Radar check
What we found when we opened it. Every bar is one fact, with its date.
Last code pushed 25 Oct 2026, 2 days before this check.
Latest release v2.34.0 on 24 Oct 2026.
Public since October 2021, about 5 years.
35,058 stars and 1,676 forks.
443 commits and 74 new issues in the last 90 days.
436 contributors. 84 pull requests merged in 90 days.
A security policy says how to report a problem. No published security advisories.
How the bars are scored
- Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
- Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
- Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
- Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
- Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
- Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
- Security. A published security policy 80, none 40; published advisories are listed, not scored.
Checked by Repo Radar on 25 Oct 2026 from the repository on GitHub. Covered in Edition 7.
▶Repo detailsthe review · specs · pros & cons · install
What it does
You send an HTTP POST to a topic address, and the message appears as a notification on every device subscribed to that topic. There is a free public server at ntfy.sh and the same software can be run privately as one small program written in Go. Mobile applications exist for both phone platforms, and a browser can subscribe too. Messages carry a title, a priority, tags, a click action and file attachments, and a message can be scheduled for later. The private server can require accounts and restrict who may read or write each topic, store messages for a chosen period, and since version 2.30.0 it has an experimental mode in which several servers share one PostgreSQL database — the release notes say that mode is not ready for production. What it does not do is deliver anything by itself: it is the last step of somebody else's script, not a scheduler, a monitor or a workflow tool.
Why it matters
Who it suits. Anyone with scripts, backups, long builds or monitors whose results currently end in an email that gets read tomorrow. It suits the owner of a small server best of all, because wiring a shell script to a phone is otherwise a surprising amount of work. Skip it if the team already lives in a chat tool with webhooks, because the notification probably belongs in the channel people are already reading.
Verdict. Two minutes well spent, and the thing it fixes is real: a monitor that writes to a dashboard nobody opens has not told anyone anything. louislam/uptime-kuma (#1) has it as a built-in notification target, so connecting the two is a dropdown rather than a project. The caution is the public server: a topic name there works as the password, so anyone who guesses it can read the messages or post to it. Use a long random topic name, and move to a private server before anything sensitive goes through it. Self-hosting is one small program, although reliable notifications on iPhones are the fiddly part of an otherwise trivial setup. caronc/apprise is the better answer if the goal is to send to many different services rather than to run one.
Summary (Key Points)from the README
Key features
- Plain HTTP messaging: Send notifications with simple PUT or POST requests from scripts on any computer.
- No sign-up: The free ntfy.sh service requires no account to start sending notifications.
- Self-hostable: Because ntfy is open source, you can run your own instance of the server.
- Mobile apps: An open-source Android app is on Google Play and F-Droid, and an open-source iOS app is on the App Store.
- Email receiving: The server uses go-smtp to receive e-mails.
- Message cache: The server keeps a persistent message cache backed by go-sqlite3.
- Push delivery: The server sends Firebase Cloud Messaging (FCM) messages and web push notifications (via webpush-go).
- Command-line interface: The CLI is driven by urfave/cli.
- Web app: A React and Material UI web app is included.
- Paid hosted plans: Plans start at $5/month for users who don't want to self-host, and donations are accepted through GitHub Sponsors and Liberapay.
- Translations: Contributors can translate the project through Hosted Weblate, with German, English and Bulgarian flags shown as examples.
Ways to install
| Platform or method | What it needs | Effort |
|---|---|---|
| ntfy.sh hosted service | Nothing beyond sending a PUT or POST request; no sign-up required | Not stated in README |
| Self-hosting the server | Running your own instance of the open-source server; the README links to Install / Self-hosting docs for details | Not stated in README |
| Android app | Google Play or F-Droid | Not stated in README |
| iOS app | App Store | Not stated in README |
Important
- Paid plans: Hosted plans are sold through the web app, and the README does not list what each plan includes.
- Beta access: iOS betas are offered through TestFlight, while Android betas go through Discord or Matrix, since the maintainer has not yet created a Google Play testing channel.
- Contributions: Larger features should be discussed on Discord or Matrix before a pull request, according to the README.
- Dual license: The project is licensed under both Apache License 2.0 and GPLv2, so check which terms suit your use.
- Vendored code: Go's text/template is vendored under template/gotext/ with a patch that adds an execution deadline.
Written by an AI model from the project’s README; not part of the review, and it can be wrong.
curl -d "message" ntfy.sh/your-topicis the whole integration, from any language or shell.- Self-hosting is one small Go program, with optional accounts and per-topic permissions.
- Attachments, priorities, tags and scheduled delivery are all built in.
- On the public server the topic name is the only secret, so a guessable name is an open channel.
- Reliable delivery to iPhones is the hard part of running a private server; the Android path is much smoother.
- Notifications are easy to overuse. Three topics are useful and thirty are noise.
curl -d "ingest finished: 412 rows" \ ntfy.sh/a-long-random-topic-name




