Skip to main content

NotiDeck

One platform. Every notification.

Send an event once. Route it to the right channels. Track every delivery attempt.

NotiDeck is a self-hosted notification hub for application events, database alerts, and operational messages. Manage your sources, channels, templates, and delivery queue from a web console, with your data stored in your own database.

Get started · Documentation · GitHub · Report an issue

The current stable release is 0.1.1. Review the deployment guidance before exposing a production installation.

Quick start

You need Python 3.11 or newer. The installed package includes the web console; Node.js is only needed when building from source. SQLite is the simplest way to try it.

1. Install in a virtual environment

python -m venv .venv

Activate it on macOS/Linux with source .venv/bin/activate, or in Windows PowerShell with .venv\Scripts\Activate.ps1. Then install and start NotiDeck:

python -m pip install --upgrade pip
python -m pip install notideck
notideck serve

2. Complete browser setup

Open http://127.0.0.1:8000. The terminal prints the location of your private bootstrap.token file. Copy its contents into the setup wizard, choose your database, create your administrator account, and optionally choose an absolute log directory. Keep the token private; it is different from a source API key.

3. Start delivery processing

In a second terminal, activate the same virtual environment and run:

notideck worker

Leave both processes running: the server receives events and serves the console; the worker sends queued notifications.

By default, diagnostic logs are written under the application data directory as logs/server.log and logs/worker.log. Both files rotate at 10 MiB with five backups.

What you can do

  • Connect your applications: submit events using source API keys or signed webhooks.
  • Choose who gets notified: route by severity, environment, tags, or event metadata.
  • Make alerts readable: use templates for database errors, replication lag, backups, and more.
  • Keep track of delivery: inspect attempts, retries, failures, and queued notifications.
  • Stay in control: pause dispatch, retry failed jobs, and cancel pending jobs from the console.

How it works

Notification flow: your application sends an event to NotiDeck, routing rules select channels, a persistent queue holds deliveries, and workers send them to email, chat, or webhook destinations.

  1. Your application submits an event with a title, message, severity, and optional metadata.
  2. NotiDeck matches your routing rules and saves the notification and delivery jobs.
  3. A worker sends each delivery and records the result. Retryable failures are rescheduled.

Send your first notification

In the console:

  1. Add a Channel, configure its credentials, and use Test to check delivery.
  2. Add a Routing rule targeting that channel. For this example, match environment equals production and severity gte ERROR.
  3. Add a Source and create its API key. Copy the key when it is displayed.
  4. Submit an event and open Notifications to inspect the result.

Example for macOS/Linux:

export NOTIDECK_API_KEY='replace-with-your-source-api-key'

curl -X POST http://127.0.0.1:8000/api/v1/notifications \
  -H "Authorization: Bearer $NOTIDECK_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "environment": "production",
    "severity": "ERROR",
    "title": "Database replication lag",
    "message": "Replication lag exceeded 120 seconds.",
    "idempotency_key": "replication-alert-001"
  }'

A 202 response means the event was saved. A delivery marked SENT means the provider accepted it; it does not confirm that the recipient read or received it. Delivery is at least once, so a crash after provider acceptance can cause a duplicate send.

Channels and databases

Channel Verification so far
Email (SMTP), Telegram Live delivery confirmed during user testing
HTTP webhook Real HTTP delivery covered by automated smoke tests
Slack, Discord, WhatsApp templates, Twilio SMS, Signal bridge Adapters included; live account testing still needed

See channel setup for provider requirements and configuration.

Database Installation
SQLite Included; use one worker thread and local storage
PostgreSQL python -m pip install "notideck[postgres]"
MySQL python -m pip install "notideck[mysql]"
Oracle Experimental; see the support boundaries

PostgreSQL setup includes a TLS/SSL switch. Leave it unchecked for a server that does not use TLS. When enabled, certificate and hostname verification is the default.

Prefer Docker?

Docker Compose runs the server and worker with a shared persistent data volume.

git clone https://github.com/simtiaz019/NotiDeck.git
cd NotiDeck
docker compose up --build -d web
docker compose exec web cat /data/bootstrap.token

Open http://127.0.0.1:8000, enter the bootstrap token, and finish setup. Then start the worker:

docker compose up --build -d worker

The web port is bound to localhost. Keep the data volume and encryption key backed up; docker compose down -v deletes the volume. See the deployment guide for PostgreSQL, HTTPS, supervision, and backups.

Uninstall

Stop the server and worker, activate the same virtual environment, and run:

python -m pip uninstall notideck

This removes the Python package but deliberately keeps your database, configuration, encryption key, and notification history. Run notideck doctor before uninstalling to record the configuration directory. See the installation guide for complete data removal and Docker uninstall commands.

A console for everyday operations

View recent events, find failed deliveries, manage channels and routing rules, and inspect the queue without writing SQL.

NotiDeck web console showing notification totals, recent events, and severity breakdown.

Console screenshot uses synthetic demonstration data.

Learn more

I want to… Guide
Install or configure NotiDeck Installation · Configuration
Integrate an application API · Routing
Customize messages Notification templates
Deploy safely Deployment · Security
Understand current scope Support boundaries · Changelog
Contribute or build a provider Development · Provider plugins

NotiDeck is licensed under Apache-2.0.

Metadata

Release files for notideck 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for notideck 0.1.1
File Size Uploaded Provenance Actions
notideck-0.1.1.tar.gz 1.0 MB With provenance Details for notideck-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for notideck 0.1.1
File Interpreter ABI Platform Actions
notideck-0.1.1-py3-none-any.whl Python 3 none any Details for notideck-0.1.1-py3-none-any.whl

Total release size: 1.7 MB

Release files / notideck-0.1.1.tar.gz

Download URL notideck-0.1.1.tar.gz
Size 1.0 MB
Tags Source
SHA-256 checksum
How to use checksums
9d9c1838d7c232bd4393354b5ce90775de2461a753ceb6f83cd9949536db59b2
BLAKE2b-256 checksum
How to use checksums
716e7394fe949eb85e84168074969fd96279031b3cfc3412edcd20c3cb6b323a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Release files / notideck-0.1.1-py3-none-any.whl

Download URL notideck-0.1.1-py3-none-any.whl
Size 635.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d37dc4ad17befde5885d65b7feb8b2895468c3bc7c2bbca5fab3934dc81a16a8
BLAKE2b-256 checksum
How to use checksums
9932f114a3588f2f413c961dc67efe1b0c1cd17510567908a22cc776bdb3a9b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

Security for notideck 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for notideck-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page