Coming from react-hot-toast
What carries over from the web library, and what is different.
react-hot-toast renders DOM elements, so it runs only on the web; it cannot render in a native app. This package rebuilds its API on native views, so toast code written for a React web app ports by changing the import:
- import toast, { Toaster } from 'react-hot-toast';
+ import toast, { Toaster } from 'expo-hot-toast';The same
toast, toast.success, toast.error, toast.loading, toast.custom,
toast.promise, toast.dismiss, toast.remove, <Toaster> with
position, toastOptions (including per-type buckets) and reverseOrder,
<ToastBar> inside the Toaster’s render function, iconTheme, removeDelay,
resolveValue and useToaster.
Different
| react-hot-toast | expo-hot-toast |
|---|---|
className | No CSS here: use style, textStyle and theme |
ariaProps | accessibilityLabel and important |
| Up to 20 toasts on screen | 3 per position (visibleToasts); the rest queue instead of being dropped |
gutter | gap (gutter still works) |
toastLimit | visibleToasts (toastLimit still works) |
useToaster(toastOptions, toasterId) | useToaster({ toastOptions, toasterId }) |
calculateOffset, updateHeight | Not needed: layout places toasts |
iconTheme.secondary fills the icon’s mark | Accepted, unused: the built-in glyphs are single strokes |
New
Things react-hot-toast does not have:
actionbuttons and acloseButton- Rich toasts: progress bars, steps, expandable details, Undo countdowns, notifications, banners, a HUD and the island
toast.info,toast.warningandtoast.update- Presets, animations, your own icons, a style or class for each part, and theme adapters
- Swipe to dismiss, and press and hold to pause
- A
descriptionline,richColorsand a collapsed stack dedupeKeyonDismisswith a reason- Duration presets:
'short','long','infinite' - A queue with
maxPendinganddropPolicy - Liquid Glass on iOS 26, and screen reader, Reduce Motion and text size support
What did you think of this content?
Glad it helped. A star on GitHub is how other people find it.
Thank you. The issue that just opened goes straight to the maintainer; say what was missing and the page gets fixed.