Star
Compare · NotifKit vs Courier

NotifKit vs Courier

Courier is a hosted, multi-tenant notification platform built around visual designers and SaaS tiers. NotifKit is a self-hosted, code-first engine in your own infrastructure (PostgreSQL + Redis), with zero per-message markup, complete data privacy and native AI integration.

The short version

If non-technical marketing staff must design transactional email templates in a hosted web app, and you're comfortable routing customer PII through a third-party cloud, Courier is built for that.

If your engineering team treats notifications as critical infrastructure, wants workflows in Git, won't pay a SaaS tax per message, and must keep user data in your private VPC, NotifKit is a battle-tested engine you own completely.

Feature comparison

Capability Courier NotifKit
Deployment & Data Residency Closed-source multi-tenant cloud SaaS. Recipient emails, phone numbers, and notification payloads leave your VPC and reside on Courier AWS infrastructure. 100% self-hosted inside your private network (Docker, K8s, bare metal). Zero external data egress; all PII and logs remain in your private PostgreSQL database.
Workflow Orchestration & DSL Courier Automations: visual DAG node builder + JSON Automations API (steps: send, delay, filter, fetch-data, cancel). Code-first TypeScript DSL (workflow()) with step.notify(), durable step.wait(), step.waitForEvent(), and memoised step.run() side effects.
Workflow State Durability Managed by Courier cloud state machines; run history and event tracking retained for 30–90 days on standard plans. PostgreSQL durable step records + Redis Streams consumer groups; step outcomes are persisted permanently and survive container redeploys without state loss.
Template Authoring & Editing Courier Elemental (JSON-based declarative notification specification with conditional logic) and Courier Studio drag-and-drop designer. Git-versioned Handlebars templates validated against JSON Schema, with optional LLM aiPrompts for send-time copy generation.
In-App Notification Feed Component Pre-built drop-in UI: Courier Elements SDK (embeddable React, iOS, Android, and Flutter notification inbox widgets with real-time WebSockets). Backend delivery only: Dispatches to webhook or queries PostgreSQL directly; no pre-packaged frontend UI components.
Cross-Channel Fallback & Routing Provider routing hierarchies and retry configurations defined in web dashboard. Deterministic channel arrays in code: channels: ["push", "sms", "email"] with fallback: true for sequential rollover or false for parallel multicast.
User Preferences & Opt-Outs Hosted subscription center widget with topic and channel preferences. Full user preference engine: channel opt-outs, topic rules, and IANA timezone-aware quiet hours with midnight wrap.
Batching & Digest Windows Native digest node in Courier Automations builder with timed aggregation windows. Engine executes individual/scheduled sends via API or cron; digest queries and recipient aggregations are handled in application code and your database.
Dead Letter Queue & Incident Triage Live delivery logs in web dashboard; manual per-notification retry. Dedicated /v1/dlq API with programmatic replay (POST /v1/dlq/{id}/replay), Prometheus /metrics, and local dashboard.
AI / IDE Assistant Integration Hosted Model Context Protocol (MCP) server for Claude Code and Cursor, Courier CLI, and REST APIs. Built-in Model Context Protocol (MCP) server for Claude, Cursor, and Antigravity IDEs to inspect health, preview templates, and triage DLQ without leaving your editor.
Custom Transports & Extensibility Proprietary closed-source cloud integration catalog; custom transports require enterprise plan or proxy webhooks. Extensible TypeScript Transport interface (send(task): Promise<DeliveryResult>); register custom internal SMS/webhooks via registerTransport().
Cost Structure at 1M Sends/Month $4,950+/mo platform toll ($0.005/msg markup on 990k messages) + direct provider fees. $0 platform toll forever; run on existing database and a $35/mo VPS + direct provider fees.

Pricing & total cost of ownership (TCO)

Past the free tier, Courier charges per message. Standard self-serve pricing is $0.005 per notification after the first 10,000 free sends, or a negotiated enterprise contract. Provider fees (Twilio, Resend, AWS SES, APNs/FCM) come on top of Courier's platform fee.

