Skip to content
← Back to all tools

ntfy

Free

Push a notification to your phone with one line of curl

Open Source No Ads No Tracking No Sign-up Cross-platform Self-hostable

An HTTP-based push notification service. Subscribe to a topic in the phone app, and any script, program or service that can send a PUT or POST to that topic makes your phone buzz. Use the public ntfy.sh server without signing up, or host the server yourself.

Why we picked it

Dual-licensed Apache-2.0 and GPL-2.0, 34,413 stars.

It compresses "have my script notify me" into one line:

curl -d "Backup done" ntfy.sh/mytopic

Install the ntfy app, subscribe to mytopic, and the message pops up. No bot to register, no token to configure — scheduled backups, long builds, server alerts, finished downloads, anything that can run curl can use it. Messages can carry a title, priority, tags, a click-through link and attachments. Many self-hosted services, including Uptime Kuma and Home Assistant, offer ntfy as a notification channel.

The server is a single statically linked binary that runs on Linux and Windows, with Docker images as well. Self-hosted, there are no message quotas; just change the server address in the app.

To be clear about:

  • On the public server, the topic name is the password. Without an account, anyone who knows the topic can read and write it. Pick a hard-to-guess name and keep sensitive content off the public server.
  • A self-hosted server lets everyone read and write every topic by default. For a private instance, set auth-default-access to deny-all and create an account for yourself.
  • ntfy.sh has paid plans (Supporter $6, Pro $12, Business $25 per month) that buy higher message limits and reserved topics on the public server. Self-hosting needs none of them.
  • The Google Play build of the Android app uses Firebase for topics on ntfy.sh; the F-Droid build contains no Firebase and uses instant delivery for everything.
  • For instant notifications on iOS from a self-hosted server, set upstream-base-url: "https://ntfy.sh" so wake-up requests are forwarded through the public server; without it, delivery can take hours.