v0.23.0
What’s new in Novu 0.23?
TL;DR: All you need to know about the latest Novu 0.23.0 release. Translation management, provider integrations, notification center updates, performance updates, and more!
0.23 Release Updates
We're excited to highlight the newest features introduced in our latest release. Join us as we explore what awaits you!
Translation Management
💡Note: This feature is only available for Novu Cloud for Business and Enterprise Clients.
The translation management feature allows users to create, upload, and edit translation groups and files from the Novu dashboard.
It’s new and we’re excited for you to start using it in your apps!
With this feature comes a new handlebar helper for translations, {{ i18n ... }}
. Novu users can now translate their notification templates to different languages using the i18n
handlebar helper and the translation keys in the editor.
Support for Non-Root User (UID 1000)
In our continued effort to enhance security and compatibility in enterprise environments, we are proud to announce a significant update aimed at supporting systems with restricted root access.
Key Features:
- Non-Root User Support: Novu now officially supports deployment under a non-root user with a fixed UID of 1000. This update is crucial for enterprise deployments on systems that enforce strict no-root policies, ensuring compliance with security best practices.
- Seamless Integration: This enhancement facilitates smoother integration of Novu into secure environments, reducing the need for workarounds or exceptions in security policies.
- Enhanced Security: Running Novu under a non-root user reduces potential security risks and aligns with the principle of least privilege, further safeguarding our notification infrastructure.
Getting Started:
No action is required from your side to take advantage of this update. The changes have been seamlessly integrated into Novu, ensuring that your enterprise deployments comply with non-root user policies without any additional configuration needed.
ARM Image Support
We're thrilled to share that Novu has officially introduced support for ARM images, marking a significant step in our dedication to embracing innovation and responsibility within the tech landscape. This development ensures that Novu stays ahead in the realm of notification infrastructure by broadening our platform's accessibility, compatibility, and sustainability.
Key Highlights:
- ARM Architecture Support: Users can now deploy Novu on systems powered by ARM processors, benefiting from the efficiency and performance improvements that ARM architectures offer.
- Optimized Performance: ARM support brings optimized performance for ARM-based deployments, ensuring faster and more efficient notification processing.
Getting Started with ARM Images:
To use Novu on an ARM-based system, simply pull the ARM-compatible Docker image from our registry. If you are on a not a ARM based system you can use the following command in docker to pull the image.
docker pull --platform linux/arm64 ghcr.io/novuhq/novu:v0.23.0
💡Note: Emulating ARM hardware may be slower then running an ARM image on ARM hardware.
Deprecation of Original Notifire Packages
Novu has evolved so much from when it was originally created. On the release of v0.24.0, we will be deprecating the original Notifire packages hosted on GitHub and any package within the @notifire
namespace on NPM.
The following packages hosted on GitHub under the novuhq
organization are scheduled for deprecation:
Deprecated Packages
- Notifire WebSocket Package (
notifire/ws
) - Notifire Widget Package (
notifire/widget
) - Notifire SDK Package (
notifire/sdk
) - Notifire Web Package (
notifire/web
) - Notifire API Package (
notifire/api
)
NPM Namespace Deprecation
All packages within the @notifire namespace on NPM are also scheduled for deprecation. This includes any package prefixed with @notifire/
, ensuring a comprehensive and clear transition away from these older offerings.
Users currently relying on these deprecated packages should promptly transition to the official @novu
packages.
Field-level Encryption to API Keys
We're security conscious at Novu. The API keys are now encrypted at rest in the database and hashed at rest in the cache.
We added this security feature to prevent direct use of the API key in the event of a database breach or bad actor trying to use the key with bad intentions.
Note: All existing API keys become encrypted through a data migration script for self-hosted users. Running the script more than once does not re-encrypt the api keys.
Bulk Delete Notifications in Notification Center
Users can now remove multiple notifications using an array of message ids (limit of 100) via the Notification center hooks and Headless library.
Notification Center Hook
const onSuccess = (data: IMessage) => {};
const onError = (error: Error) => {};
const { removeNotifications, isLoading, isError, error } = useRemoveNotifications({
onSuccess,
onError,
});
Headless Service
headlessService.removeNotifications({
listener: (
result: UpdateResult<IMessage, unknown, { messageId: string }>
) => {
console.log(result);
},
onSuccess: (message: IMessage) => {
console.log(message);
},
onError: (error: unknown) => {
console.error(error);
},
messageIds: ["message_id_1", "message_id_2" ],
});
Rocket Chat Provider Integration
You can now send Chat messages via the Rocket Chat provider integration:
Brevo (SendInBlue) SMS Provider Integration
You can now send SMS messages via the Brevo SMS provider integration:
iSend SMS Provider Integration
You can now send SMS via the iSend sms provider integration:
CustomData Overrides for SMS
A customData
overrides provider for SMS now exists. This property allows us to support provider specific configurations in future for SMS providers.
For now, it only supports DLT (Distributed Ledger Technology) for the Gupshup SMS provider.
Trigger workflow with customData
novu.trigger("gupshup-workflow", {
to: {
subscriberId: "1234",
},
payload: {
user: "Viraj",
},
overrides: {
sms: {
customData: {
principalEntityId: "principal entity Id",
dltTemplateId: "dlt template Id",
},
},
},
});
Email Editor Variables Auto-suggestion Dropdown
We've made a little adjustment to the workflow email editor to enhance user experience by including auto-suggestions while adding variables.
This feature greatly minimizes the chance of selecting the wrong variable and having incorrect template content.
Notable changes
- v0.20.0 LTS node upgrade by @scopsy in #4556
- fix(api): ApiKey auth guard performance by @rifont in #4972
- Add field-level encryption to API Keys by @djabarovgeorge in #5046
- Refactor move inbound mail parser to worker by @djabarovgeorge in #4986
- Feat(API): Add Remove Messages By Bulk by @djabarovgeorge in #5117
- feat(notification-center): add use remove notifications hook by @djabarovgeorge in #5126
- feat(headless): add remove notifications method by @djabarovgeorge in #5125
What's Changed
- Update Novu to Node 18 LTS by @raikasdev in #4014
- docs(providers): Clickatell documentation incorrectly shows TwilioSmsProvider by @jacques in #4897
- fix(web): Intercom chat bubble should not show after closing integrat… by @PaperBoardOfficial in #4951
- fix(fcm): do not mutate overrides object by @strangeAeon in #4866
- fix(api): logo extension and type should be validated on branding endpoint by @scopsy in #4965
- refactor(api): remove admin unused permissions by @scopsy in #4964
- feat(api): dont cache auth endpoints by @scopsy in #4970
- Add subscriber source to metric by @djabarovgeorge in #4953
- feat(api): Add common responses and headers to OpenAPI spec paths by @rifont in #4922
- fix(worker): timed digest event merging by @scopsy in #4979
- hotfix: timed digest event merging (#4979) by @LetItRock in #4981
- chore(web): make apns provider production field optional by @LetItRock in #4978
- chore(web): update the conditions icon by @LetItRock in #4977
- fix(api): Disable cspell on spectral file by @rifont in #4984
- fix(api): subscribers page performance by @PaulFasola in #4985
- Add support for cid based attachment in email by @djabarovgeorge in #4952
- style(web): Fix add Integration button location by @nick2432 in #4997
- fix: digest with passing filters are not aggregated by @ainouzgali in #4992
- chore(deps): upgrade sendgrid version to latest by @scopsy in #4999
- feat(node): add sdk methods for organization apis by @michaldziuba03 in #4826
- feat(pkg): added integrationidentifier in setcredential method in nod… by @Prashant-dot1 in #4994
- Add execution-details and inbound-parse to node sdk by @peoray in #4746
- fix: Change wrong property name in bulk apply changes param in node sdk by @peoray in #4930
- feat(api): Return api service level in rate limit headers by @rifont in #4976
- fix: Done [NV-3300] most recent change should be on the top in change… by @Ujjwal55 in #5010
- fix(web): Fixed Integrations Store's add button alignment by @dhairyarajbabbar in #4995
- feat(notification-center): improve notification list styling by @katyaterletskaya in #5019
- Add execution log on invalid delay configuration by @djabarovgeorge in #4946
- feat: new variable management and search var feature by @ainouzgali in #5037
- refactor: replace deprecated segment library by @scopsy in #5039
- Add missing params in node sdk get changes method by @peoray in #4932
- Fix - add missing organization by @djabarovgeorge in #5047
- Added iSend SMS Provider by @Saff-Elli-Khan in #5000
- fix: headless api client remove/refetch query scenarios by @vichustephen in #5021
- feat: add queue and workers dto typed by @djabarovgeorge in #4963
- Nv 3002 email editor variables auto suggestion dropdown by @BiswaViraj in #5059
- [NV-3328] fix(web,api,webhook): add missing webhook field in the integration sidebar by @LetItRock in #4449
- Feat add nodejs sdk methods for workflow overrides api by @Prashant-dot1 in #5020
- fix: self host env file and docker compose file by @jainpawan21 in #5038
- feat: add analytics event for locale used in workflow by @davidsoderberg in #5063
- feat(api): Add LanchDarkly feature flag for API Idempotency by @rifont in #5062
- feat(provider): add rocket.chat chat provider by @varsubham in #5035
- fix: add options in resend senderName by @jainpawan21 in #5069
- fix: add default description for secret credentials by @jainpawan21 in #5060
- fix: resend sdk version by @scopsy in #5077
- fix(pkg): user 1000 instead of root by @AliaksandrRyzhou in #5084
- feat(pkg): Add Open-Telemetry and Prometheus Montioring to Novu by @AliaksandrRyzhou in #5014
- Execution Detail - Route by FF to store by queue or directly to DAL layer by @djabarovgeorge in #5083
- fix(web): prevent updating variants to have empty conditions (front-end only) by @antonjoel82 in #5073
- fix(api): prevent saving variants without any conditions by @antonjoel82 in #5096
- ci: pr previews cors fix by @scopsy in #5089
- fix: add to string in create subscriber command transformation by @jainpawan21 in #5081
- fix: filters dont apply to a delay that is the first step in workflow by @ainouzgali in #5091
- feat(web): hubspot embed for cloud by @scopsy in #5114
- feat(worker): Add customData overrides for sms and fix gupshup provider by @BiswaViraj in #5118
- feat(ci): Get a build process back to a docker build instead of a dep… by @AliaksandrRyzhou in #5111
- feat(brevo): add support for brevo email templates by @ludorenzetti in #5121
- feat: add switch description and label by @jainpawan21 in #5044
- fix: make date path and authenticate by token optional by @jainpawan21 in #5045
- refactor: extracted worker queue chunk size to env var by @Khongchai in #4991
- feat(provider): add brevo-sms provider by @nohira in #5067
- test: fix error message by @ainouzgali in #5134
- fix(ci): Changed the process of token getting. From docker arguments … by @AliaksandrRyzhou in #5131
- feat(api, web, shared, app-gen): Refactor feature flags for key enum by @rifont in #5100
New Contributors
- @jacques made their first contribution in #4897
- @PaperBoardOfficial made their first contribution in #4951
- @strangeAeon made their first contribution in #4866
- @PaulFasola made their first contribution in #4985
- @Prashant-dot1 made their first contribution in #4994
- @Ujjwal55 made their first contribution in #5010
- @dhairyarajbabbar made their first contribution in #4995
- @Saff-Elli-Khan made their first contribution in #5000
- @varsubham made their first contribution in #5035
- @ludorenzetti made their first contribution in #5121
- @nohira made their first contribution in #5067
Full Changelog: v0.22.0...v0.23.0