Keep users in the loop
An inbox inside your app
Live updates, unread badges, read states, and pagination. Headless React hooks hold the state. You build the UI.
Replies / mentions / activity
Read the guideOpen-source notifications for TypeScript
Add an inbox, email, and push notifications to your app.
Send once. Deliver to every channel you choose. Respect user preferences. Keep the data in your own database.
In-app inbox / Email / Web push / Telegram / Mobile push beta
await notify.send("commentReply", {
to: threadOwnerId,
payload: { authorName: "Dana", commentId: "c_123" },
dedupeKey: "commentReply:c_123",
});See it work
send(). Every screen.Press send. The bell updates, a push notification appears, the email lands on the phone, and a Telegram message follows.
await notify.send("commentReply", {
to: userId,
payload: { authorName: "Dana", commentId: "c_123" },
});Simulated in your browser. Nothing is sent.
From your first bell to every channel
Start with the inbox. Add channels, preferences, and digests as you grow.
Keep users in the loop
Live updates, unread badges, read states, and pagination. Headless React hooks hold the state. You build the UI.
Replies / mentions / activity
Read the guideReach beyond the app
Transactional email, browser push, and Telegram from the same event. Native mobile push is in beta.
Order updates / reminders / alerts
Read the guideGive users a choice
Each user picks which notifications reach which channels. Their choices apply when you send.
Per user / per notification / per channel
Read the guideLess noise, more context
Roll updates into a scheduled summary instead of sending each one. Delivery follows each user's timezone.
Activity summaries / daily roundups
Read the guideBring your database and authentication. No separate notification service to deploy.
How it compares
The alternatives are good, and most are platforms you run. easy-ping is a dependency you install. That difference decides almost everything else.
| easy-pinga library | Novuself-hosted | Knock · Courierhosted SaaS | |
|---|---|---|---|
| What you deploy | Nothing. It runs inside the app you already have. | Four services. API, worker, dashboard and websocket. | Nothing. It runs in their cloud. |
| Infrastructure it adds | None | MongoDB, Redis and S3, on top of your own | None |
| Where notifications are stored | Your Postgres, MySQL, SQLite or MongoDB, in tables you can query | Novu's own MongoDB | Their database, reachable by API |
| Cost per notification | None | None, but you pay for the servers | Metered per send |
| License | MIT, all of it | MIT core, commercial enterprise modules | Proprietary |
| How you integrate | One config file, one send(), one hook | HTTP API plus an embeddable inbox | HTTP API plus an embeddable inbox |
| Visual workflow editor | No. A notification is code, reviewed like code | Yes | Yes |
| Channels out of the box | In-app, email, web push, mobile push, Telegram | Dozens of providers across every channel | Dozens of providers across every channel |
Checked 22 September 2026 against Novu's repository and self-hosting guide, and the Knock and Courier pricing pages. They are good tools solving a bigger problem. If you need a workflow editor that a non-developer can edit, use one of them.
Delivery
Persist first, then deliver. Retries live in your database. Delivery is at-least-once, with no queue service to run.
| Mode | Delivery happens | Latency | Needs cron |
|---|---|---|---|
inline | Before send() resolves | in-request | recommended |
deferred | After the response, via waitUntil | ~1 s | yes |
worker | In-process loop, woken by send() | instant | optional |
cron | When the sweep runs | up to the interval | yes |
Built for how you actually work
easy-ping shipped after every current model's training cutoff. Ask Cursor or Claude to wire it up cold and you'll get a confident, fluent, completely invented API.
So we ship the context. Grab a prompt below, paste it in, and your assistant writes against the real surface instead of guessing at it.
Schema, config, one send(), and the bell. The quickstart covers it in order, gotchas included.