pingd docs

A small and self-hosted service for sending push notifications.

pingd is a small, self-hosted push notification service. It lets you send notifications to your phone or desktop from any script, app, or service you run, with user accounts, fine-grained permissions, and automatic retries on transient delivery failures. Free software, runs in one Docker container.

How it works

curl -s https://pingd.example.com/topics/news/messages \
  -H 'Content-Type: application/json' \
  -d '{ "payload": { "body": "Hello" } }'
pingd-cli messages publish --topic news --body "Hello"
import requests

requests.post(
    "https://pingd.example.com/topics/news/messages",
    json={"payload": {"body": "Hello"}},
)

What pingd gives you

Topics

Access you can reason about

Public read/write flags, per-topic tokens for limited access, and NATS-style pattern permissions such as alerts.> and deploy.* with ro, wo, rw, or deny.

Delivery

Per-device state

Each push to each device has a delivery row, so missed notifications are inspectable instead of mysterious.

Expiry

Messages can go stale

Set a TTL for time-sensitive alerts. Late deliveries are marked expired instead of being pushed after they no longer matter.

Webhooks

Accept JSON from other tools

Give a service a webhook URL and a small template. Incoming JSON becomes a message on the topic you choose.

Clients

Use the surface that fits

Use the dashboard for interactive work, or pingd-cli from scripts and terminals.

Operations

Small deployment shape

Runs as a small Docker container and is quick to set up.