39.7k stars · MIT in the About sidebar, plus a separately licensed paid enterprise edition. The LICENSE file could not be fetched on either branch path tried on 2026-09-09 (both 404) — confirm before depending on a specific feature. · @novu/framework@v2.13.2 (2026-09-07), read from /releases/latest. This is a MONOREPO PER-PACKAGE TAG, not a product version — see verification_notes.monorepo_tags.
One place to send email, push, SMS and in-app notifications from a single API.
▶Repo detailsthe review · specs · pros & cons · install
What it is
Novu is notification infrastructure. You define a message flow once. It handles sending across channels, remembers what each person agreed to receive, and gives your app a ready-made notification list.
Why it matters
Grasppy takes real time to turn a long chat into a map. Right now the person either watches a spinner or leaves and never comes back. This sends "your map is ready" by email and by browser alert, and keeps the message in a list inside the app. It also carries the per-person "stop emailing me" setting, which you would otherwise have to build yourself and which the law expects you to have.
- One template, several channels. You change the wording in a dashboard, not in Python.
- It ships a ready-made notification bell for React, so the in-app half is an afternoon rather than a week.
- It is very active. The newest tag is dated 7 September 2026.
- The About sidebar says MIT, but the project also has a separately licensed paid edition. Check that the feature you want sits in the free half before you plan around it.
- Self-hosting means an API service, a worker, a dashboard, MongoDB and Redis. That is 2 GB of memory and upwards, and MongoDB is a database you do not currently run. Their hosted free tier is the sensible start.
- Novu sends messages. It does not decide when to send them. Dittofeed (Edition 14 #8) decides. Do not adopt both at once, or you will have two half-built systems.
git clone -b next https://github.com/novuhq/novu.git cd novu/docker/community cp .env.example .env # Set the secret values listed in .env, then: sudo docker compose up -d