100% Open Source Infrastructure

Notifications.
Made dead simple.

6 channels, 1 API call. Completely free and open-source. We handle routing, retries, and fallbacks so you can focus on shipping features that boost retention and recover lost revenue.

notify.ts — payment-failed
await notify({ user: "usr_123", template: "payment-failed", channels: ["email", "telegram"], fallback: true, cohort: "churn-risk"}) // notifkit picks the route, personalizes// via AI for the cohort, and retries.
delivery log
routeresolving #a91f…
delivered142ms
telegramunreachabletimeout
fallback→ sms
smsdelivered88ms
done2/2 reached
WhatsApp Telegram Discord SMS Push

Building this yourself is a trap.

You start with a simple email API. Then product asks for SMS. Then push. Suddenly you're debugging rate limits, managing 5 different SDKs, and writing custom retry queues. notifkit handles the nightmare so you can focus on shipping features that drive revenue.

01

Intelligent routing

Pick channels by user preference, locale, urgency, or quiet hours. notifkit chooses the order and skips what won't land.

02

Retries & fallback

Exponential backoff per provider. Set fallback: true and a dead channel rolls to the next one automatically.

03

Templates

Write once with variables. notifkit renders per channel — rich HTML for email, plain text for SMS, blocks for Discord.

04

Analytics

Delivery, open, and failure rates per channel and per template. Query the log or stream it to your warehouse.

05

Event-triggered workflows

Fire on an event, wait, branch, escalate. Define multi-step sequences without standing up a queue.

06

AI Personalization

Stop sending generic alerts. Pass a cohort or user context, and the built-in AI dynamically rewrites and translates your templates for maximum engagement.

Recover lost revenue

With a global cart abandonment rate of 70%, single-channel emails aren't enough. Use workflows to automatically escalate across channels—studies show omnichannel recovery recaptures up to 15% of lost revenue, with SMS boasting a 58% recovery rate.

recover-revenue.ts
workflow("cart-abandoned", ({ step }) => {
  step.notify({ channels: ["push"], template: "cart-nudge" })
  step.wait("2h")
  // Escalate to a higher-friction channel if ignored
  step.notify({ channels: ["sms"], template: "cart-discount" })
})

Drive user retention

Omnichannel apps retain 91% more customers. Keep users engaged with smart, personalized notifications—which drive up to 190% higher 90-day retention and 4x higher reaction rates compared to generic blasts.

retention.ts
await notify({
  user: "usr_123",
  template: "weekly-digest",
  channels: ["email", "push"],
  // Automatically sends when the user is most likely to open
  smart_delivery: true
})

Fallback chains

Try the cheap channel first, escalate to the reliable one only if it fails. One flag turns the chain on.

fallback.ts
await notify({
  user: "usr_123",
  template: "auth-code",
  data: { code: "88421" },
  channels: ["push", "sms", "whatsapp"],
  fallback: true   // stop at first delivery
})

Event workflows

Send, wait, then escalate if the user hasn't acted. No cron, no queue, no state machine to babysit.

workflow.ts
workflow("invoice-overdue", ({ step }) => {
  step.notify({ channels: ["email"] })
  step.wait("24h")
  step.notify({ channels: ["sms", "whatsapp"] })
  step.wait("48h")
  step.escalate("#billing-alerts")  // discord
})

Templates with variables

One source of truth. notifkit renders the right shape for each channel from the same payload.

template.ts
await notify({
  user: "usr_123",
  template: "order-shipped",
  data: {
    name: "Aanya",
    tracking: "1Z999AA",
    eta: "Fri, 27 Jun"
  }
})  // HTML for email, plain text for SMS

AI Hyper-Personalization

Pass a cohort or rich context, and let our AI dynamically rewrite the template's tone, language, and length for each user before delivery.

ai-personalize.ts
await notify({
  user: "usr_123",
  template: "subscription-renewed",
  channels: ["email", "sms"],
  context: {
    cohort: "high-ltv-power-user",
    recent_action: "upgraded-plan"
  },
  ai_personalize: true
})

And it costs $0

No cap, we deleted the pricing table. Notifkit is 100% free and open source because gatekeeping infrastructure is cringe. Host it yourself, read the code, and keep your money. W vibes only.

Drop a star on GitHub fr

Questions, answered.

Do I bring my own provider accounts? +
Either way. Drop in your existing keys for SendGrid, Twilio, the WhatsApp Business API, and others, and notifkit routes through them. Or use the managed providers and skip the setup entirely.
How does fallback decide what's next? +
Channels are tried in the order you list them. A channel is considered failed on a hard error or a timeout. With fallback: true, notifkit advances to the next channel and stops at the first confirmed delivery.
Is this really 100% free and open source? +
Yes. The core routing engine, AI personalization, and workflow execution are fully open source and free forever. Host it yourself or use our one-click deploy.
Can users control their own channel preferences? +
Yes. Store per-user preferences and quiet hours in notifkit, and routing respects them automatically — no preference logic in your app code.
Is there a REST API for non-JS stacks? +
There's a REST endpoint plus typed SDKs for TypeScript, Python, and Go. Every payload shape is identical across them.

Send your first notification.

Drop in your email and be the first to know when we launch the private beta.