NotifKit vs Knock
Knock is a cloud-hosted developer notification API billed on message volume and active users. NotifKit is a self-hosted engine on your own PostgreSQL + Redis, with no usage fees, no vendor lock-in and full operational transparency.
The short version
Knock offers a polished developer SaaS and hosted in-app notification components. As you grow, its subscription tiers and per-notification overage add up quickly, and your customer data and payloads live on their servers.
NotifKit gives teams a modern notification engine (cross-channel routing, per-user preferences, quiet hours, retries, durable multi-day workflows) without the SaaS price tag or cloud dependency.
Feature comparison
| Capability | Knock | NotifKit |
|---|---|---|
| Hosting & Data Residency | Closed-source multi-tenant cloud API. Customer emails, phone numbers, recipient profiles, and message payloads are stored in Knock's cloud database. | 100% self-hosted on your own PostgreSQL 14+ and Redis 7+ instances. Zero external data egress; private VPC data sovereignty. |
| Workflow Engine & Primitives | Visual workflow builder + declarative JSON steps (channel, batch digest windows, delay, branch conditions, throttle). |
Code-first TypeScript DSL (workflow()) with step.notify(), durable step.wait(), step.waitForEvent(), and memoised step.run() side effects. |
| Workflow State Durability | Orchestrated in Knock cloud engine; execution tree and run logs retained for 30 days on Starter plan. | PostgreSQL durable step outcome tables + Redis Streams consumer groups; completed steps are committed before subsequent steps run and survive worker redeploys without state loss. |
| In-App Notification Feed Component | Pre-built drop-in UI: Full-featured @knocklabs/react, React Native, Swift, Kotlin, and Flutter feed & guide components with real-time WebSockets. |
Backend delivery only: Dispatches to webhook or writes to PostgreSQL; no pre-built frontend UI feed components. |
| Environment Sync & CI/CD | Knock CLI (@knocklabs/cli) to push/pull workflow JSON definitions and sync template directories across cloud environments. |
Standard Git version control. Workflows and templates live in your code repository and deploy alongside application releases. |
| Multi-Channel Routing & Fallback | Branching conditions configured in visual workflow builder or channel step definitions. | Deterministic channel arrays in code: channels: ["push", "sms", "email"] with fallback: true for sequential failover or false for parallel multicast. |
| User Preferences & Quiet Hours | Hierarchical PreferenceSets (category, workflow, and channel levels) with hosted preference center components. | PostgreSQL user JSON with IANA timezone quiet hours (quietHours: [{ start: "22:00", end: "08:00" }] with midnight wrap support), channel opt-outs, and address suppression lists. |
| Template System & Personalization | Visual template editor in web dashboard supporting Markdown, HTML, and Liquid syntax. | Handlebars templates versioned in Git, validated with JSON Schema, with optional LLM aiPrompts for dynamic copy generation. |
| Dead-Letter Queue & Incident Replay | Cloud workflow run debugger with manual retry buttons. | Dedicated /v1/dlq API with single-request replay (POST /v1/dlq/{id}/replay), Prometheus /metrics, and local dashboard. |
| Local Development & CI Testing | Requires cloud connectivity, Knock test environment, and outbound API calls. | Runs 100% offline via Docker Compose or in-memory provider-console transport for instant unit testing. |
| AI / IDE Coding Assistant Tooling | Hosted Model Context Protocol (MCP) server, Knock CLI for AI coding agents, in-workflow agent function, and Claude/Cursor Skills. | Built-in Model Context Protocol (MCP) server for Claude, Cursor, and Antigravity IDEs to inspect queues, preview templates, and triage DLQ without leaving your editor. |
| Pricing Model & Platform Markup | Starter tier: $250/mo base (50k sends) + $0.0050/send overage ($5,000/mo at 1M sends) on top of your underlying Twilio/SES bills. | $0 platform fee, $0 per-message toll, unlimited users/sends; runs on your own ~$15–$35/mo PostgreSQL + Redis infra. |
Pricing & total cost of ownership (TCO)
Knock has a free Developer tier (up to 10k messages/mo) and a Starter tier at $250/month (50,000 messages/mo included), with overage at $0.0050 per message. Provider bills (Twilio, Resend, AWS SES, APNs/FCM) come on top.
| Cost dimension | Knock (Cloud SaaS) | NotifKit (Self-hosted) |
|---|---|---|
| Base platform fee | $250 / month (Starter plan, includes 50k msgs) | $0 (Open source) |
| Volume overages | $0.0050 / send above 50k allowance | $0.00 (0% markup) |
| Team member seats | Included (Unlimited members on Starter) | Unlimited seats ($0) |
| Self-hosted infrastructure | Managed by Knock 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) |
Monthly TCO by notification volume
Monthly TCO by volume, with a standard channel mix (10% Twilio SMS @ $0.0079, 70% Resend/SES Email @ $0.0001–$0.0008, 20% FCM Push @ $0):
| Monthly volume | Direct provider cost | Knock total monthly TCO | NotifKit total monthly TCO | Annual savings with NotifKit |
|---|---|---|---|---|
| 50,000 sends | ~$43 / mo | $293 / mo ($250 base + $43 prov) | $53 / mo ($10 infra + $43 prov) | $2,880 / yr (82% saved) |
| 250,000 sends | ~$218 / mo | $1,468 / mo ($1,250 SaaS + $218 prov) | $233 / mo ($15 infra + $218 prov) | $14,820 / yr (84% saved) |
| 1,000,000 sends | ~$860 / mo | $5,860 / mo ($5,000 SaaS + $860 prov) | $895 / mo ($35 infra + $860 prov) | $59,580 / yr (85% saved) |
| 5,000,000 sends | ~$4,300 / mo | $13,300 / mo (~$9.0k SaaS + $4.3k prov) | $4,320 / mo ($20 infra + $4.3k prov) | $107,760 / yr (68% saved) |
Key differences deep-dive
1. Predictable economics without a notification tax
As products grow, notification volume climbs fast: receipts, authentication codes, mentions, digests, failed-payment recovery, security alerts. With Knock, every one adds to your monthly bill.
NotifKit removes the middleman. On Redis Streams and PostgreSQL, 100,000 notifications cost the same in software licences as 10,000,000: $0. You pay only provider rates (e.g. $0 via FCM push, or Twilio carrier fees).
2. Durable workflows that survive deploys
Both support multi-step sequences with delays, batching and conditional branching. NotifKit runs them inside your infrastructure on Redis Streams and PostgreSQL locks:
import { workflow } from "notifkit";
workflow("payment-recovery", async ({ step, event }) => {
const { invoiceId, amount } = event;
// Day 0: Immediate email notification
await step.notify({
template: "invoice-failed",
channels: ["email"],
data: { invoiceId, amount },
});
// Wait 48 hours for retry or customer update
await step.wait("48h");
const paid = await step.waitForEvent("invoice.paid", {
timeout: "24h",
match: { invoiceId },
});
if (!paid) {
// Escalate to urgent SMS with fallback to push
await step.notify({
template: "urgent-payment-action",
channels: ["sms", "push"],
fallback: true,
priority: "high",
data: { invoiceId, amount },
});
}
});
If workers restart during a deploy, or a node crashes mid-way through a 48-hour wait, consumer groups and scheduled timers resume without losing state or sending duplicates.
3. Full data sovereignty & local observability
With Knock, past delivery logs and payloads are only reachable through cloud APIs or their web console.
With NotifKit, delivery events, contact statuses and dead letters live in your PostgreSQL database
and Prometheus metrics. Inspect dead letters in the local dashboard, or chase silent failures with
SQL or the /v1/dlq endpoint.
When to choose what
- You want a fully managed SaaS API and no backend workers to run.
- You want pre-built hosted in-app notification feed UI components.
- Your budget comfortably covers usage-based SaaS pricing.
- You want to own the infrastructure, with no per-message costs.
- User data, push tokens, and phone numbers must remain inside your VPC.
- You want full transparency into Redis Streams, worker scaling, and dead letters.
- You use AI coding agents and want native MCP tool integration.