Branding & Styling Reference
The Inbox component is fully themeable through theappearance prop. This reference covers every level of customization — from dropping in a base theme to building dynamic, severity-aware, brand-perfect styles.
Inspiration: inbox.novu.co showcases pre-built variants like Notion and Reddit.
The appearance prop
When both
baseTheme and variables are set, variables win.
Styles are auto-injected into <head>. If the Inbox is rendered inside a shadow DOM, styles are scoped to that shadow root.
Base themes
Novu currently ships adark base theme:
baseTheme + variables to start from a theme and tweak just a few tokens:
Variables (design tokens)
Element-level styling
Each key inappearance.elements accepts:
- String of class names — CSS, CSS Modules, Tailwind
- Style object — inline CSS
- Callback —
(context) => stringreturning class names, evaluated on every render with the relevant context (notification, unreadCount, preference, schedule)
Inline style object
Tailwind classes
CSS Modules
Dynamic styling via callbacks
Callbacks receive contextual data and return class names. Use them for state-aware styles (unread count, notification severity, payload data):Common element keys
To find any element key, inspect the DOM. Class names starting withnv-(visible just before a 🔔 emoji in DevTools) map to keys inelements. Drop thenv-prefix.
Callback context signatures
Severity styling
Notifications expose three severity levels:high, medium, low. Styling can be applied through variables (global colors) or elements (precise overrides).
Severity variables
Severity element keys
By default the bell takes the color of the highest-severity unread notification.
Custom icons
Replace built-in icons with anything that renders to a React node:Icon keys
To find more keys, inspect the DOM for class names starting withnv-containing a 🖼️ emoji. The part afternv-is the icon key.
Responsive Inbox
<Drawer>.