Skip to main content
[ PIER ]

Gotify

A self-hosted push notification server you can curl.

Service #notifications#push#alerts#messaging

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. 1 Open the Pier dashboard and click Add service.
  2. 2 Pick Gotify from the template list.
  3. 3 Choose the version, set a service name, and Pier provisions the container, storage, and ports automatically.
  4. 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

Send a notification with curl bash
curl "https://gotify.example.com/message?token=$APP_TOKEN" \
  -F "title=Backup complete" \
  -F "message=db dump 4.2 GB" \
  -F "priority=5"
From a Python script python
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,
)
From a Prometheus Alertmanager webhook yaml
# Alertmanager config
receivers:
  - name: gotify
    webhook_configs:
      - url: "https://gotify.example.com/message?token=APP_TOKEN"
        send_resolved: true
Listen on a websocket (for a desktop client) bash
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?
No official iOS client. Workarounds — UnifiedPush via NextPush or third-party clients. For iOS-first use cases, ntfy.sh has an official iOS app, which is the easier path.
How are messages stored?
SQLite by default (single .db file in /app/data). MySQL/PostgreSQL backends also supported via env vars. Messages are deleted from the server after delivery unless a long expiration is configured.
Token security?
Application tokens are random 16-char strings sent in plain HTTP headers/query — TLS is essential. Use Traefik with a custom domain on Pier to make HTTPS the only option.
Battery impact on Android?
Minimal. The official client uses a single long-lived websocket with backoff; it consumes less battery than most chat apps.
Plugin system — what can plugins do?
Gotify plugins are Go shared libraries loaded at server start that can publish messages, expose configuration, and react to events. Useful for "watch RSS / IMAP / RSS-like sources and push notifications without an external poller."
Backup strategy?
Stop the container, snapshot the data volume (SQLite file plus uploaded plugins), restart. Or use SQLite's online backup API for hot backups.
What version does Pier deploy?
The official gotify/server image. Pier offers the latest tag plus specific minor versions for pinning.

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 →