Why NotifyKit
When a notification framework inside your app is a better fit than a hosted or self-hosted notification platform, and when it is not.
The Problem
A notification starts as an email or an inbox row. Then it needs preferences, unsubscribe links, retries, deduplication, quiet hours, a live unread count, and a way to find out why someone never got it. Rebuilding those for every feature is slow and easy to get wrong.
A notification platform solves that, but it brings its own costs: a remote control plane, a second data store holding your users’ notification history, workflows that have to be kept in sync across environments, and another deployment model. NotifyKit packages the reusable pipeline and leaves the definitions, authentication, data, and deployment inside your app.
Operating Model
The real difference between the options is who runs what:
| NotifyKit | Managed platform | Self-hosted platform | |
|---|---|---|---|
| Runs in | Your app or worker | The vendor's service | Separate services you operate |
| Definitions | TypeScript you import | Dashboard, API, or synced files | Dashboard or code-first workflows |
| State | Your app's database | The vendor | The platform's database |
| Visual editor | No | Usually | Usually |
| Durable delivery | You connect a queue and worker | Managed | You run the platform's workers |
| Channels | A focused set; providers are pluggable | Broad | Broad |
| Mainly for | Application engineers | Engineering, product, and growth | Platform teams |
Good Fit
- A TypeScript monolith, modular monolith, or small service.
- Transactional product notifications rather than marketing campaigns.
- A team that already runs Postgres or SQLite and wants to own the data.
- Notifications that should be reviewed, tested, and deployed like any other code.
- A team willing to own queueing and provider operations in exchange for that control.
Poor Fit
- Non-engineers need to design and publish workflows without a deploy.
- You need dozens of ready-made providers, mobile push, or marketing broadcasts today.
- You would rather pay for managed deliverability, analytics, and support than run infrastructure.
- You need a visual journey builder with branching, multi-step campaigns.
- Delivery must survive crashes and you cannot run a durable worker. See Production readiness.
Alternatives
Knock, Courier, and SuprSend are strong choices when a managed control plane is an advantage. Novu offers both a cloud service and a self-hosted platform, including code-first workflows. None of this means those tools lack type safety or source control. The difference is that NotifyKit needs no notification platform at runtime: notify.send() is a function call in your own process.
Where Next
- Quickstart: try it in a scaffolded app
- Production readiness: what you take on by running it yourself
- Live demo: an inbox and preferences page you can click through