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.
Developers
Define workflows in code using frameworks like Next.JS, Nest.JS, and React, and deploy confidently while developing in your IDE of choice.
Product teams
Unify content, messaging, and experience across all notification channels. Seamlessly manage content without involving developers.
End users
Set notification channel and subscription preferences, and engage with your notification content.
Notifications brands count on
Ensuring seamless notifications from business to users, with zero hassle.
Notification Control Center
- Default
- Notion dark
- Notion light
The most customizable <Inbox />
Drop-in in-app notifications for your app or website, deployable in minutes, and synchronized across all your channels.
LEARN MOREIntegrates 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.
Built 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.
It's time to add in-app notifications
Create a free account, send your first notification, and add an Inbox... all for free.