uni-themes
Theme switching for React apps — zero-FOUC, React 19 safe, and it works the same in Next.js, React Router, TanStack Start and Vite.
pnpm add uni-themesZero FOUC
A synchronous inline script resolves the theme before first paint - on every framework, not just Next.js.
No React 19 warnings
The script renders from your server layout, never from a client component, so remounts cannot trigger the "script tag while rendering" error.
Server-side reading
Cookie mode lets loaders, server components and server functions know the theme - getTheme() for Next.js, getThemeFromRequest() everywhere else.
Framework-agnostic core
A plain DOM store with a 30-line useSyncExternalStore binding. Next.js, React Router, TanStack Start and Vite ship as subpath entries.