blumeops/docs/reference/services/ntfy.md
Erich Blume 3818252d24 Upgrade ntfy v2.11.0 → v2.17.0 and add ntfy + frigate reference docs
Picks up 6 minor releases with no breaking changes. Notable additions
include dead man's switch notifications (v2.16.0), declarative ACL
config (v2.14.0), and crash fixes (v2.17.0).

Also adds reference cards for ntfy and frigate to the docs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 09:50:13 -08:00

2 KiB

title modified tags
Ntfy 2026-02-17
service
notifications

Ntfy

Self-hosted push notification service. Ntfy receives HTTP POST messages and delivers them to subscribed clients (mobile apps, web UI, CLI).

Quick Reference

Property Value
URL https://ntfy.ops.eblu.me
Tailscale URL https://ntfy.tail8d86e.ts.net
Namespace ntfy
Image binwiederhier/ntfy:v2.17.0
Upstream https://github.com/binwiederhier/ntfy
Manifests argocd/manifests/ntfy/

Architecture

Ntfy runs as a single pod with no persistent storage — message cache and attachments use an emptyDir volume. This is intentional: ntfy is treated as an ephemeral delivery channel, not a message store. Messages lost on pod restart are acceptable.

The upstream relay (ntfy.sh) is configured so mobile app clients can receive push notifications via Google FCM / Apple APNs without self-hosting those integrations.

Producers

Currently the only producer is frigate-notify, which publishes camera detection alerts (person, vehicle, animal) from frigate via MQTT to ntfy:

Frigate → MQTT (Mosquitto) → frigate-notify → ntfy → mobile clients

The frigate-notify config points to ntfy's cluster-internal address:

http://ntfy.ntfy.svc.cluster.local:80

Other services could publish to ntfy in the future — any HTTP client can POST to a topic.

Configuration

Server config is in a ConfigMap (ntfy-config):

Setting Value
base-url https://ntfy.ops.eblu.me
upstream-base-url https://ntfy.sh
attachment-total-size-limit 1 GB
attachment-file-size-limit 10 MB
attachment-expiry-duration 24h

No authentication is configured — access is restricted by Tailscale ACLs (only tailnet clients can reach the service).