Robust and flexible notification building blocks
Open source JavaScript-native notifications framework for developers that makes it easy to build powerful notifications capabilities for your product teams.
Integrates easily, delivers powerful notifications
Powerful workflows
Code-first workflows that can be run inside your own IT boundary.
Inbox
Easily integrate and deploy notifications right into your application via components.
End user preferences
Enable end users to set contact preferences like language, timezone, and channels.
No-code editor
Product teams can manage workflow configurations without the risk of breaking notification flows.
Multi-channel, multi-framework
Access any channel provider, and use any content framework, all with one API.
API-first, and open-source backed
Native developer experience that’s backed by a huge community.
Notification Control Center
The most powerful and customizable notification <Inbox/>
Drop-in in-app notifications for your app or website, deployable in minutes, and synchronizsed across all your channels.
LEARN MOREBuilt by developers,
used by the rest of the team
Unapologetically built for development teams to provide notifications infrastructure to their product and business. Eliminate the expense and burden of building and maintaining home-grown notifications infrastructure, and still keep all of the flexibility you need and want.
1import { workflow, CronExpression } from '@novu/framework';
2import { z } from 'zod';
3import { render } from '@react-email/components';
4
5const weeklyComments = workflow(alias) workflow( id: string, execute: Execute<...>, options?: WorkflowOptions<...>,): Workflow<...>Define a notification workflow.('weekly-comments', async (event(parameter) event: { payload: { userName: string; ... }; step: Step; subscriber: { firstName: string; ... };}The event that triggered the workflow.) => {
6 await event.step.inApp(method) email: ChannelStep<{ body: string }, { seen: boolean; ... }>Send an email.('inbox-notification', async () => ({
7 subject: `**${event.payloadpayload: { userName: string; comment: string;};The data passed during the trigger, typesare generated from `payloadSchema`.userName}** commented in project`,
8 body: event.payload.comment,
9 }));
10
11 const digest = await event.step.digest('digest-comments', (controls) => ({
12 cron: controls.schedule
13 }), { controlSchema: z.object({ schedule: z.nativeEnum(CronExpression) }) });
14
15 await event.step.email('digest-email', async (controls) => ({
16 subject: controls.subject,
17 body: render(<WeeklyDigestEmail {...controls(parameter) controls: { subject: string; openAiModel: "gpt-3.5-turbo" | "gpt-4o"; aiPrompt: string;}The controls for the workflow step.} events={digest.events} />)
18 }), {
19 skip(property) skip: (controls: Controls) => booleanSkip the step. If true is returned, the step will be skipped.: () => !digest.events.length,
20 controlSchema: z.object({
21 subject: z.string().default('Hi {{subscriber.firstName}} - Acme Comments'),
22 openAiModel: z.enum(['gpt-3.5-turbo', 'gpt-4o']).default('gpt-4o'),
23 aiPrompt: z.string().default('Produce a concise comment digest'),
24 })
25 });
26}, { payloadSchema: z.object({ userName: z.string(), comment: z.string() }) });
27
28await weeklyComments.trigger(property) trigger: (event: { payload: { userName: string; comment: string; }; to: Recipients; actor?: Actor | undefined; tenant?: Tenant | undefined;}) => Promise<...>Trigger a notification workflow.({
29 payload: { userName: 'John Doe', comment: 'Are you free to give me a call?' },
30 to: 'jane@acme.com'
31});
Send your first notification in minutes
Complete control and flexibility
Development teams have complete flexibility and control over notifications. Product teams maintain seamless input and control over content, messaging, and brand so they can iterate quickly—all without developer input, and by using an intuitive and capable UI.
Read docsConfidently reach end users through notifications
Developers build capable, functional workflows using the frameworks and content components they love. Product and non-technical teams easily update content and messaging, and will never break prod.
As flexible as in-house built
All of the power of your custom-built solution, none of the hassle.
Type-Safe
Bring your own JSON schemas for full end-to-end validation across all your team members.
Observable and Scalable
Novu handles any volume, any channel, and any team for mission-critical notifications.
Consistent
Notification infrastructure belongs in your CI/CD release cycle.
Loved by developers and product teams
Explore tweets from developers and non-technical users and see why they're fans of our open-source notifications framework.
New @middayai engineering blog post just dropped. Learn how we are using @novuhq as our notification infrastructure. Link in thread 🧵⬇️
Pontus Abrahamsson@pontusabNovu is so dope!
Lev Lazinskiy@levlazHaha yeah I’m so happy my notification logic isn’t inside the database anymore. Love Novu!🚀
Fabian B.@madebyfabianTodos for today: #ship a @GleapSDK update that utilizes @novuhq for amazing notifications 🎉
Lukas Boehler@lukasboehlerNovu make notification management much easier. They're doing a great job with the service they offer.
Nikki Siapno@NikkiSiapnoThe best solution for notifications.
Csaba Kissi@csaba_kissiThat's awesome! Real-time notifications can really boost user engagement. Love that @novuhq supports multiple frameworks & customization options. Definitely giving the repo a star to show support! 🌟 #OpenSource #SoftwareDevelopment
Abhiuday@aeswibonThanks to a great tool called @novuhq, we can easily implement notifications into our upcoming v0.5.0 release.
Doinfine@doinfinehqSo excited about the rise of the notifications infrastructure space (+ open source 🔥)
Guillermo Rauch@rauchg
It's time to add in-app notifications
Create a free account, send your first notification, and add an Inbox... all for free.