
Sapa
A cross-framework component registry that ships one custom-built toast system to both React and Vue, installable with a single shadcn CLI command.

A cross-framework component registry that ships one custom-built toast system to both React and Vue, installable with a single shadcn CLI command.
Sapa is my own component registry for toast notifications. Instead of pulling in a package like sonner, you copy the source straight into your project and own it. The same design is authored twice, once as .tsx for React and once as .vue for Vue, so both frameworks get an identical API.
# React
npx shadcn@latest add https://sapa-registry.vercel.app/r/react/toaster.json
# Vue
npx shadcn-vue@latest add https://sapa-registry.vercel.app/r/vue/toaster.jsonMount <Toaster /> once, then call toast.success("Saved") from anywhere.
toast() APIsonner or vue-sonner underneathtype (success, error, warning, info) that colors the icon tile and the bottom progress bartoast.promise, toast.progress, toast.loading, actions, custom content and six positionsaria-live announcements, keyboard-focusable dismiss and prefers-reduced-motion supportregistry.json is the single source of truth. A build script inlines each component's files into JSON under /r/*.json, which the shadcn CLI reads to install them. A Next.js site serves those files and shows a live preview with copyable code, while a separate Vite + Vue sandbox checks that the Vue items render correctly.