# Sonner API Reference Exact props, types, and defaults. Options passed to `toast()` override the same options set via the Toaster's `toastOptions`. ## `` | Prop | Type | Default | Description | | --- | --- | --- | --- | | `theme` | `string` | `'light'` | `'light'`, `'dark'`, or `'system'`. | | `richColors` | `boolean` | `false` | Makes error and success states more colorful. | | `expand` | `boolean` | `false` | Toasts expanded by default (otherwise they expand on hover). | | `visibleToasts` | `number` | `3` | Amount of visible toasts. | | `id` | `string` | – | Toaster id, targeted by `toast()`'s `toasterId` option. | | `position` | `string` | `'bottom-right'` | `top-left`, `top-center`, `top-right`, `bottom-left`, `bottom-center`, `bottom-right`. | | `closeButton` | `boolean` | `false` | Adds a close button to all toasts. | | `offset` | `string \| number \| object` | `'32px'` | Offset from screen edges. Object form is per-side: `{ bottom: '24px', right: '16px' }`. | | `mobileOffset` | `string \| number \| object` | `'16px'` | Offset when screen width < 600px. | | `swipeDirections` | `array` | based on position | Allowed swipe-to-dismiss directions. | | `dir` | `string` | `'ltr'` | Text directionality. | | `hotkey` | `string` | `⌥/alt + T` | Keyboard shortcut that focuses the toaster area. | | `invert` | `boolean` | `false` | Dark toasts in light mode and vice versa. | | `toastOptions` | `object` | – | Default options applied to every toast (any `toast()` option below). | | `gap` | `number` | `14` | Gap between toasts when expanded. | | `icons` | `object` | – | Replace default icons: `{ success, info, warning, error, loading }`; `null` removes one. | ## `toast()` options `toast(message, options)` — message is a string, JSX, or a function returning JSX. Returns the toast's id. | Option | Type | Default | Description | | --- | --- | --- | --- | | `description` | `ReactNode` | – | Renders underneath the title; also accepts a function returning JSX. | | `closeButton` | `boolean` | `false` | Adds a close button. | | `invert` | `boolean` | `false` | Dark toast in light mode and vice versa. | | `duration` | `number` | `4000` | Milliseconds before auto-close. `Infinity` persists the toast. | | `position` | `string` | `'bottom-right'` | Position of this toast. | | `dismissible` | `boolean` | `true` | If `false`, the user cannot dismiss the toast. | | `icon` | `ReactNode` | – | Icon in front of the text; `null` removes the default. | | `action` | `ReactNode \| { label, onClick }` | – | Primary button; clicking closes the toast unless `onClick` calls `event.preventDefault()`. | | `cancel` | `ReactNode \| { label, onClick }` | – | Secondary button; clicking closes the toast. | | `actionButtonStyle` | `object` | `{}` | Styles for the action button. | | `cancelButtonStyle` | `object` | `{}` | Styles for the cancel button. | | `id` | `string` | – | Custom id; calling `toast()` again with the same id updates the existing toast. | | `testId` | `string` | – | Rendered as `data-testid` for e2e tests. | | `toasterId` | `string` | – | Id of the toaster to render this toast in. | | `style` | `object` | – | Inline styles for the toast. | | `classNames` | `object` | – | Classes per part: `{ toast, title, description, actionButton, cancelButton, closeButton }`. Needs `!important` unless `unstyled`. | | `unstyled` | `boolean` | `false` | Removes all default styles. | | `onDismiss` | `(toast) => void` | – | Fires when the close button is clicked or the toast is swiped away. | | `onAutoClose` | `(toast) => void` | – | Fires when the toast closes automatically after `duration`. | | `containerAriaLabel` | `string` | `'Notifications'` | ARIA label for the toast container. | ## Functions | Function | Purpose | | --- | --- | | `toast(message, opts?)` | Render a toast; returns its id. | | `toast.success / .error / .info / .warning(message, opts?)` | Typed toast with matching icon. | | `toast.loading(message, opts?)` | Toast with a spinner; update it by id. | | `toast.promise(promise, { loading, success, error })` | Loading toast that resolves with the promise; `success`/`error` accept strings, JSX, functions of the result, or objects of toast options. | | `toast.custom((t) => jsx, opts?)` | Headless toast — your JSX, Sonner's behavior. | | `toast.dismiss(id?)` | Dismiss one toast, or all when called without an id. | | `toast.getActiveToasts()` | All active toasts, usable outside React. | | `useSonner()` | React hook returning `{ toasts }`. |