Push notifications are the nervous system of a self-hosted infrastructure. They tell you when a backup finishes, when your server disk is nearly full, when a CI/CD pipeline fails, or when someone logs into your services. For years, services like Pushbullet and Pushover dominated this space — but both come with monthly fees, closed source code, and the inherent privacy risk of routing your personal alerts through someone else’s servers.
In 2026, the two best self-hosted push notification services are Gotify and ntfy (pronounced “notify”). Both are open source, free to run, and give you complete control over your notification infrastructure. But they take fundamentally different approaches to solving the same problem.
This guide compares both solutions in depth, provides complete docker deployment instructions, and helps you choose the right tool for your setup.
Why Self-Host Your Push Notifications
Before diving into the tools, it’s worth understanding why self-hosting notifications matters:
- Privacy: Commercial notification services see every alert you send — including password change confirmations, security warnings, and personal messages. Self-hosting keeps this data on your own server.
- No subscription fees: Pushover costs $5 one-time per platform, Pushbullet Pro is $3/month. Self-hosted alternatives are free forever.
- No rate limits: When you control the server, you set the limits. Sending 10,000 notifications during a migration? No problem.
- Internal network alerts: Self-hosted services work entirely on your LAN. You can receive alerts even when your internet connection is down, as long as your local network is up.
- Integration flexibility: Both Gotify and ntfy offer simple REST APIs that can be called from any script, cron job, monitoring tool, or application.
- Regulatory compliance: If you’re managing infrastructure that handles sensitive data (healthcare, finance), routing alerts through third parties may violate compliance requirements.
Gotify: The Structured Notification Server
Gotify is a mature, well-established push notification server written in Go. It uses a traditional client-server model where applications register on the server and send messages to specific “applications” (which act as notification categories).
Architecture
Gotify follows a classic multi-user model:
| |
Each application gets its own API token. Messages are organized by application and priority level (1–10), with customizable icons per application.
Docker Deployment
Here’s a production-ready Docker Compose configuration for Gotify:
| |
After starting the container with docker compose up -d, visit http://your-server:8080. The default credentials are admin / admin — change these immediately.
Reverse Proxy Setup (Traefik)
For production use, you’ll want TLS and a proper domain:
| |
Sending Notifications
Gotify provides a straightforward REST API. Here’s how to send a notification using curl:
| |
You can also send JSON payloads for more control:
| |
The extras field supports rich formatting, including Markdown rendering and external notification actions.
Gotify CLI
Gotify ships with an official CLI tool for quick testing and scripting:
| |
Gotify Plugins
One of Gotify’s standout features is its plugin system. Written in Go and compiled to shared libraries, plugins can extend Gotify’s functionality:
- Gotify WebPush: Send notifications via the Web Push API (works on iOS via Safari)
- Gotify Discord/Telegram bridges: Forward notifications to external services
- Gotify Matrix: Bridge to Matrix rooms
Install plugins by placing the .so file in Gotify’s plugin directory and restarting:
| |
ntfy: The HTTP-Based Simplicity Champion
ntfy takes a radically different approach. Instead of a traditional client-server model with user accounts and applications, ntfy uses a pub/sub model based on HTTP topics. You send a message to a topic via HTTP PUT or POST, and any subscriber to that topic receives it instantly.
Architecture
| |
No accounts required. No application registration. Just pick a topic name and start publishing and subscribing.
Docker Deployment
ntfy’s Docker setup is even simpler than Gotify’s:
| |
Create a configuration file at ./ntfy/config/server.yml:
| |
Reverse Proxy Setup (Nginx)
ntfy works well behind any reverse proxy. Here’s an Nginx configuration:
| |
Sending Notifications
ntfy’s API is beautifully simple. Send a notification with a single curl command:
| |
The tag system supports emoji shortcodes, and the actions field creates tappable buttons in mobile notifications — for example, linking directly to a dashboard or CI run.
ntfy CLI and Subscription
Subscribe to topics from the command line to receive messages in real time:
| |
User Authentication and ACLs
While ntfy works without authentication out of the box, production deployments should enable it:
| |
Head-to-Head Comparison
| Feature | Gotify | ntfy |
|---|---|---|
| Architecture | Client-server with user accounts | Pub/sub with HTTP topics |
| Authentication | Built-in multi-user system | Optional ACL-based system |
| API Style | REST with app tokens | Simple HTTP PUT/POST |
| Real-time Delivery | WebSocket | WebSocket + Server-Sent Events |
| Mobile Apps | Android only (official) | Android + iOS (official) |
| Web UI | Full web interface | Built-in web UI |
| iOS Support | Via WebPush plugin only | Native app on App Store |
| Attachments | Yes (files, images) | Yes (up to configurable size) |
| Message Persistence | SQLite database | File-based cache |
| Tags/Emojis | No native tag system | Full emoji shortcode support |
| Notification Actions | Limited (via extras) | Full action button support |
| Upstream Relay | No | Can relay to public ntfy.sh |
| Federation | No | No (but upstream relay exists) |
| Plugin System | Go shared libraries | No plugin system |
| Language | Go | Go |
| Resource Usage | ~50MB RAM | ~30MB RAM |
| Binary Size | ~18MB | ~15MB |
| Maturity | Since 2018 | Since 2021 |
| GitHub Stars | ~12k+ | ~19k+ |
When to Choose Gotify
Gotify is the better choice when:
- You need a structured multi-user setup: Gotify’s user and application model provides clear separation. Each team or service gets its own application token, making it easy to audit and revoke access.
- You want Markdown-formatted messages: Gotify natively supports Markdown in notification bodies, making alerts more readable.
- You need extensibility through plugins: The plugin system allows deep customization, including bridging to other messaging platforms.
- You prefer a traditional web interface: Gotify’s web UI is polished and provides full message management, user administration, and application configuration.
- You’re already in the Android ecosystem: The Gotify Android app is mature, reliable, and integrates well with Android’s notification system.
Example: Monitoring Script with Gotify
| |
When to Choose ntfy
ntfy is the better choice when:
- You need iOS support: ntfy has an official iOS app on the App Store. Gotify requires the WebPush plugin and browser configuration.
- You want the simplest possible setup: With ntfy, sending your first notification takes a single curl command. No account creation, no app registration, no token management.
- You need pub/sub patterns: ntfy’s topic-based model naturally fits event-driven architectures. Multiple services publish to topics; multiple subscribers consume from them.
- You want emoji tags and action buttons: ntfy’s notification metadata system is richer, with emoji tags, clickable action buttons, and structured JSON payloads.
- You want upstream relay: ntfy can relay messages through the public ntfy.sh service, enabling notifications even when your server is temporarily unreachable.
- You need Server-Sent Events: ntfy supports both WebSocket and SSE, giving you flexibility in how you consume the event stream. SSE is often easier to work with from browser JavaScript.
Example: CI/CD Pipeline Notifications with ntfy
| |
Example: Uptime Monitoring Integration
| |
Migration Considerations
If you’re currently using Pushbullet or Pushover, migration is straightforward with either tool:
From Pushover: Both services support title, message, and priority fields that map directly to Pushover’s API. Update your scripts to point to your self-hosted endpoint and swap the token format.
From Pushbullet: Pushbullet’s device-targeted model maps well to Gotify’s application system. If you use Pushbullet’s channels, ntfy’s topic model is an even closer fit.
For gradual migration, run both services in parallprometheusonitoring tools (Prometheus Alertmanager, Grafana, Uptime Kuma) support custom webhook notifications that work with both Gotify and ntfy.
Alertmanager Configuration (ntfy)
| |
Uptime Kuma Integration
Both services work with Uptime Kuma’s notification system:
- Gotify: Use the Gotify notification type — enter your server URL and app token
- ntfy: Use the generic Webhook notification type with a curl-based payload, or use ntfy’s webhook compatibility endpoint
Performance and Resource Usage
Both tools are extremely lightweight, but there are measurable differences:
| Metric | Gotify | ntfy |
|---|---|---|
| Idle RAM | ~50MB | ~30MB |
| Binary Size | ~18MB | ~15MB |
| Docker Image | ~45MB | ~35MB |
| SQLite DB Growth | ~1KB per message | ~500B per message |
| Concurrent Connections | 1,000+ (WebSocket) | 10,000+ (SSE) |
| Startup Time | ~1s | ~0.5s |
For a homelab with dozens of services, either tool is negligible. For larger deployments with hundreds of publishers and thousands of subscribers, ntfy’s SSE-based architecture handles higher concurrency with lower resource overhead.
Final Recommendation
For most homelab users, ntfy is the better choice. Its topic-based pub/sub model is intuitive, the iOS app support is a significant advantage for mixed-device households, and the single-command API makes scripting trivial. The emoji tags and action buttons make notifications genuinely useful rather than just informational.
For teams and organizations, Gotify has the edge. Its structured user/application model, plugin system, and Markdown support make it better suited for environments where access control, auditability, and message formatting matter.
For the ultimate setup: run ntfy as your primary notification service for scripts and monitoring, and use Gotify for team-based alerts where user isolation and Markdown formatting are needed. Both can run on the same low-end VPS or Raspberry Pi with minimal resource impact.
The best self-hosted notification service is the one you actually set up. Both Gotify and ntfy can be deployed in under five minutes with Docker — so pick one and start sending yourself alerts today.
Frequently Asked Questions (FAQ)
Which one should I choose in 2026?
The best choice depends on your specific requirements:
- For beginners: Start with the simplest option that covers your core use case
- For production: Choose the solution with the most active community and documentation
- For teams: Look for collaboration features and user management
- For privacy: Prefer fully open-source, self-hosted options with no telemetry
Refer to the comparison table above for detailed feature breakdowns.
Can I migrate between these tools?
Most tools support data import/export. Always:
- Backup your current data
- Test the migration on a staging environment
- Check official migration guides in the documentation
Are there free versions available?
All tools in this guide offer free, open-source editions. Some also provide paid plans with additional features, priority support, or managed hosting.
How do I get started?
- Review the comparison table to identify your requirements
- Visit the official documentation (links provided above)
- Start with a Docker Compose setup for easy testing
- Join the community forums for troubleshooting