The first Novu Notification Infrastructure Release
We are incredibly excited to release our biggest version since the beginning of Novu. This version includes our first milestone in building the best open-source notification infrastructure. The release is a result of our incredible community collaboration and efforts. Check out all the great shoutouts at the end.
This version includes those large chunks of work:
- Novu API
- Notification management web interface
- Multi Environment Support
- Integration Store
- Notification Center API
- React Notification Center
- And more!
Get started with the novu platform using:
npx novu init
Novu API
The Novu API was created to manage complex notification delivery use cases. It will be the platform for our future advanced features such as Digest, Scheduling, Time-zone awareness, etc. The API can be accessed from the @novu/node
npm package for Node.js and other languages using the simple rest HTTP API accessed using an API key.
Notification management web interface
A brand new React-based web interface to manage your notification templates and monitor the activity of sent notifications. We are planning to add and upgrade the web interface on an ongoing basis, looking forward to hearing your opinions and ideas!
Notification Center API
You can now add a real-time notification center to your web application, including real-time updates using socket.io. In addition, we provide a react notification center component and an iframe window for non-react apps. You can read more about it here.
Multi Environment Support
Based on the feedback from previous alpha releases, we have added support for multiple environments inside the web management site. You can make changes to your dev environment and then commit them to the Production Environment. So you can test your changes before pushing them to prod. Which is always a good thing to do, right? 😜
Integration Store
You can now select what email or SMS provider you will send notifications from. Check out the integrations page on the web management platform. New integrations are coming soon!
Moving from the old @novu/node or @notifire/node packages
The last versions below v0.4.0
only supported stateless and in-code notification template management. If you don't plan to use the Novu API and web management platform, you will need to download the @novu/stateless
library, which has an identical API to the old package. Read more about the stateless library here.
What's next?
- Improving documentation and usage guides
- Visual Workflow Editor
- Direct Channel
- Push Channel
- Digest Engine
- and many more exciting features :)
Read more about the new API platform from our documentation site.
Get started with the novu platform using:
npx novu init
Merged issues
subject
now accepts aFunction
ontrigger
method by @CharlieBrownCharacter in #155- Fixed some typo by @bigpreshy in #159
- Some typo and grammar fix by @bigpreshy in #160
- Docker compose support by @osbornetunde in #146
- Add storybook for admin panel by @scopsy in #163
- NX Workspaces Support by @nishit-g in #165
- Update package.json(NX workspace code review) by @nishit-g in #168
- Update providers template by @nishit-g in #170
- Update build scripts to use NX by @scopsy in #169
- Add NX cloud support by @scopsy in #172
- Add project build on setup:project command by @djabarovgeorge in #178
- Border style on window widget #176 by @djabarovgeorge in #179
- Configure Renovate by @renovate in #186
- Implement OAuth flow with GitHub by @djabarovgeorge in #187
- Pin dependencies by @renovate in #191
- Pin dependency apollo-boost to 0.4.9 by @renovate in #192
- Update dependency @types/express to v4.17.13 by @renovate in #194
- Add npx only-allow-pnpm to avoid people running yarn install by @djabarovgeorge in #195
- Update dependency @types/react-helmet to v6.1.5 by @renovate in #200
- Update dependency cypress-intellij-reporter to v0.0.7 by @renovate in #201
- Update docker files to use pnpm by @djabarovgeorge in #199
- Update dependency react-scripts to v4.0.3 by @renovate in #203
- Update Node.js to v14.18.3 by @renovate in #208
- Update dependency styled-components to v5.3.3 by @renovate in #205
- Update docusaurus monorepo to v2.0.0-beta.14 by @renovate in #206
- Update dependency @typescript-eslint/eslint-plugin to v4.33.0 by @renovate in #212
- Update dependency @types/react-router-dom to v5.3.3 by @renovate in #211
- Update dependency hygen to v6.1.0 by @renovate in #216
- Update dependency jira-prepare-commit-msg to v1.6.2 by @renovate in #217
- Update github actions to use pnpm by @djabarovgeorge in #197
- Search for other npm usages in the repository to replace with pnpm by @djabarovgeorge in #220
- Add capitalization to subscribers names on activity list page by @ainouzgali in #221
- PNPM dependency management by @djabarovgeorge in #185
- Pin dependencies by @renovate in #189
- Update dependency @aws-sdk/client-ses to v3.48.0 by @renovate in #210
- Update dependency standard-version to v9.3.2 by @renovate in #204
- Update dependency @istanbuljs/nyc-config-typescript to v1.0.2 by @renovate in #193
- Update react-router monorepo by @renovate in #207
- Update dependency @types/jest to v27.4.0 by @renovate in #222
- Update dependency axios to v0.25.0 by @renovate in #213
- Mantine layout integration by @scopsy in #225
- ➕ Add @emotion/react and @emotion/styled by @scopsy in #226
- RLD-86: Add linter action for projects by @scopsy in #231
- RLD-68 Flaky password reset test add debug lines by @scopsy in #232
- Environment variables configuration by @djabarovgeorge in #229
- Updated deprecated environment variable by @djabarovgeorge in #233
- Update docker-compose to use pre-built images from ghcr by @djabarovgeorge in #235
- Typography Buttons Colors - starting mantine by @ainouzgali in #230
- Update docker files location by @djabarovgeorge in #237
- [RLD-88] - Docker compose api error fix by @scopsy in #238
- Create shadow styles and add to Button by @ainouzgali in #239
- RLD-92 Add sdk serving to docker compose by @scopsy in #241
- [RLD-94] Add documentation on how to run docker compose by @scopsy in #242
- Rld 18 switch buttons by @ainouzgali in #244
- Implements Telnyx SMS provider by @Abobos in #227
- RLD-20 Inputs + Form Fields by @ainouzgali in #247
- Create CLI project scaffold by @djabarovgeorge in #248
- [RLD-23] - Checkbox component by @rockingrohit9639 in #249
- Added: doc for Hooks feature by @rhythm-sharma in #253
- Rld 22 select inputs by @ainouzgali in #250
- Application name & providers selection by @djabarovgeorge in #252
- Added new SMS provider (Telnyx)to Readme.md by @iampearceman in #262
- [RLD-105] - Create a local server on ephemeral port by @djabarovgeorge in #257
- Table component by @ainouzgali in #255
- Variable naming conventions for camel and pascal casing by @scopsy in #264
- Fix linting rules for padding by @scopsy in #263
- 🚨 Fix web padding eslint issues by @scopsy in #265
- [RLD-106] - Initialize the GitHub auth flow by @djabarovgeorge in #259
- [RLD-108] - Persist JWT token in the users CLI storage by @djabarovgeorge in #261
- Create Organization & Application by @djabarovgeorge in #267
- Authentication flow by @djabarovgeorge in #269
- ✨ Add onChange and onClick events to components by @scopsy in #270
- Fix bug update const typo by @djabarovgeorge in #273
- Radio components by @scopsy in #272
- Icons management by @ainouzgali in #274
- 💄 Fixed checkbox BG and dark mode styling by @scopsy in #276
- Menu buttons by @ainouzgali in #275
- Tooltip by @ainouzgali in #277
- Add demo dashboard html by @djabarovgeorge in #279
- Create http server to serve this demo panel by @djabarovgeorge in #281
- Validate and switch use application by @djabarovgeorge in #283
- Demo web application by @djabarovgeorge in #289
- During application, creation create a demo template by @djabarovgeorge in #285
- New Layout, Header, Nav & Templates list page by @ainouzgali in #291
- Update "master" to "main" by @scopsy in #292
- Raise demo dashboard by @djabarovgeorge in #287
- Test notification template by @djabarovgeorge in #294
- 🔧 Copy HTML files when compiling CLI by @scopsy in #295
- Add copy button that copies curl command by @djabarovgeorge in #297
- Add hide the jwt and api key by @djabarovgeorge in #300
- ✨ Get available port instead of hardcoded 4600 port by @scopsy in #298
- ✨ Handle returning visitors to the CLI by @scopsy in #301
- ✨ Send a custom text node if onboarding notification is sent by @scopsy in #302
- 💄 Fix unseen badge location by @scopsy in #304
- ♻️ Change firstName to $first_name and remove un-needed $email by @scopsy in #303
- Create contextual guidance in main page and styling by @scopsy in #307
- 💄 Add styled welcome screen by @scopsy in #309
- Create custom text styles for answers with chalk by @scopsy in #310
- Widget bell style jump by @djabarovgeorge in #313
- ✨ Add in-web trigger button by @scopsy in #311
- Account Creation Flow by @djabarovgeorge in #306
- Fix application id in the widget by @djabarovgeorge in #314
- Implements tabs horizontal menu(design system) by @Abobos in #308
- Color Input by @ainouzgali in #320
- Create Integration Data-Model by @djabarovgeorge in #316
- 🐛 Fixed an issue where an inifinite loader would show after API redirect by @scopsy in #324
- 💬 Update text nodes for questions in CLI by @scopsy in #325
- Settings page with new design system by @ainouzgali in #319
- Left Menu Buttons - Template Editor by @ainouzgali in #335
- ✨ Add novu CLI command to launch program by @scopsy in #336
- Create post integration api by @djabarovgeorge in #328
- Fetch integration api by @djabarovgeorge in #330
- Edit integration api by @djabarovgeorge in #334
- Delete integration api by @djabarovgeorge in #337
- Add deactivation of old providers on creation of new active one by @djabarovgeorge in #339
- Add constrains on update request by @djabarovgeorge in #342
- Notification Settings Screen by @ainouzgali in #345
- Fix cli race condition on docker setup by @djabarovgeorge in #346
- Initialize integration api by @djabarovgeorge in #326
- react-router-dom v6 update by @ninjadev101 in #333
- Cypress update on web by @ninjadev101 in #349
- ✨ Trigger Modal by @ainouzgali in #350
- Create actions CI pipeline by @scopsy in #348
- 📝 Variable Protection Docs by @ninjadev101 in #351
- Prod environment CI by @scopsy in #354
- add channel screen by @ainouzgali in #357
- Add Trigger Screen by @ainouzgali in #359
- Add integration store page by @djabarovgeorge in #358
- Auto deploy sdk docker images by @scopsy in #360
- In App Settings Screen by @ainouzgali in #362
- Add docker builds for web and widget containers by @scopsy in #364
- 💄 Fixed storybook color scheme by @ninjadev101 in #363
- Fix TypeError: Cannot read properties of null (reading '_id') issue #365 Draft PR by @AlexVCS in #370
- ⬆️ Updated faker and normalized email address by @ninjadev101 in #375
- SMS Settings Screen by @ainouzgali in #369
- Fix/sendgrid global api key by @nevo-david in #376
- 🩹 fallback to templates page for signed users by @ninjadev101 in #379
- Email settings screen by @ainouzgali in #372
- Create provider component by @djabarovgeorge in #367
- Edit Mode - Template Editor by @ainouzgali in #381
- Creation of integration modal by @djabarovgeorge in #368
- Fix Notification Group Select by @ainouzgali in #384
- Trigger engine connected provider usage by @djabarovgeorge in #356
- Add api communication by @djabarovgeorge in #380
- Tooltips Errors by @ainouzgali in #383
- 🐛 Fix select group behaviour on creatable mode by @scopsy in #388
- Integration store provider list page by @djabarovgeorge in #385
- Fix ColorScheme Toggle by @ainouzgali in #390
- feat(providers): added provider id and changed the architecture by @nevo-david in #374
- Integration store fixs by @djabarovgeorge in #386
- Reusable actions by @scopsy in #382
- Final editor flow changes by @scopsy in #395
- 🔧 Add a warning exception for github oauth flow by @scopsy in #396
- Integration store add cypress tests by @djabarovgeorge in #393
- Template editor UI integration by @djabarovgeorge in #387
- Adding MailerSend provider by @fredsossa1 in #389
- Update Team Members page from legacy by @aggmoulik in #352
- Login Page - New Design by @ainouzgali in #397
- SignUp + Reset Password - New Design by @ainouzgali in #398
- Accept Invitation Page - New Design by @ainouzgali in #399
- Application Creation Page - New Design by @ainouzgali in #400
- Activity Page - Table and Filters by @ainouzgali in #392
- Final update for flow styling and behaviour by @scopsy in #405
- Add sender email & sender name by @djabarovgeorge in #401
- Update the api (event-trigger) flow to use the integration instead by @djabarovgeorge in #403
- Update application & integration entities by @djabarovgeorge in #402
- Remove email tab from setting page by @djabarovgeorge in #404
- Move sender from and name to inside of email integration modal by @djabarovgeorge in #406
- Add providers logo by @djabarovgeorge in #407
- Integration store hotfix by @djabarovgeorge in #409
- ♻️ Change settings screen route name for invites by @scopsy in #408
- Integration store hotfix by @djabarovgeorge in #410
- 💄 Fix responsive issue in template editor by @scopsy in #412
- Fix mailersend build by @djabarovgeorge in #414
- 🔥 Remove old design code by @scopsy in #413
- Update providers logo by @djabarovgeorge in #415
- ✨ Add the ability to specifiy the left offset for the widget to open by @scopsy in #416
- Widget - New Design by @ainouzgali in #418
- Logo Updates by @ainouzgali in #420
- Refactor by @scopsy in #419
- Update GHCR organization name by @djabarovgeorge in #422
- 🐛 Fix Widget Dropdown Position by @ainouzgali in #424
- Description Label For Integration Store by @ainouzgali in #426
- Update Docs - Logos by @ainouzgali in #425
- Update Sender From Credential by @ainouzgali in #427
- Display pagination when there is total or page size is greater than one by @magnetomax in #423
- New Integration Defaults to Active by @ainouzgali in #428
- Activity graph by @djabarovgeorge in #394
- Update provider logo images by @djabarovgeorge in #431
- Add initial component library by @djabarovgeorge in #430
- Fix - Notification Group Not Selected after Creation by @ainouzgali in #432
- Novu node package by @scopsy in #435
- Update ses integration logo by @djabarovgeorge in #436
- Trigger Event Keys Modification by @ainouzgali in #433
- Creating New Template - Defaults to Active by @ainouzgali in #438
- Update Notification Content - Demo Dashboard by @ainouzgali in #439
- Change provider button color by @djabarovgeorge in #421
- Add input mapping by @djabarovgeorge in #411
- 🐛 Fixes the distinct id problem by @davidsoderberg in #441
- Added a link to our Discord server by @iampearceman in #437
- 🐛 Fixes so if there is no items for pagination it hides by @davidsoderberg in #442
- 🐛 Fix so button do not change in size when active toggle is used by @davidsoderberg in #443
- 🚸 Add so users computer theme are reflected in web app by @davidsoderberg in #444
- Added: Script to inject env var in window object by @rhythm-sharma in #434
- Fix Package Name by @ainouzgali in #448
- Rename "sdk" Package to "embed" by @ainouzgali in #450
- Update contributing.md by @ainouzgali in #451
- Update README.md by @iampearceman in #453
- Convert messages to steps by @scopsy in #456
- Nv 241 enable runtime dynamic environment by @davidsoderberg in #446
- 👷 Add envsetup for widget by @davidsoderberg in #447
- Create @novu/stateless package by @ainouzgali in #455
- Subscribers API - Update Subscriber by @ainouzgali in #464
- Subscribers API - Create Subscriber by @ainouzgali in #463
- ✨ An organization do now have two environments by @davidsoderberg in #460
- Subscribers API - Delete Subscriber by @ainouzgali in #465
- Add widget logic by @djabarovgeorge in #440
- Clean widget from bell logic by @djabarovgeorge in #457
- Create notification center interface by @djabarovgeorge in #458
- Create novu povider by @djabarovgeorge in #459
- Add Subscribers for @novu/node by @ainouzgali in #469
- Switch application entity to environment entity by @scopsy in #468
- 🐛 fix storybook crash because of emotion by @ninjadev101 in #473
- ✨ added segmented control by @ninjadev101 in #467
- Nv 322 calculate diff to create a change entity by @davidsoderberg in #476
- ✨ Add Change entity, schema and repository by @davidsoderberg in #466
- 🐛 Fix Cors issue when accessing window.parent inside widget by @scopsy in #480
- Nv 331 create changes when a message template by @davidsoderberg in #477
- Nv 321 add parentid for notification template by @davidsoderberg in #478
- Nv 332 get user environments api by @ninjadev101 in #483
- Nv 311 switch environment by @ninjadev101 in #487
- [NV-296] Update pages meta title to indicate visiting pge by @13colours in #489
- Use content-type: application/json for payload in example script by @wolfymaster in #490
- 💥 Trigger interface update by @ainouzgali in #488
- React helmet async by @ninjadev101 in #495
- Move Brand Settings to Organization by @ainouzgali in #492
- Refactor bell interface by @djabarovgeorge in #474
- Use bell package in widget app by @djabarovgeorge in #475
- Refactor widget code by @djabarovgeorge in #491
- Changes Page by @ainouzgali in #497
- cypress test for switch environment by @ninjadev101 in #498
- Docs update by @scopsy in #502
- React widget component by @djabarovgeorge in #496
- Fix notification center deploment by @djabarovgeorge in #505
- Add widget user origin wildcard by @djabarovgeorge in #508
- Nv 295 delete notification template by @ninjadev101 in #507
- Disallow templates and messages edit - API by @ainouzgali in #506
- Cypress tests for changes page by @ainouzgali in #509
- Fix re-navigation in edit. by @ainouzgali in #519
- 🐛 Fix so notification group are promoted if notification template are by @davidsoderberg in #520
- Fix Readonly Styles - light mode by @ainouzgali in #521
- 🐛 Fix so a update on message template creates a change by @davidsoderberg in #522
- 🚸 Add notification when a promote goes wrong by @davidsoderberg in #528
- Add application identifier in settings by @djabarovgeorge in #510
- ✨ Read only environments by @ainouzgali in #499
- 💚 Pin pnpm version in dockerfiles by @davidsoderberg in #530
- 🚧 Add Security component by @djabarovgeorge in #511
- 🐛 Fix bug with Authorization header sent to S3 by @davidsoderberg in #531
- show empty string when null by @ninjadev101 in #532
- Update dal + api HMAC security support by @djabarovgeorge in #516
- Add dynamic backendUrl in @novu/node by @djabarovgeorge in #535
- Nv 386 env token validation by @ninjadev101 in #545
- 🐛 Fix isDirty state for channel switches by @davidsoderberg in #533
- Passing a subscriber object to the template compilation by @djabarovgeorge in #537
- Hmac support by @djabarovgeorge in #539
- Onboarding Page by @ainouzgali in #534
- ✨ added pluralize helper by @ninjadev101 in #549
- ✨ added breadcrumb by @ninjadev101 in #550
- 🐛 Fix empty notification group payload by @djabarovgeorge in #548
- 🐛 Fix shared clipboard state by @djabarovgeorge in #551
- Docs - add backendUrl by @ainouzgali in #556
- Fix activity graph missing current date by @djabarovgeorge in #552
- Update README.md by @TexasBullet26 in #566
- Updated documentation. Using gender neutral language and making doc mo… by @pgaijin66 in #564
- Fix: 567 Updated the file paths by @BiswaViraj in #568
- Notification Center: avoid localStorage actions on SSR by @13colours in #561
- Changed sms77 constructor call by @SaschaWebDev in #584
New Contributors
- @bigpreshy made their first contribution in #159
- @osbornetunde made their first contribution in #146
- @nishit-g made their first contribution in #165
- @renovate made their first contribution in #186
- @Abobos made their first contribution in #227
- @rockingrohit9639 made their first contribution in #249
- @rhythm-sharma made their first contribution in #253
- @iampearceman made their first contribution in #262
- @ninjadev101 made their first contribution in #333
- @AlexVCS made their first contribution in #370
- @nevo-david made their first contribution in #376
- @fredsossa1 made their first contribution in #389
- @aggmoulik made their first contribution in #352
- @magnetomax made their first contribution in #423
- @13colours made their first contribution in #489
- @wolfymaster made their first contribution in #490
- @TexasBullet26 made their first contribution in #566
- @pgaijin66 made their first contribution in #564
- @BiswaViraj made their first contribution in #568
- @SaschaWebDev made their first contribution in #584
Full Changelog: v0.3.5...v0.4.0