What’s new in Novu 2.1.0?
TL;DR: Preferences remodelling for 70% improvement in performance of Preference retrieval with an important database migration, 46% reduction in Docker image sizes, and more.
2.1.0 Release Updates
We're excited to share updated focussed on improving database and operational performance in our latest release. Join us as we reveal the improvements our team have been working on!
Preference remodelling and optimization
- All Workflow & Subscriber preferences are now stored in a central Preferences collection to streamline preference retrieval for the
<Inbox />
+ Subscriber Preference API for a more performance subscriber preference management experience, and performance improvements of Worker engine during notification delivery - IMPORTANT: A mandatory database migration is required with this release to prepare for the removal of the
SubscriberPreference
collection and theNotificationTemplateRepository
.{preferenceSettings,critical}
property in a subsequent release. This data is migrated to a centralized Preference collection. Please visit the Data Migration documentation for more information on running the migration script. The following migration of data takes place:- Workflow preference (
NotificationTemplate
.preferenceSettings
)- ->
Preference
record withtype: 'WORKFLOW_RESOURCE'
(for Code-First workflow support) - ->
Preference
record withtype: 'USER_WORKFLOW'
(for Dashboard/API user preference support)
- ->
- Subscriber Global preference (
SubscriberPreference
withlevel: 'GLOBAL'
)- ->
Preference
record withtype: 'SUBSCRIBER_GLOBAL'
- ->
- Subscriber Workflow preference (
SubscriberPreference
withlevel: 'TEMPLATE'
)- ->
Preference
record withtype: 'SUBSCRIBER_WORKFLOW'
- ->
- Workflow preference (
Docker Image optimization for all applications
- 46% reduction in Docker image sizes
- Simplified COPY and RUN commands
- Overall optimization of image structure
- Replace external PM2 dependency for graceful shutdowns with native NestJS shutdown module
What's Changed
- perf(framework): Replace all computed property keys with static declarations by @rifont in #6926
- chore(web): shorten the digest default duration by @djabarovgeorge in #6918
- feat(web,dashboard): opt-out, redirects by @ChmaraX in #6922
- fix(dashboard): Render bold markdown in in app preview by @desiprisg in #6928
- fix(dashboard): Add default values to workflow editor provider form by @desiprisg in #6932
- fix(dal): Reduce default Mongo connections by @SokratisVidros in #6901
- refactor(shared, dal, application-generic, api, web, dashboard): Remove
json-schema-to-ts
dependency and useJsonSchemaDto
everywhere by @rifont in #6921 - fix(dashboard): promote toast env name by @ChmaraX in #6933
- fix(dashboard): create workflow docs link by @ChmaraX in #6936
- fix(dashboard): align heading with the gutter by @ChmaraX in #6935
- fix(web, dashboard): Remove additional quotes in PHP code snippet by @rifont in #6938
- feat(api): invalidate stale workflows by @djabarovgeorge in #6887
- fix(framework): Ensure missing schemas return unknown record type by @rifont in #6912
- feat(dashboard): Add origin prop to CustomStepControls for conditiona… by @BiswaViraj in #6939
- chore(root): Release 2024-11-12 08:05 by @github-actions in #6947
- feat(dashboard): add full utc date for updated at on hover by @djabarovgeorge in #6948
- fix(dashboard): Dropdown border and action picker clickable area by @desiprisg in #6944
- fix(dashboard): Trim tag input tags before adding by @desiprisg in #6942
- fix(dashboard): Allow newlines on trigger workflow payload editor by @desiprisg in #6941
- fix(dashboard): Align header heights by @desiprisg in #6940
- feat(api): Billing alerts on usage emails by @scopsy in #6883
- fix(dashboard): Fix tag input suggestion sorting by @desiprisg in #6943
- feat(dashboard): unify success toasts by @ChmaraX in #6937
- fix(dashboard): opt-in image source by @ChmaraX in #6949
- feat(web,dashboard): opt-in/out tracking by @ChmaraX in #6930
- feat(api): restrict tags to max 8 by @djabarovgeorge in #6929
- chore(root): move selective actions to blacksmith by @blacksmith-sh in #6950
- fix(dashboard): Nv 4679 visiting UI based workflow shows framework code by @BiswaViraj in #6951
- feat(api): Fix previous steps by @tatarco in #6905
- fix(dashboard): Show consistent tag inputs by @desiprisg in #6960
- fix(dashboard): Fix configure action not opening by @desiprisg in #6965
- feat(dashboard): unify clerk primary button with dashboard design by @ChmaraX in #6959
- feat(dashboard): trigger test workflow loading state by @ChmaraX in #6961
- feat(dashboard): autofocus on first create workflow input by @ChmaraX in #6962
- feat(dashboard): align layout based on design by @ChmaraX in #6964
- feat(dashboard): workflow list empty states by @ChmaraX in #6955
- chore(framework, shared, nextjs): Release new versions by @rifont in #6963
- fix(dashboard): Don't suggest added tags in tag input by @desiprisg in #6968
- feat(dashboard): workflow editor error handling by @LetItRock in #6953
- feat(api): add origin backward compatibility mapping by @djabarovgeorge in #6973
- feat(dashboard): in-app editor unsaved changes modal plus handling esc and clicking on drawer gray overlay by @LetItRock in #6958
- refactor(api): Use
UpdatePreference
use-case for all Subscriber Preference updates by @rifont in #6889 - chore(dashboard): disable 1password on the workflow create sidebar by @LetItRock in #6975
- fix(api): upsert preference if exist by @djabarovgeorge in #6970
- feat(dashboard): page meta, gtm, and uptime by @LetItRock in #6974
- feat(dashboard): styling for read-only input fields by @ChmaraX in #6967
- fix(dashboard): Tweak Create Workflow copywriting by @desiprisg in #6971
- fix(dashboard): Workflow saving status on toast and multiple toasts by @desiprisg in #6972
- refactor(api): remove $or query for hash on env by @scopsy in #6969
- chore(dashboard): batch of small fixes by @LetItRock in #6977
- fix(api): fix deletion of issues from persistence once no issues are found by @tatarco in #6956
- fix(web): Preserve last active organization across full page reloads by @SokratisVidros in #6978
- feat(node): add deleteByTransactionId method by @jainpawan21 in #6980
- refactor(worker): Remove redundant Bridge error handling by @rifont in #6875
- chore(dashboard): a few more fixes by @LetItRock in #6985
- feat(api): add tags issues by @djabarovgeorge in #6957
- feat(framework): Expose
Workflow
resource type in public API by @rifont in #6983 - chore(dashboard): revert trigger success toast by @LetItRock in #6987
- fix(api, application-generic): Filter with supplied
tags
when fetching subscriber preferences by @rifont in #6991 - chore(framework): Release version 2.5.0 by @rifont in #6988
- chore(root): Release 2024-11-14 08:06 by @github-actions in #6993
- chore(root): Release 2024-11-13 08:05 by @github-actions in #6981
- feat(dashboard): Save workflow on blur by @desiprisg in #6990
- fix(dashboard): Call save before instantly flushing and instantly save tag changes by @desiprisg in #6997
- feat(dashboard): Selected route background color in sidebar by @desiprisg in #6996
- fix(dashboard): Fix close icon padding in tag input by @desiprisg in #6995
- fix(dashboard): Hide search workflow input by @desiprisg in #6998
- fix(dashboard): Lighten the focus border on inputs by @desiprisg in #6999
- fix(dashboard): Modality on configure action popover by @desiprisg in #7000
- fix(api): bug bash preview issues resolved by @tatarco in #6904
- feat(dashboard,web): opt-in app switching and redirects by @ChmaraX in #7002
- fix(dashboard): ignore legacy dashboard staging subdomain by @ChmaraX in #7003
- feat(dashboard): clerk components font size unification by @ChmaraX in #6984
- chore(dashboard): workflow editor step name ellipsis by @LetItRock in #7007
- fix(dashboard): Redirect url tooltip by @desiprisg in #7014
- chore(root): Release 2024-11-15 08:06 by @github-actions in #7013
- fix(dashboard): reset preview payload on form change to prevent stale data by @BiswaViraj in #7012
- fix(api): add patch step api and consolidate post update processing by @tatarco in #7015
- fix(dashboard): Fix step deletion not working by @desiprisg in #7010
- fix(api): Nv 4666 adding a primary action breaks preview by @tatarco in #7001
- chore(dashboard): conntect inbox component and fix the layout by @LetItRock in #7009
- fix(dashboard): opt-in redirect logic fix by @LetItRock in #7017
- feat(dashboard): in-app editor loading state by @LetItRock in #7006
- feat(api): raise the tags limit by @djabarovgeorge in #6989
- fix(dashboard): disable delete option for external workflows by @BiswaViraj in #6966
- fix(dashboard): Tag input improvements by @desiprisg in #7020
- fix(dashboard): Truncation and clipboard copy fixes by @desiprisg in #7023
- fix(dashboard): Inherit font on codemirror editor by @desiprisg in #7024
- fix(api): Value saved on the wrong step by @tatarco in #7018
- fix(api): active update by @djabarovgeorge in #6986
- fix(api): Add a Patch Workflow endpoint by @tatarco in #7019
- refactor(api, application-generic): Encapsulate preference mutations in workflow use-cases by @rifont in #7005
- fix(api): add novu enterprise check with plain support key env by @jainpawan21 in #6885
- feat(dal,web): add plain support service hash for live chat by @jainpawan21 in #6908
- fix(web): update code based option doc link by @jainpawan21 in #7031
- feat(novu): Add
--headless
flag to prevent automatic browser open withnpx novu dev
command by @rifont in #7016 - feat(web, dashboard, api, shared): Add enhanced
slugify
to handle multilingual, special, and emoji characters by @rifont in #7025 - chore(root): bump cross-spawn from 7.0.3 to 7.0.5 by @dependabot in #7030
- fix(api): Add human friendly error messages for control and payload issues. by @rifont in #7026
- chore(dashboard): in-app editor polished inbox preview by @LetItRock in #7027
- fix(dashboard): Dashboard cleanups by @desiprisg in #7033
- test(framework): Add test for step results in control values during preview by @rifont in #7034
- chore(root): Release 2024-11-18 08:06 by @github-actions in #7036
- feat(web): enable opt-in inside user profile for v2 by @ChmaraX in #7004
- feat(dashboard): Pause workflow from the context actions on workflow list by @BiswaViraj in #7038
- fix(web): when user is opted-in redirect to the new dashboard on route change by @LetItRock in #7022
- fix(dashboard): Hide typed tag when it's suggested by @desiprisg in #7039
- fix(dashboard): Codemirror centering and default badge padding by @desiprisg in #7042
- chore(root): update runner environment from blacksmith to ubuntu-latest by @merrcury in #7040
- fix(api): Support fetching V1 Workflows without V2 Preferences by @rifont in #7043
- fix(dashboard): action required error node icon styling by @ChmaraX in #7045
- feat(api): update patch dto by @djabarovgeorge in #7041
- fix(dashboard): Fix ui issues in in app step editor by @desiprisg in #7047
- feat(api): remove url as required field by @djabarovgeorge in #7049
- fix(api): payload schema parsing by @ChmaraX in #7048
- fix(dashboard): update the workflow query data when its updated by @LetItRock in #7051
- fix(dashboard): add control values to step editor in-app preview by @ChmaraX in #7050
- fix(api): make zod optional by @tatarco in #7056
- fix(dashboard, api): Add stronger validation for frontend and backend workflow schemas by @rifont in #7055
- feat(dashboard): Add pause modal by @BiswaViraj in #7046
- chore(root): Release 2024-11-19 08:06 by @github-actions in #7058
- fix(dashboard): Ensure that dashboard works in local on checkout by @SokratisVidros in #7057
- fix(web): opt in redirect for v2 dashboard only by @ChmaraX in #7059
- fix(dashboard): reset form on workflow creation by @BiswaViraj in #7061
- feat(dashboard): disable react-query window focus refetch by @ChmaraX in #7062
- fix(dashboard): Fix autosuggest UI issues by @desiprisg in #7054
- chore(api): Migrate all V1 Preferences to V2 Preferences by @rifont in #7011
- feat(api): add delay digest ui schemas by @djabarovgeorge in #7032
- fix(dashboard): propagate saved step changes to in-app step editor by @ChmaraX in #7053
- fix(api): Nv 4798 unify default step controls definition using only zod by @tatarco in #7063
- feat(dashboard): make unsupported steps read-only for all wfs by @ChmaraX in #7066
- fix(dashboard): workflow editor name change updates the workflow slug in the url by @LetItRock in #7064
- fix(api): Remove workflow property issue checks by @rifont in #7069
- fix(api): null issues by @tatarco in #7076
- chore(root): Release 2024-11-20 08:06 by @github-actions in #7077
- fix(dashboard): align validation error messages across the application by @LetItRock in #7044
- chore(root): Release npm packages by @SokratisVidros in #7073
- style(dashboard): Refine primary header hover and focus states, add inbox animation by @rifont in #7072
- chore(shared, dal, api, worker, application-generic): remove the unwanted expiredAt in favour of atlas triggers by @merrcury in #6931
- fix(dashboard): Add shrink-0 to workflow status icon by @desiprisg in #7074
- fix(dashboard): Center custom controls input text by @desiprisg in #7078
- fix(dashboard): Extend ZodValue type to include ZodAny and handle number type in dynamic schema by @BiswaViraj in #7079
- fix(dashboard): Fix payload field growing out of bounds by @desiprisg in #7075
- fix(dashboard): Set popover z-index to 50 to match sheet by @desiprisg in #7081
- chore(root): Release 2024-11-20 12:53 by @github-actions in #7084
- ci(web): add new dashboard url env var by @ChmaraX in #7082
- chore(root): Release 2024-11-20 12:55 by @github-actions in #7085
- fix(dashboard): fixed the ui issues by @LetItRock in #7087
- style(dashboard): Refine modal, tooltip, and preview content accordion by @rifont in #7086
- chore(root): Release 2024-11-20 14:33 by @github-actions in #7089
- fix(dashboard): light theme for new domain by @ChmaraX in #7090
- style(dashboard): Fix CSS variable formatting for
alert
by @rifont in #7091 - chore(root): Release 2024-11-20 16:23 by @github-actions in #7093
- fix(dashboard): Portal tooltip content by default by @desiprisg in #7095
- fix(dal): Add index on createdAt for Online Archive in execution, job… by @merrcury in #7083
- chore(root): Release 2024-11-21 08:06 by @github-actions in #7098
- chore(webhook): Update Dockerfile and add .dockerignore for improved … by @merrcury in #7096
- feat(root): Add base Dockerfile for GHCR with Node.js and dependencies by @merrcury in #7100
- fix(dashboard,web): opt-in page flickering; login/logout redirect by @ChmaraX in #7102
- fix(dashboard): Ensure all timeouts are cleared on component unmount by @rifont in #7097
- revert(api): Return all preference channels for Subscriber Preference API by @rifont in #7101
- ci(web): add staging new dashboard url to deploy action by @ChmaraX in #7104
- fix(api): Nv 4823 no validation around bad urls + 400 in client by @tatarco in #7092
- fix(dashboard): Workflow editor UI fixes by @desiprisg in #7099
- feat(worker): add defer duration validation by @djabarovgeorge in #7088
- fix(api, dal, framework): fix the uneven and unused dependencies by @merrcury in #7103
- chore(api): Add batch mechanism for preference centralization migration and improve logging by @rifont in #7107
- chore(root): Release 2024-11-21 16:05 by @github-actions in #7108
- fix(dashboard): In app editor fixes by @desiprisg in #7094
- chore(root): Release 2024-11-22 08:06 by @github-actions in #7109
- fix(api): Nv 4836 v2 dashboard workflows show error in old dashboard by @tatarco in #7106
- feat(dashboard): signup and login page design update by @scopsy in #7070
- fix(dashboard): Do not render preview action when nullish by @desiprisg in #7113
- feat(root): add support chat app ID to environment variables in d… by @merrcury in #7120
- chore(root): Release 2024-11-25 08:06 by @github-actions in #7121
- fix(api): Migrate subscriber global preferences before workflow preferences by @rifont in #7118
- feat(dashboard): Codemirror liquid filter support by @desiprisg in #7122
- chore(dashboard): Cleanup step related components by @desiprisg in #7125
- fix(dashboard): Fix url variables being cut out by @desiprisg in #7110
- fix(js): Truncate workflow name and center empty notifications text by @desiprisg in #7123
- fix(api): remove openApi Methods by @tatarco in #7128
- feat(js): Popover props by @BiswaViraj in #7112
- chore(root): Release 2024-11-26 08:06 by @github-actions in #7130
- feat(dashboard): org creation screen by @scopsy in #7080
- feat(dashboard): Add test inbox for full E2E test journey by @rifont in #7117
- feat(dashboard): add workflow visit event by @scopsy in #7134
- chore(root): Release 2024-11-26 17:36 by @github-actions in #7135
- fix(api): Fix billing active subscription computation by @rifont in #7138
- fix(api): fix step id on sync to env by @djabarovgeorge in #7139
- fix(dashboard): Fix copywriting by @SokratisVidros in #7141
- chore(root): Release version
2.1.0
for all applications by @rifont in #7142 - chore(root): Release 2024-11-27 10:41 by @github-actions in #7146
New Contributors
- @blacksmith-sh made their first contribution in #6950
Full Changelog: v2.0.1...v2.1.0