Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

NotiDeck

One Platform. Every Notification.

NotiDeck is a self-hosted notification router with a React administration console, FastAPI ingestion API, and durable SQL-backed delivery workers. Version 0.1.0rc1 is the production release candidate for final acceptance testing. See implementation status and limitations before deployment.

Upgrade to the candidate · Validation results · Acceptance checklist

What works

  • Token-protected setup, SQLite initialization, administrator creation and login.
  • Argon2id passwords, expiring cookie sessions, CSRF protection and backend RBAC.
  • Sources, scoped/revocable API keys, signed inbound webhooks and idempotent ingestion.
  • Ordered rules, severity comparisons, metadata conditions, groups, simulation and templates.
  • Encrypted channel configurations and real provider adapters for Telegram, SMTP, Slack, Discord, HTTP webhooks, WhatsApp templates, Twilio SMS and a Signal bridge.
  • Durable delivery jobs, independent attempt history, leases, retries, throttling, dead letters, pause/resume, previewed queue cancellation and audit records.
  • Console setup, overview, searchable history, queue, channels, routes, sources, recipients, groups, templates, users, audits and settings, with light/dark appearance.
  • CLI, bundled frontend assets, Alembic migrations, optional database drivers, provider plugins and container/release workflow definitions.
flowchart LR
    App[External applications] -->|API key / signed webhook| API[FastAPI ingestion]
    UI[NotiDeck Console] -->|Session + CSRF| API
    API --> Rules[Rules and templates]
    Rules --> DB[(SQL database: events + jobs)]
    DB --> Worker[Leased worker processes]
    Worker --> Providers[Provider adapters]
    Providers --> Destinations[Telegram / Email / Slack / other channels]
    Worker --> DB

Install and run

Python 3.11+ is required. No Node.js is needed by wheel users.

# Install the locally built release (this repository has NOT been published to PyPI):
python -m pip install dist/notideck-0.1.0rc1-py3-none-any.whl
notideck serve

Open http://127.0.0.1:8000. The terminal shows the private bootstrap token file path. Read that file locally and paste the token into the setup wizard. Choose a database, test it, create your administrator and finish setup. No default accounts or passwords exist. The default SQLite database is stored in the OS application data directory, not in your current working directory.

After setup, run a worker in a second terminal:

notideck worker
# Alternatively, restart the local server with its managed child worker:
notideck serve --embedded-worker

The intended published installation command is pip install notideck; publication requires a separately authorized release and confirmed PyPI project ownership.

Send your first notification

  1. Create a channel and use Test to make a real test send.
  2. Create a routing rule with a destination channel. For example, environment equals production AND severity gte ERROR.
  3. Register a source and create its API key. Copy the key immediately.
  4. Submit an event, then inspect Notifications and Queue.
export NOTIDECK_API_KEY='replace-with-your-created-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":"CRITICAL","title":"Replication lag", "message":"Lag exceeded 120 seconds.","idempotency_key":"replication-123"}'

HTTP 202 acknowledges durable persistence, not recipient delivery. SENT means provider acceptance. Delivery is at least once; a crash after acceptance may cause duplicate sends. Queue clearing cancels eligible jobs and preserves history.

Docker

docker compose up --build -d web
# Complete setup in the browser, then:
docker compose up -d worker

The private bootstrap token is at /data/bootstrap.token inside the web container: docker compose exec web cat /data/bootstrap.token. Keep that token private. A PostgreSQL example is provided in docker-compose.postgres.yml.

Development

python3.12 -m venv .venv
. .venv/bin/activate
pip install -e '.[dev]'
npm --prefix frontend ci
npm --prefix frontend run build
pytest
npm --prefix frontend test
ruff check src tests
mypy src/notideck
python -m build

Dependency ranges live in pyproject.toml, the tested Python development snapshot in requirements-dev.lock, and the frontend dependency graph in frontend/package-lock.json. See development for optional live database tests.

Documentation

Installation · Configuration · API · Channels · Routing · Notification templates · Deployment · Security · Plugin API · Release checklist

Licensed under Apache-2.0. Contributions are welcome; read CONTRIBUTING.md. The screenshot below was generated by the local browser test with synthetic test data. Live-provider certification is not claimed.

NotiDeck Console after a browser test

Metadata

Release files for notideck 0.1.0rc1

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.0rc1
File Size Uploaded Provenance Actions
notideck-0.1.0rc1.tar.gz 834.2 kB With provenance Details for notideck-0.1.0rc1.tar.gz

Built distribution (wheel)

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

Total release size: 1.5 MB

Release files / notideck-0.1.0rc1.tar.gz

Download URL notideck-0.1.0rc1.tar.gz
Size 834.2 kB
Tags Source
SHA-256 checksum
How to use checksums
ecfedaca3aa04b5a58ee72b067ac03fe3ae0f410a7ff2a1ca3cedfa74e654564
BLAKE2b-256 checksum
How to use checksums
98f688556d0a27c400c0d4474d6b0677a38810fddfdedde3b8456189dbbda96b
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 Oct 26, 2026.

Transparency log

Release files / notideck-0.1.0rc1-py3-none-any.whl

Download URL notideck-0.1.0rc1-py3-none-any.whl
Size 633.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
25b47efb5e59217b5ca4f57e5e321c1a8086ba22f2e67f14838dd963bb1ba234
BLAKE2b-256 checksum
How to use checksums
209da688c3e0133aa6bcf841513a524423b3dae2488e4fbd15888b85417158ca
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 Oct 26, 2026.

Transparency log

Security for notideck 0.1.0rc1

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.0rc1.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 Oct 26, 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