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-themes

Zero 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.