Cost element Courier (SaaS) NotifKit (Self-hosted)
Free tier allowance 10,000 sends / mo included Unlimited ($0)
SaaS platform fee $0.0050 per send above 10k allowance $0 (Free & Open Source forever)
Team member seats Included on Developer / Standard Unlimited seats ($0)
Self-hosted infrastructure Managed by Courier cloud $10 – $20/mo (PostgreSQL + Redis VPS)
Direct provider deliverability Direct to Twilio, Resend, AWS SES, FCM Direct to Twilio, Resend, AWS SES, FCM (0% markup)
Interactive Pricing & Volume Calculator
NotifKit
$170/mo
~$15/mo infra + ~$155/mo prov
vs
Courier
$1,355/mo
$1,200/mo SaaS + ~$155/mo prov
250,000 / mo
10k 50k 250k 1M 3M 5M
Delivery provider
Includes ~$155/mo provider transport (Email + FCM Push · $0) + ~$15/mo self-hosted infra

Monthly TCO by notification volume

Total cost of ownership by volume, with a standard delivery mix (10% Twilio SMS @ $0.0079, 70% Resend/SES Email @ $0.0001–$0.0008, 20% FCM Push @ $0):

Monthly volume Direct provider cost Courier total monthly TCO NotifKit total monthly TCO Annual savings with NotifKit
50,000 sends ~$43 / mo $243 / mo ($200 SaaS + $43 prov) $53 / mo ($10 infra + $43 prov) $2,280 / yr (78% saved)
250,000 sends ~$218 / mo $1,418 / mo ($1,200 SaaS + $218 prov) $233 / mo ($15 infra + $218 prov) $14,220 / yr (84% saved)
1,000,000 sends ~$860 / mo $5,810 / mo ($4,950 SaaS + $860 prov) $895 / mo ($35 infra + $860 prov) $58,980 / yr (85% saved)
5,000,000 sends ~$4,300 / mo $16,800 / mo (~$12.5k SaaS + $4.3k prov) $4,320 / mo ($20 infra + $4.3k prov) $149,760 / yr (74% saved)

Key architectural differences

1. Data privacy and compliance

Courier is a multi-tenant cloud service. Every send transmits the recipient's email address, phone number, push tokens and the rendered message (often billing amounts, reset tokens, or personal health and financial data) to Courier's servers.

NotifKit runs in your private network. Customer profiles, contacts and logs stay in your PostgreSQL database, and NotifKit talks directly to the upstream gateway (e.g. Resend, Twilio, FCM) over TLS. No third-party data processor agreement (DPA) or external retention audit needed.

Note

Under HIPAA, GDPR or strict banking rules, self-hosting removes the compliance overhead and security reviews that SaaS notification aggregators require.

2. Code-defined workflows vs cloud automation graphs

Courier coordinates multi-channel sequences with Courier Automations (a node-based DAG builder and JSON schema API). Visual builders appeal to non-technical stakeholders but let notification logic drift out of sync with application state.

In NotifKit, workflows are TypeScript, run by durable Redis Stream state machines. They can sleep for days, wait for domain events (like setup.completed), and resume cleanly across worker restarts:

import { workflow } from "notifkit";

workflow("user-onboarding", async ({ step, event }) => {
  // Step 1: Send welcome email immediately
  await step.notify({
    template: "welcome-email",
    channels: ["email"],
    data: { name: event.name },
  });

  // Step 2: Wait for 3 days (survives restarts and deploys)
  await step.wait("3d");

  // Step 3: Check if user completed setup; if not, send reminder
  const completed = await step.waitForEvent("setup.completed", {
    timeout: "2d",
    match: { userId: event.user.id },
  });

  if (!completed) {
    await step.notify({
      template: "setup-reminder",
      channels: ["push", "sms"],
      fallback: true,
    });
  }
});

3. Local-first AI agent integration via Model Context Protocol (MCP)

Both support the Model Context Protocol (MCP) for assistants like Claude Code and Cursor. Courier's MCP server talks to its remote multi-tenant cloud; NotifKit's runs inside your private network, so assistants can inspect PostgreSQL recipient records, preview Handlebars rendering and query Redis Stream queues without sending operational data to a third party.

When to choose what

Choose Courier if
  • Non-engineers need a visual drag-and-drop email builder.
  • You do not want to manage PostgreSQL or Redis instances.
  • Your notification volume is low and predictable.
  • Your compliance policy allows sending customer PII to external SaaS vendors.
Choose NotifKit if
  • You want no per-message SaaS markup and predictable infrastructure costs.
  • Customer data privacy and regulatory compliance (HIPAA, GDPR) are paramount.
  • You prefer writing workflows in code with Git version control and CI testing.
  • You want seamless AI toolchain integration via native MCP.