Skip to main content

Branding & Styling Reference

The Inbox component is fully themeable through the appearance 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 a dark base theme:
Compose baseTheme + variables to start from a theme and tweak just a few tokens:

Variables (design tokens)

Element-level styling

Each key in appearance.elements accepts:
  • String of class names — CSS, CSS Modules, Tailwind
  • Style object — inline CSS
  • Callback(context) => string returning 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 with nv- (visible just before a 🔔 emoji in DevTools) map to keys in elements. Drop the nv- 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

Updating these automatically restyles both the notification accent bar and the bell glow.

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 with nv- containing a 🖼️ emoji. The part after nv- is the icon key.

Responsive Inbox

For a mobile drawer experience, use the Custom Popover pattern with shadcn’s <Drawer>.

Brand-presets cookbook

Notion-style (light, calm)

Reddit-style (vibrant)

Brand-locked dark