Toast options

Every option a toast accepts, with its type and default.

Pass these as the second argument to toast(), or as defaults in <Toaster toastOptions>, where they can also be grouped by type (success, error, info, warning, loading, blank, custom). A toast’s own options win.

Content

idstringDefault: generated
Reuse an id to update that toast in place
descriptionReactNodeDefault: none
A second, quieter line under the message
iconReactNode, or (toast) => ReactNodeDefault: per type
Replaces the built-in icon; null hides it
iconTheme{ primary, secondary }Default: per type
primary colours the built-in glyph and spinner
action{ label, onPress, color?, countdown? }Default: none
A trailing button; the toast dismisses after onPress. countdown: true drains a ring around it over the time left
cancel{ label, onPress, color? }Default: none
A quieter button before action, for “Cancel / Delete” pairs
closeButtonbooleanDefault: false
A trailing × button
closeButtonColorstringDefault: theme color
Colour of the ×
avatarimage source or ReactNodeDefault: none
A round picture in place of the icon
timestampstringDefault: none
Small text at the end of the first line (“now”, “2/4”)
expandable{ content, label?, defaultExpanded? }Default: none
A toggle that shows more below; the toast pauses while open

Progress

progressnumber (0 to 1) or 'indeterminate'Default: none
Shows a bar; prefer toast.progress, which updates on the UI thread
progressStyle'bar' or 'ring'Default: 'bar'
A bar along the bottom edge, or a ring around the icon
progressSegmentsnumberDefault: none
Splits the bar into steps

Timing and placement

durationnumber, 'short', 'long' or 'infinite'Default: 4000; success 2000; loading infinite
Milliseconds, or 2000 / 4500 / never
positionToastPositionDefault: the Toaster’s
One of the six positions
toasterIdstringDefault: 'default'
Which Toaster shows it
dedupeKeystringDefault: none
Skip this toast if one with the same key is on screen, and count the repeat
dedupeWindowMsnumberDefault: 1000
How long a key counts as on screen
removeDelaynumberDefault: the exit duration (400)
How long a dismissed toast stays mounted

Behaviour

dismissOnTapbooleanDefault: true on Android (except a toast with progress), false on iOS
Tap to dismiss
onPress() => voidDefault: none
Tapping the toast calls this, then dismisses it
dismissiblebooleanDefault: true
false turns off swipe and tap to dismiss; a button or the timer still can
swipeDirectionsSwipeDirection[]Default: toward its edge, and right (left in right-to-left layouts); left and right for a snackbar
Which ways a swipe dismisses
onDismiss(id, reason) => voidDefault: none
Called once the toast has left, with why
hapticsboolean or ToastHapticDefault: the Toaster’s
false for silence, or a named haptic: 'light', 'medium', 'heavy', 'rigid', 'soft', 'success', 'warning', 'error'
importantbooleanDefault: true for errors
Show at once, ahead of the queue, and interrupt other announcements
accessibilityLabelstringDefault: the message text
What screen readers announce

Appearance

variant'auto', 'pill', 'snackbar', 'card', 'banner', 'hud' or 'island'Default: 'auto'
The toast’s shape; see Rich toasts
themepartial theme tokensDefault: none
Token overrides for this toast
glassboolean or GlassConfigDefault: the Toaster’s
false draws the opaque surface
richColorsbooleanDefault: false
Tinted surface and text for success, error, info and warning toasts
styleViewStyleDefault: none
The toast surface, applied after tokens
textStyleTextStyleDefault: none
The message
iconStyleViewStyleDefault: none
The icon’s box
styles{ [slot]: style }Default: none
A style for any part; see Customising
classNames{ [slot]: string }Default: none
A className for any part, for NativeWind or Uniwind
unstyledbooleanDefault: false
Draw no surface, padding or shadow; bring your own through styles

closeable still works as a deprecated name for closeButton.

Last updated on Oct 26, 2026

Edit on GitHub