Customize and configure
Learn how to filter visible preferences, customize styling, and use custom render functions.
The Subscription UI works within the existing Novu environment and uses the same provider and styling architecture as the <Inbox /> component.
You can configure which options are visible to your users, apply your brand's theme, or take full control of the rendering.
Filter using preferences
The preferences prop on the <Subscription /> component controls which workflows the component displays to the user.
Default preferences
If you want to simply filter which workflows are visible without changing their labels, then you can pass an array of workflow identifier strings. The component uses the workflow names defined in the Dashboard as the labels.
Custom preferences
You can filter using tags, workflow IDs, or both. You can also customize the labels, descriptions, or default states by passing an array of objects.
You can also update the labels for the workflows with the dynamic prop of the localization. For full localization options, see the Inbox localization documentation.
Styling
The <Subscription /> component shares the same styling architecture as the Inbox component. You can use the appearance prop to customize elements, variables, icons and themes.
For full styling and theming options, see the Inbox styling documentation.
Dark mode
Novu provides subscriptionDarkTheme in the @novu/react/themes package to apply the built-in dark theme to the <Subscription /> component. You can apply this conditionally based on your app's state.
Localization
You can customize the text labels used in the component to support different languages or to match your app's voice. This works identically to Inbox localization.
For full localization options, see the Inbox localization documentation.
Custom rendering
The renderPreferences prop on the <Subscription /> component lets you override how the component displays the list of workflows while still relying on the component to handle data fetching and state management.
The function receives the current subscription object and a loading boolean. You can map over the preferences array and render your own HTML elements.