Notifiq
How It Works Apps Self-Host Log in →

Open Source • Self-Hosted

Notifications on your infrastructure

A self-hosted notification platform with workflow orchestration. Run it anywhere—your homelab, your cloud, your rules.

Docker Compose ready Temporal workflows Multi-channel delivery

Run it yourself

Full control. No vendor lock-in. Your data stays yours.

Homelab Ready

Single docker-compose for everything. Runs on a Raspberry Pi or a full rack.

Your Data

SQLite or Postgres. Channel credentials encrypted at rest. No user tracking—just request metrics for admins.

Modular Apps

Mount only the frontends you need. Build your own on the same API.

Quick Start

git clone https://github.com/pypeaday/notifiq
cd notifiq
docker compose up -d

How It Works

Core Concepts

Four building blocks. That's all you need to know.

Events

Something that happens at a time. A meeting, a deploy, a reminder, an incident. Events have a start time, optional end time, and metadata you define.

POST /api/v1/events → creates event + starts workflow

Subscriptions

Who gets notified about what. Subscribe to specific events and choose which channels receive notifications. Auto-subscribe to future events by tagging your channels.

POST /api/v1/subscriptions → subscribe to event #42 via my Slack channel

Channels

Where notifications go. Slack, Discord, email, Gotify, ntfy, Pushover—anything Apprise supports. Tag channels with autosub:critical to auto-subscribe to matching events.

POST /api/v1/channels → add your Gotify/Slack/email endpoint

Workflows

The magic behind the scenes. Temporal workflows manage event lifecycles—scheduling reminders, handling updates, retrying failures. You don't touch these directly.

Automatic: 24h, 1h, 15min reminders • updates • cancellations

Typical Flow

Create Event Workflow Starts Subscribers Matched Reminders Scheduled Notifications Sent

1. Add a channel

curl -X POST /api/v1/channels \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "name": "My Slack",
    "apprise_url": "slack://...",
    "tag": "autosub:deploy"
  }'

2. Create an event

curl -X POST /api/v1/events \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "name": "Deploy v2.0",
    "start_date": "2025-01-15T14:00:00Z",
    "tags": ["deploy"]
  }'

3. Auto-subscribed!

# Channel tagged "autosub:deploy"
# matches event tagged "deploy"
# → You're subscribed automatically
# → Reminders sent to Slack

Tag your channels once, get notified about matching events automatically.