A toast notification whose status lands with a rippling pulse and whose text morphs word by word.
Toasts stack in a corner and fan out when you hover them. When a toast lands on success, error, warning or info, its badge pops and a ripple washes across the card and its text. Updating a toast in place morphs its words into the new message. Hover it to show the close button. Honors prefers-reduced-motion.
npx shadcn@latest add ikislay/pixel-ui/toast"use client"import { Toaster, toast } from "@/components/ui/toast"const save = () => fetch("/api/save", { method: "POST" })// mount Toaster once, in your root layoutexport function Demo() {return (<><buttononClick={() =>toast.promise(save(), {loading: "Saving",success: "Saved",
1// Loading…
Options you can pass to customize this component.
toast(title, options)(title: ReactNode, options?: ToastOptions) => string | numberShows a plain toast and returns its id. toast.success, toast.error, toast.warning, toast.info and toast.loading take the same arguments and add a status badge.
toast.promise(task: Promise<T> | (() => Promise<T>), messages, options?) => Promise<T>Shows messages.loading until the task settles, then swaps to messages.success or messages.error in the same toast. Either can be a function of the result.
descriptionReactNodeMuted text under the title. A line break in a string starts a new line.
iconReactNodeFills the round tile the status badge sits on. Defaults to a bell.
action{ label: string; onClick: () => void }A button on the right. Clicking it runs onClick and closes the toast.
durationnumberMilliseconds before the toast closes. Loading toasts stay until updated or dismissed.
idstringnumberReuse an id to update a toast that is already showing instead of adding a new one. String text morphs into the new message.
dismissiblebooleanShows the close button on hover.
position"top-left""top-center""top-right""bottom-left""bottom-center""bottom-right"On Toaster, where the stack sits. Up to 3 toasts show at once. Dark mode follows your .dark class.
gapnumberOn Toaster, the space in pixels between expanded toasts.
Most components here are recreations of great work from around the web. I don't claim to be the original creator - this is my attempt to reverse-engineer, replicate, and often add a few extra features. I've tried to credit everyone; if I missed someone, let me know.
1