ntfy sends notifications to your phone and computer. Anything that can make a web request, a script, a backup job, Uptime Kuma or LibrePortal itself, can send you a message, and you get it on the ntfy app without an account anywhere.
On this page
Good to know before you install
Browser notifications need HTTPS; the phone apps work fine over plain http on your network
At a glance#
- What it is
- Push Notifications Communication
- Where it opens
- Web Interface
On its own port at
http://your-server:port, orntfy.your-domainonce you have a domain - Updates
- Automatic A backup is taken first, and it rolls back if the update fails
- Backups
- Included Part of the daily backup when that's switched on
- Copies
- As many as you like Run several copies, each with its own data
What it's good for#
Plenty of things on a server have something to tell you: a backup failed, a disk is filling up, a download finished, a website went down. ntfy is the simplest way to get those messages onto your phone. It's built around topics. Something sends a message to a topic, and every phone or browser subscribed to that topic gets it a moment later.
Sending is a single web request, so almost anything can do it. That's what makes it so handy: you don't need an app to support ntfy specially, only to be able to call a web address.
LibrePortal uses it straight away#
Install ntfy and LibrePortal starts using it for its own alerts: failed updates, backups and installs. It makes a private topic with a random name, sends a test message to it, and if you had no other notification channel switched on, it switches ntfy on. The Works with list on ntfy's page shows whether LibrePortal's alerts are going to this server.
To see those messages on your phone you subscribe to that topic, and its name is kept like a password. Notifications has the steps, the command that shows the topic, and what LibrePortal sends.
Signing in#
There's nothing to sign in to. ntfy on LibrePortal has no accounts: anyone who can reach it can send to a topic or read one, as long as they know its name. That's how ntfy is designed to be used, and it's why the topic name is the thing to protect.
Why topic names matter
A topic called backups is a topic anyone could guess, read and post fake messages to. Use long random names for anything you care about, like the lp- topic LibrePortal made. openssl rand -hex 8 on the server makes a good one.
ntfy's port starts out reachable by anyone who can reach your server. If you only need it at home and on your own devices, make it private and use the LibrePortal VPN when you're out. If it's on the internet with a domain, remember that strangers can use it to send notifications too.
Getting messages on your phone#
ntfy has an app for Android, on Google Play and F-Droid, and one for iPhone.
- Install the app and open its settings.
- Add your server. Use the address ntfy opens at from its page in LibrePortal:
https://ntfy.example.comwith a domain, orhttp://192.168.1.50:and the port number without one. Plainhttpis fine for the phone apps. - Subscribe to a topic by typing its name. Messages sent to it from now on appear as notifications, and recent ones already waiting on the server show up too.
The phone has to be able to reach your server to hear anything, so a phone that leaves home needs a domain, or the VPN switched on.
On Android, the app keeps a connection open to your own server so messages arrive immediately. That's why it shows a permanent notification of its own; Android requires one for an app that stays connected.
iPhones are different. Apple only lets apps be woken up through its own push service, which ntfy reaches through the public ntfy.sh server. LibrePortal's ntfy isn't set up to pass messages on that way, so on an iPhone new messages can take a long time to appear unless you open the app.
To check: decide whether LibrePortal should set upstream-base-url (https://ntfy.sh) so iPhone notifications arrive instantly, and document it here if it does
You can also subscribe in a browser, on ntfy's own web page. Browsers only allow notifications from HTTPS pages, so that needs a domain with HTTPS.
Sending your own messages#
Sending a message is one command. From the server or any computer that can reach it:
curl -d "The backup disk is 90% full" http://192.168.1.50:8123/lp-3f9a2c7d41b8e605
Use your own address, port and topic. Headers add a title, a priority and little tag emoji:
curl -H "Title: Backup disk" -H "Priority: high" -H "Tags: warning" \
-d "The backup disk is 90% full" http://192.168.1.50:8123/lp-3f9a2c7d41b8e605
Put a line like that at the end of a script, in a cron job, or anywhere else you'd like a tap on the shoulder.
Works with#
- LibrePortal's own alerts are set up for you, as above.
- Uptime Kuma has ntfy built in as a notification type. Add one under its notification settings with your ntfy address and a topic, tick it on the monitors you care about, and you'll hear when an app goes down.
- Node-RED flows can send notifications with an ordinary http request node posting to
http://ntfy-service:80/<topic>, over LibrePortal's own network.
Good to know#
- Updates are automatic, and LibrePortal follows ntfy's latest release. A backup is taken first.
- Messages are kept for a while on the server, so a phone that was off catches up when it reconnects. They're not an archive.
- Backups include ntfy's data folder. Messages waiting in its cache aren't worth backing up and aren't included.
- You can run several copies, but LibrePortal only sets its own alerts up on the first one. Which of several ntfy servers it should use is your choice.
Addresses and ports#
ntfy has one port. LibrePortal picks a free port number for each when you install, so yours will differ from anyone else's. The Config tab's Network section shows them, and the app's Open button uses the right one. "Anyone" means it's reachable from wherever your server is reachable; you can make it private later.
| What it is | Who can reach it | With a domain |
|---|---|---|
| Web Interface | Anyone | ntfy.your-domain |
Settings#
In its config file#
ntfy's own settings aren't on the Config tab yet. They live in the app's config file, described here so you know they exist. How to change them.
| Setting | What it does | Starts as |
|---|---|---|
NameCFG_NTFY_DISPLAY_NAME |
What this app is called on your dashboards. Leave empty to use its usual name | Empty |
Show on the LibrePortal DashboardCFG_NTFY_SHOW_ON_DASHBOARD |
Whether this app gets a shortcut on the front page of the LibrePortal WebUI, separate from any Dashy dashboard Choices: true, false |
true |
Detailed logsCFG_NTFY_VERBOSE_LOGS |
Whether ntfy writes its normal, chattier logs, including who connected, instead of only warnings and errors. Choices: true, false |
false |
Debug logging for 24 hoursCFG_NTFY_DEBUG_LOGS |
Turn on to see everything ntfy is doing while you look for a problem; it turns itself off after 24 hours. Choices: true, false |
false |
Access Without an AccountCFG_NTFY_DEFAULT_ACCESS |
What someone without an ntfy account may do with a topic. Phone notifications (up…) and LibrePortal's alerts (lp-…) work either way Choices: read-write, read-only, write-only, deny-all |
read-write |
Open TopicsCFG_NTFY_OPEN_PREFIXES |
Topic prefixes anyone may use without an account, comma-separated, e.g. app-. Only for apps whose topics have long random names after the prefix: the name is what keeps them private | Empty |
Tools#
ntfy's Tools tab has 1 button for jobs you'd otherwise need a terminal for. Each one runs as a task, so you can watch it on the Tasks page and read what it did. More about Tools.
Topics other apps post to without an ntfy account, kept open whoever else needs one.
Works with#
These are the other apps ntfy knows how to work with. Once it's installed, its page shows the same list with whether each one is connected. How this works.
- Email: Can forward a notification by email through your mail server, from an account of its own. Needs the mail server to have a real certificate. LibrePortal sets this up by itself when both are installed.
- LibrePortal's own alerts: Carries LibrePortal's own alerts to your phone. LibrePortal sets this up by itself when both are installed.
- Phone notifications (UnifiedPush): Carries phone notifications for apps on this server, without Google. There's nothing to switch on; LibrePortal shows whether it can work and lets you check.
- Grafana: Shows dashboards for the apps that have one. works with every app
- Home Assistant: Automations can send notifications to your phone.
- LibreMoney: Tells your phone when someone changes the ledger, without saying what.
- Matrix: Messages and calls reach Android phones through ntfy, without Google.
- Nextcloud: Talk's messages and calls reach Android phones through ntfy, without Google.
- Node-RED: Flows can send notifications to your phone through ntfy.
- Prometheus: Collects metrics from the apps that can export them. works with every app
- Uptime Kuma: Watches your apps and shows when one goes down. works with every app
- Uptime Kuma: Tells you on your phone when an app goes down.
Privacy and security#
All clear ntfy delivers push notifications from your server to your phone and tells no one else. Only iPhone instant delivery would need it to ping ntfy.sh, and that is off.
What leaves this server#
Nothing leaves this server on its own.
What LibrePortal turns off#
Nothing needed switching off.
Licence: Apache-2.0 / GPL-2.0 (dual). Audited: 21 October 2026. See the privacy of every app and the Promise.
Sources#
Under the hood#
- It runs this image:
binwiederhier/ntfy:v2.32.0@sha256:59250e1d8be2ee2186c4560322f625faef22ace380331f05b63f8842dbd62602. - It can sit behind Authelia's sign-in once Authelia is installed.
- Its own project and documentation: github.com/binwiederhier/ntfy
Ports, settings, tools and connections on this page are read from LibrePortal v0.10.97's app catalogue each time the guide is built.