NotifKit vs SuprSend
SuprSend is a proprietary cloud notification platform with web campaign builders and usage-based tiers. NotifKit is an open-source, self-hosted notification engine that runs on PostgreSQL and Redis Streams with total queue visibility, modular TypeScript providers, and zero platform fees.
The short version
SuprSend targets product and growth teams who want a cloud platform to manage multi-channel messaging campaigns through a web UI. However, relying on a closed-source SaaS means your customer data is stored on their servers, message queues are black boxes, and volume spikes trigger expensive overage charges.
NotifKit gives developers direct control over notification pipelines. All queues, delivery logs, dead letters, and preference rules reside in your own database, with modular transports you can inspect and customize in pure TypeScript.
Feature comparison
| Capability | SuprSend | NotifKit |
|---|---|---|
| Hosting & Data Residency | Multi-tenant cloud platform SaaS. Customer contact records, emails, phone numbers, and notification payloads reside on SuprSend cloud infrastructure. | 100% self-hosted on your own PostgreSQL 14+ and Redis 7+ instances. Zero external data egress; private subnet compliance. |
| Workflow Authoring & Primitives | Visual node-based canvas (Triggers, Logic, Content, Vendors) with drag-and-drop delay, digest batching, and routing blocks. | Code-first TypeScript DSL (workflow()) with step.notify(), durable step.wait(), step.waitForEvent(), and memoised step.run() side effects. |
| Workflow State Durability | Managed by SuprSend cloud orchestration engine. | PostgreSQL durable step records + Redis Streams consumer groups; step outcomes are committed to disk before advancing, surviving worker restarts without duplicate sends. |
| In-App Notification Feed Component | Pre-built drop-in UI: Embeddable In-App Inbox SDKs for React, Flutter, React Native, Angular, iOS, and Android with multi-tab filtering. | Backend delivery only: Dispatches to webhook or queries PostgreSQL directly; no pre-built frontend UI widgets. |
| Template System & Localization | Unified visual multi-channel template composer with dynamic variables and multi-language translation support in web portal. | Git-versioned Handlebars templates with JSON Schema validation, CLI sync on deploy, and optional LLM aiPrompts for dynamic copy generation. |
| Channel Routing & Fallback | Vendor routing hierarchies configured inside SuprSend web console. | Deterministic channel arrays in code: channels: ["push", "sms", "email"] with fallback: true for sequential failover or false for parallel multicast. |
| Custom Transports & Extensibility | Restricted to SuprSend supported vendor catalog or generic webhook endpoints. | Minimal TypeScript Transport interface (send(task): Promise<DeliveryResult>); register any internal gateway or carrier via registerTransport(). |
| User Preferences & Quiet Hours | 3-level preference system (Global, Category, Channel-in-Category) with hosted preferences widget. | 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. |
| Dead-Letter Queue & Incident Replay | Cloud analytics dashboard and delivery logs. | Dedicated /v1/dlq API with single-request replay (POST /v1/dlq/{id}/replay), Prometheus /metrics, and local dashboard. |
| Local Development & CI Testing | Requires cloud sandbox environment, API keys, and outbound network calls. | Runs 100% offline via Docker Compose or in-memory provider-console transport for instant unit test suites. |
| AI / IDE Coding Assistant Tooling | Hosted MCP server (CLI), Agent SDK for runtime notifications, and plugins for Claude Code & Cursor Copilot. | 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 | Business tier: $250/mo base (50k sends) + $0.005/msg overage ($5,000/mo at 1M sends) on top of raw provider fees. | $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)
SuprSend offers a free tier (10k notifications/mo), an Essentials plan at $100/month (includes 50,000 notifications/mo), and a Business plan at $250/month with volume overages ($0.002/msg on Essentials, $0.005/msg on Business). Additionally, you pay underlying transport rates directly to your providers (Twilio SMS, Resend, AWS SES, FCM Push).
| Cost element | SuprSend (Cloud SaaS) | NotifKit (Self-hosted) |
|---|---|---|
| Base tier & overages | $100 – $250+/mo (Essentials / Business) | $0 (Open source forever) |
| Volume overages | $0.002 / msg (Essentials) · $0.005 / msg (Business) above 50k | $0.00 (0% markup, ever) |
| Seat licenses | Included in standard tiers | Unlimited seats ($0) |
| Self-hosted infrastructure | Managed by SuprSend cloud | $10 – $80/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
The table below models total monthly TCO across notification scales, including standard multi-channel deliverability (10% Twilio SMS @ $0.0079, 70% Resend/SES Email @ $0.0001–$0.0008, 20% FCM Push @ $0):
| Monthly volume | Direct provider cost | SuprSend total monthly TCO | NotifKit total monthly TCO | Annual savings with NotifKit |
|---|---|---|---|---|
| 50,000 sends | ~$43 / mo | $143 / mo ($100 base + $43 prov) | $53 / mo ($10 infra + $43 prov) | $1,080 / yr (63% 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 | $29,300 / mo (~$25k SaaS + $4.3k prov) | $4,380 / mo ($80 infra + $4.3k prov) | $298,920 / yr (85% saved) |
Key differences deep-dive
1. Transparent Redis Stream mechanics vs black-box SaaS
When an upstream delivery fails on a proprietary cloud aggregator, debugging why a message was dropped or delayed often means opening a support ticket or parsing opaque webhook errors.
NotifKit structures its delivery engine across distinct Redis Streams:
Inbound Stream → Enricher → Outbound Stream → Delivery Worker → Gateway (Resend/Twilio/FCM)
↳ Retry / DLQ Stream
Priorities are separated into physical streams (critical, normal, low),
preventing bulk email campaigns from starving urgent transactional authentication codes. If a delivery permanently
fails, it lands in the Dead-Letter Queue (/v1/dlq) where it can be inspected, replayed, or debugged.
2. Extensibility with modular TypeScript packages
Adding a new transport or custom internal webhook in NotifKit requires no proprietary plugin marketplace. Every transport implements a clean TypeScript contract:
import type { Transport, NotificationDispatchedPayload, DeliveryResult } from "notifkit";
export class CustomSmsTransport implements Transport {
readonly channel = "sms" as const;
async send(task: NotificationDispatchedPayload): Promise {
if (!task.destination) {
return { success: false, error: "no destination resolved for sms" };
}
const content = task.renderedContent.content as Record;
const body = (content.text ?? content.body) as string | undefined;
if (!body) return { success: false, error: "template produced no text" };
const response = await fetch("https://internal-sms-gateway.company.com/send", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
to: task.destination,
message: body,
}),
});
if (!response.ok) {
return { success: false, retryable: response.status >= 500, error: await response.text() };
}
return { success: true, providerMessageId: (await response.json()).id };
}
}
When to choose what
- Product managers need a web UI to orchestrate marketing notification campaigns.
- You prefer not to maintain PostgreSQL or Redis infrastructure.
- Your compliance policy allows cloud SaaS data aggregation.
- You want complete data privacy and full infrastructure ownership.
- You want zero per-notification SaaS markups.
- You want transparent queue mechanics, dead-letter recovery, and code-defined workflows.
- You want first-class AI coding agent integration via MCP.