Gotify
A self-hosted push notification server you can curl.
Gotify is a tiny self-hosted server that lets any script, app, or alerting system send push notifications to your phone with a single curl. One Go binary, SQLite-backed, ~15 MB image, native Android client. The replacement for Pushover/Pushbullet when you want full control and zero per-message cost.
Deploy with Pier
- 1 Open the Pier dashboard and click Add service.
- 2 Pick Gotify from the template list.
- 3 Choose the version, set a service name, and Pier provisions the container, storage, and ports automatically.
- 4 Attach a domain if you want HTTPS. Traefik auto-provisions the Let's Encrypt certificate.
What is Gotify?
Gotify is a small, fast, self-hosted server for sending push notifications to a smartphone. It exposes a single HTTP endpoint — POST a title, message and priority with an application token, and within a second your Android phone receives a notification.
The entire server is one Go binary plus a SQLite file. The Android app maintains a long-lived websocket to the server, drains messages as they arrive, and reconnects on network change with exponential backoff. There is no centralized push service, no Google Cloud Messaging, no Apple Push Notification Service in the loop — your phone talks to your server directly.
For developers who already run a homelab or VPS, Gotify replaces Pushover/Pushbullet for free, gives every monitoring tool a curl-able notification endpoint, and adds a useful piece of plumbing to any home-automation or alerting stack.
How Pier deploys it
Pier uses the official gotify/server image. Default port: 80 internally
(behind Traefik). The data volume mounts at /app/data — SQLite database
and any installed plugins live there.
On first launch you set the admin password through env vars (Pier generates it for you). Log in, create an application, copy its token, and you can send your first notification with curl in under a minute.
Attach a custom domain at Pier so the URL is HTTPS — Gotify tokens travel in plain HTTP headers and TLS is essential.
When NOT to use Gotify
For iOS-first households, ntfy.sh has a polished iOS client and Gotify does not. For multi-platform team messaging, use a chat platform (Mattermost, Matrix). For purely transactional emails or SMS, use a dedicated email/SMS gateway. Gotify is laser-focused on personal push notifications to Android (and to web/desktop via websocket), and excels exactly there.
Key features
One-curl notifications
Send a notification with a single HTTP POST — any script, cron job, monitoring tool, CI pipeline, or shell one-liner can push to your phone.
Tiny footprint
Single Go binary, ~15 MB image, ~25 MB RAM. Costs nothing to run alongside your other services.
Native Android app
Free, open-source Android client at the Play Store and F-Droid. Stable websocket connection, battery-friendly, reliable notifications.
Per-application tokens
Each sender (cron, GitHub, your shell, Beszel) gets its own application token. Revoke individually without breaking others.
Priorities and grouping
Messages have priority levels (0-10) that map to notification importance on the client. Group messages by application for clean UI.
Plugin system
Optional Go plugins can run inside Gotify to pull from external sources (RSS, email, etc.) without writing a separate pusher.
Use cases
Monitoring alerts
Prometheus / Beszel / Uptime Kuma / Healthchecks.io push to your phone via Gotify webhook. No SMS bills, no Twilio account, no third-party service.
Cron job notifications
Long-running cron jobs (backups, ETL, training runs) curl Gotify when they finish or fail. You stop wondering "did it work?"
CI / deploy notifications
GitHub Actions, GitLab CI, Drone, Forgejo Actions push deploy status to your phone via curl. Faster than email, no Slack required.
Personal scripts and home automation
Doorbell triggers, smart-home alerts, "the laundry is done" pings — anything with curl can wake your phone.
Bridging from other systems
Use mqtt-to-gotify, gotify-bridge, or a custom proxy to forward notifications from MQTT, AMQP, or webhooks into Gotify.
Code examples
curl "https://gotify.example.com/message?token=$APP_TOKEN" \
-F "title=Backup complete" \
-F "message=db dump 4.2 GB" \
-F "priority=5" import requests
requests.post(
"https://gotify.example.com/message",
params={"token": app_token},
data={
"title": "Training run finished",
"message": "epoch 42, loss 0.018",
"priority": 7,
},
timeout=5,
) # Alertmanager config
receivers:
- name: gotify
webhook_configs:
- url: "https://gotify.example.com/message?token=APP_TOKEN"
send_resolved: true websocat "wss://gotify.example.com/stream?token=$CLIENT_TOKEN" How it compares
| vs Pushover | Pushover is hosted, polished, costs ~$5 one-time per platform. Gotify is self-hosted, free, less polished but fully under your control. Same use case. |
| vs ntfy.sh | ntfy is another excellent self-hosted notification server with a simpler URL-based subscription model (you subscribe to a topic name). Gotify uses tokens per application — slightly more setup, slightly more security. Both are great. |
| vs Telegram bot | Telegram is free and reliable but each notifier needs a bot + chat ID and the message format is conversational. Gotify is simpler for "alerts to my phone" use cases and survives Telegram outages or RKN-style blocks. |
| vs Pushbullet | Pushbullet was acquired and pivoted; reliability and pricing are now uncertain. Gotify is the self-hosted answer. |
Frequently asked questions
Is there an iOS client?
How are messages stored?
Token security?
Battery impact on Android?
Plugin system — what can plugins do?
Backup strategy?
What version does Pier deploy?
Related services
Deploy on your VPS
Gotify is a tiny self-hosted server that lets any script, app, or alerting system send push notifications to your phone with a single curl. One Go binary, SQLite-backed, ~15 MB image, native Android client. The replacement for Pushover/Pushbullet when you want full control and zero per-message cost.
Deploy this service →