ntfy
A small server that turns an HTTP request into a push notification on your phone or desktop.
- Replaces
-
Paid push-notification services, such as Pushover.
All open-source alternatives to Pushover
- Difficulty
-
Difficulty: Easy
One container. It mounts /var/cache/ntfy and /etc/ntfy from the host, and the user: UID:GID line is a placeholder that you replace or remove.
- Stack
Go (language), SQLite (database)
- Deployment
docker_compose
- Requirements
Not stated.
- License
-
Apache-2.0 OR GPL-2.0-only(OSI-approved open source)Read from github.com/binwiederhier/ntfy/blob/5e11f4f/README.md#license
- Business model
-
Unknown
The README says the author sells paid plans for the hosted service at ntfy.sh. It does not say whether those plans add features that the open-source server lacks, so the business model stays unknown.
Source: github.com/binwiederhier/ntfy/blob/5e11f4f/README.md, read on .
- Repository
GitHub stats
- Stars
- 34,951
- Forks
- 1,666
- Open issues and pull requests
- 353
- Last push
- 2026-10-20
- Latest release
- v2.32.0
- Released
- 2026-10-18
From the GitHub API on . These numbers are a snapshot, not live. GitHub detected the license as Apache-2.0.
Compose file
services:
ntfy:
image: binwiederhier/ntfy
container_name: ntfy
command:
- serve
environment:
- TZ=UTC # optional: Change to your desired timezone
user: UID:GID # optional: Set custom user/group or uid/gid
volumes:
- /var/cache/ntfy:/var/cache/ntfy
- /etc/ntfy:/etc/ntfy
ports:
- 80:80
restart: unless-stopped
From the app's own repository: github.com/binwiederhier/ntfy/blob/5e11f4f/docker-compose.yml.
docker compose config (Docker Compose v5.1.0) exited 0 on this exact file. That check covers YAML and the compose schema. It does not start the containers. The line user: UID:GID is a placeholder: replace it with real IDs or remove it before you start ntfy.
Install
- Docker with the Compose plugin (github.com/binwiederhier/ntfy/blob/5e11f4f/docker-compose.yml)
A host with Docker and the Docker Compose plugin.
- Save the compose file as docker-compose.yml (github.com/binwiederhier/ntfy/blob/5e11f4f/docker-compose.yml)
Use the compose file shown above.
- Fix the user line (github.com/binwiederhier/ntfy/blob/5e11f4f/docker-compose.yml)
The compose file has the line "user: UID:GID" marked optional. UID:GID is a placeholder, not a valid value. Replace it with a real user and group id, or delete the line.
- Start it (github.com/binwiederhier/ntfy/blob/5e11f4f/docker-compose.yml)
docker compose up -d - Check that it answers (github.com/binwiederhier/ntfy/blob/5e11f4f/docker-compose.yml)
The compose file publishes host port 80 to container port 80. Open http://localhost/ in a browser.
Compose file check: config_ok on 2026-10-21.
Gotchas and maintenance
Gotchas
- The user line is a placeholder. The compose file sets "user: UID:GID". That is not a valid value until it is replaced or removed. (github.com/binwiederhier/ntfy/blob/5e11f4f/docker-compose.yml, checked 2026-10-21)
- State lives in two host folders and port 80 is used. The compose file mounts /var/cache/ntfy and /etc/ntfy from the host and publishes host port 80. Both folders must exist and be writable by the container user. (github.com/binwiederhier/ntfy/blob/5e11f4f/docker-compose.yml, checked 2026-10-21)
Maintenance
- Install and self-hosting docs are on the project site. The README links the project install and self-hosting documentation for configuration and upgrades. (ntfy.sh/docs/install/, checked 2026-10-21)
Signals
- Open issues and pull requests: 353
- Last push: 2026-10-20 (1 days before this page was built)
- Latest release: v2.32.0 on 2026-10-18 (3 days before this page was built)