Introduction
Gotify is a simple, self-hosted server for sending and receiving push notifications. With a clean REST API for sending messages and WebSocket-based real-time delivery, it provides a private alternative to services like Pushover or Firebase Cloud Messaging.
What Gotify Does
- Receives push notifications via a simple REST API from any script or service
- Delivers messages in real-time to the web UI and Android app via WebSockets
- Organizes notifications by application with per-app tokens and priorities
- Supports a plugin system for extending server functionality with Go plugins
- Provides message history with search and pagination in the web interface
Architecture Overview
Gotify is a single Go binary with an embedded SQLite database. The REST API handles message creation and user management. WebSocket connections provide real-time push delivery to clients. The web UI is a React application bundled into the binary. Plugins are loaded as shared Go libraries at runtime.
Self-Hosting & Configuration
- Run via Docker with a single volume for the SQLite database and config
- Or download the static binary for Linux, macOS, or Windows
- Configure
config.ymlfor port, database path, and default user settings - Create application tokens in the web UI for each service that sends notifications
- Set message priority levels (0-10) to control notification urgency on clients
Key Features
- Dead simple API: a single POST with title and message sends a notification
- No external dependencies — single binary with embedded database and web UI
- Android app with priority-based notification channels and sound customization
- Per-application tokens isolate services and allow granular revocation
- Markdown support in messages for formatted notification content
Comparison with Similar Tools
- ntfy — HTTP-based pub/sub notifications; Gotify uses WebSockets and app tokens
- Pushover — commercial push service; Gotify is free and self-hosted
- Apprise — notification aggregator library; Gotify is a server with persistent history
- Signal/Telegram bots — messaging platform dependent; Gotify is fully self-contained
- Bark — iOS focused; Gotify targets Android and web with plugin extensibility
FAQ
Q: Is there an iOS app? A: There is no official iOS app due to Apple push notification requirements, but the web UI works on iOS browsers and third-party clients exist.
Q: How do I send a notification from a script?
A: Use curl: curl -X POST "http://gotify/message?token=APP_TOKEN" -F "title=Alert" -F "message=Disk full". Any HTTP client works.
Q: Can I set different priorities? A: Yes. Set the priority field (0-10) when posting a message. The Android app maps priorities to notification channels with configurable sounds.
Q: Does it scale for many users? A: Gotify is designed for personal or small team use. For large-scale notification infrastructure, consider dedicated message brokers.