The CMS for transactional notifications. Manage email, SMS, and push templates without shipping code. Your team edits copy, your servers send it.
1 import { senderkit } from "@senderkit/node"; 2 3 export async function POST(req: Request) { 4 const user = await createUser(req); 5 6 // Marketing edits this template. You don't redeploy. 7 await senderkit.send("welcome_email", { 8 to: user.email, 9 vars: { first_name: user.first_name, trial_days: 14 }, 10 }); 11 12 return Response.json({ ok: true }); 13 }
SenderKit splits the two halves of every transactional message — the trigger and the content — so the right team owns each.
Reference templates by slug. The compiler enforces the variable contract — never ship a send with a missing field again.
await sk.send("welcome_email", { to: user.email, vars: { first_name: user.first_name, trial_days: 14 }, });
A real editor with versioning, branching, and rollback. Variables are typed too — your team can't rename one and break the build.
Hey {{first_name}},
You have {{trial_days}} days to try Pro free…
Lin · 2m ago — changed CTA copy
Marketing changes a headline at 4pm. It's live by 4:01. No PR, no review, no on-call ping.
Email, SMS, push, in-app — same template tree, same variables, same audit log. Stop maintaining four mailers.
Every save is a version. Diff it. Branch it. Roll back a typo in one click — without redeploying anything.
Rich editor for product. Code editor for engineering. Same template, two views.
Every save is a version. Diff. Branch. Roll back to any point.
Email, SMS, push, in-app. One API. One template store.
Type-safe SDKs for Node, Python, Go, Rust. CLI for CI. Webhooks for events.
Variants per locale. Auto-detection. Fallbacks. Live preview in any language.
Templates served from the edge. Cold-start sends in under 50ms.
Free up to 3,000 messages a month. No credit card. No sales call.
By creating an account, you agree to our Terms.