What’s new in Novu 0.19?
TL;DR: All you need to know about the latest Novu 0.19.0 release. Multi-tenancy management, bulk subscriber creation, override layouts and more!
0.19 Release Updates
We're eager to showcase the latest features in our most recent release. Let's dive in and discover what's in store for you!
Multi-tenancy Management
We are stoked to let you know that you can now manage tenants from the UI (Novu’s dashboard) and the API.
Self-hosted users need to add and turn on the IS_MULTI_TENANCY_ENABLED
env flag to be able to manage tenants in their Novu installation.
Tenants Usage in Workflows as Variables
With tenants feature now generally available, there are different ways you’ll be able to use it in your app depending on your use case.
One of those ways is using it as variables in your workflows and triggers. When triggering a notification using the events trigger endpoint, you can pass in a tenant property as a parameter like so:
import { Novu } from '@novu/node';
const novu = new Novu(process.env.NOVU_API_KEY);
await novu.trigger('<WORKFLOW_TRIGGER_ID>',
{
to: {
subscriberId: '<UNIQUE_SUBSCRIBER_IDENTIFIER>',
email: 'john@doemail.com',
firstName: 'John',
lastName: 'Doe',
},
payload: {
name: "Hello World",
organization: {
logo: 'https://happycorp.com/logo.png',
},
},
actor: "actorId"
tenant: "tenantIdentifier"
}
);
passing in tenant property when triggering a notification
The tenant can also be accessed in a workflow template like so:
{{ tenant.data.logo }}
accessing tenant properties in a workflow
Bulk Subscriber Creation
This release also ships the wildly requested “bulk subscriber creation.” Starting v0.19, you’ll be able to create subscribers in bulk (up to 500 at once) using an API endpoint.
Note: The bulk API is limited to 500 subscribers per request.
await novu.subscribers.bulkCreate([
{
subscriberId: 'test-subscriber-1',
email: 'test-user@sd.com',
firstName: 'subscriber-1',
lastName: 'test-1',
},
{
subscriberId: 'test-subscriber-2',
email: 'test-user-2@sd.com',
firstName: 'subscriber-2',
lastName: 'test-2',
},
{
subscriberId: 'test-subscriber-3',
},
]);
Addition of Tags in Workflow Settings
We have added the ability to use tags in the workflow settings screen.
This change allows use cases where you need to group multiple workflows under the same tag, and then use it to filter subscriber preferences for example.
Allow Override layout On Trigger
To override your assigned layout during a trigger event use the layoutIdentifier
property, the layout specified will be used for all emails in the context of that trigger event.
import { Novu } from '@novu/node';
const novu = new Novu('<NOVU_API_KEY>');
novu.trigger('workflow-identifier', {
to: {
subscriberId: '...',
},
payload: {
attachments: [
{
file: fs.readFileSync(__dirname + '/data/test.jpeg'),
name: 'test.jpeg',
mime: 'image/jpg',
},
],
},
overrides: {
layoutIdentifier: 'your-layout-identifier',
},
});
Show Primary Providers on Workflow Nodes
Now you can see the primary provider of a channel in the nodes that show on the workflow editor. This gives you more context and better identification without extra clicks!
Enhanced Workflow Nodes Misconfiguration Error
Nodes and workflows will now display mis-configured workflows on the dashboard like so:
All changes
- Nv 2474 styles tag css in email is not showing in few email clients by @davidsoderberg in #3978 - We now convert all email styles to inlince CSS for compatibility across browsers
- fix: so swagger json validates by @davidsoderberg in #3969 - Improved our swagger validation for the API Swagger data
- Reduce count 1000 to the db by @djabarovgeorge in #3993 - Breaking: For socket events we will return
hasMore
boolean field incase there are more than 100 results available. - feat: add tags for workflow settings by @scopsy in #4065 - Tags could now be added to workflows in the workflow settings page, once added they can be used later for usecases such as filtering the user preferences in the notification center
- Nv 2517 displays that workflow has nodes that will fail to send a notification by @BiswaViraj in #3966 - Nodes and workflows will now display mis-configured workflows
- feat: show providers on workflow nodes by @BiswaViraj in #3998 - Providers will be shown on nodes for better identifications
- feat: add override layout in trigger functionality by @ainouzgali in #3961 - You can now override the default layout using the
overrides
part of the trigger - feat(worker): remove performance svc as it was temporary by @p-fernandez in #3944
- Docs platform guide handlebars by @sumitsaurabh927 in #3833
- fix: sidebar intercepting workflow editor by @davidsoderberg in #3968
- feat(wip): initial bulk subscriber create by @ainouzgali in #3938
- Nv 2690 add identifier field to layouts scheme by @ainouzgali in #3956
- feat(ci): reuse instructions to tidy up pipelines by @p-fernandez in #3975
- feat: migration script to add identifier to layouts by @ainouzgali in #3967
- feat(ci): separate the swagger validation in own runner plus improvement by @p-fernandez in #3981
- fix(ci): indenting action by @p-fernandez in #3984
- patch : remove rows only when steps are truthy by @djabarovgeorge in #3980
- Update ReadMe to include Java SDK link by @mayorJAY in #3974
- Add Analytics call to Track Deletion of Templates by @Cliftonz in #3971
- feat add organization id index in integration by @djabarovgeorge in #3983
- fix: so add a provider is not displayed in empty state by @davidsoderberg in #3985
- feat(ci): reusable action to run backend (api, worker) for clients by @p-fernandez in #3991
- fix(ci): proper settings for secrets for run backend by @p-fernandez in #3992
- Changed the sidebar position of Python by @bcsamrudh in #3997
- docs: add nestjs quickstart guide by @michaldziuba03 in #3747
- fix: remove github discussion link by @jainpawan21 in #4002
- feat: fix logger error order by @djabarovgeorge in #4003
- fix: add missing sharable url in the new integration form by @djabarovgeorge in #3986
- next fix logger error order by @djabarovgeorge in #4006
- clean patch - execution details no write concern by @djabarovgeorge in #4008
- optimization : merge two redis calls in api key authenticate by @djabarovgeorge in #3982
- Fix failing test for web and widget by @scopsy in #4009
- NV-3541 - 🐛 Bug Report: Novu Notification Center Closing Issue on iFrame Embed by @gitstart in #3950
- feat: add scheduled ⏰ digest documentation and images by @jainpawan21 in #3800
- feat: execution detail no write concern by @djabarovgeorge in #4004
- Fix: Add Redis password into docker-compose and sample env by @harrisyn in #3999
- feat(types): create enum for the web socket events by @p-fernandez in #3996
- [NV-2719] feat: add tenant support node sdk by @ainouzgali in #3990
- Nv 2403 tenant id trigger engine integration by @ainouzgali in #3994
- fix: invalid import - process tenant by @ainouzgali in #4019
- feat: add product lead component by @davidsoderberg in #4012
- feat: move tabs state to routes by @davidsoderberg in #4027
- [patch] - nv 2701 - bug report cannot create custom smtp integration by @djabarovgeorge in #4015
- Refactor branding tabs to routes by @davidsoderberg in #4029
- docs: add push webhook provider docs by @jainpawan21 in #4032
- NV-3973 - 🐛 Bug Report: invalid netcore logo by @gitstart in #4034
- feat: refactor add job logs by @djabarovgeorge in #4011
- feat: upgrade node mailjet version by @scopsy in #4036
- Upgrade FCM package by @scopsy in #4041
- Fix cypress json error by @davidsoderberg in #4028
- Docs: Add Quickstart guide for Go by @olumidayy in #3842
- Upgrade nestjs to version 10 by @scopsy in #4042
- nv-2661 upgrade new relic agent to latest version by @scopsy in #4052
- fix: critical vulnerability in vm2 imported by inline css by @scopsy in #4053
- NV-1959B - 🐛 Bug Report: The Notification Center isn't mobile responsive by @gitstart in #3948
- Update Queue metrics accuracy by @Cliftonz in #3402
- chore: remove unused cz vulnerable packages by @scopsy in #4055
- chore(deps-dev): bump vite from 4.2.1 to 4.2.3 by @dependabot in #3894
- Revert "Update Queue metrics accuracy" by @Cliftonz in #4058
- chore: upgrade socket packages due to high vulnerability by @scopsy in #4059
- nth check vulnerable package by @scopsy in #4061
- fix: make integration identifier optional by @jainpawan21 in #4062
- fix(api): clear the primary and priority fields when novu integration is disabled by @LetItRock in #4045
- fix(web): delete primary integration - show the select primary modal when there are active integrations by @LetItRock in #4017
- feat(dal): change the month add and sub for days add and sub by @p-fernandez in #4071
- Java Quickstart by @Basfar in #4033
- Revert "NV-1959B - 🐛 Bug Report: The Notification Center isn't mobile responsive" by @LetItRock in #4074
New Contributors
- @bcsamrudh made their first contribution in #3997
- @olumidayy made their first contribution in #3842
- @dependabot made their first contribution in #3894
- @Basfar made their first contribution in #4033
Full Changelog: v0.18.0...v0.19.0