@wrksz/themesv2.0.0-beta.1 · beta

Getting Started

Install and configure @wrksz/themes in your Next.js app.

Edit on GitHub

Last updated on

These docs describe 2.0.0-beta.1. Install with the beta tag. Stable latest is still 1.2.0. See Upgrading from 1.x.

Installation

bun add @wrksz/themes@beta
npm install @wrksz/themes@beta
pnpm add @wrksz/themes@beta
yarn add @wrksz/themes@beta

Setup

Add ThemeProvider to your root layout. Import from @wrksz/themes/next for Next.js - this avoids the React 19 inline script warning by using useServerInsertedHTML. Add suppressHydrationWarning to <html> to prevent hydration mismatches.

app/layout.tsx
import { ThemeProvider } from "@wrksz/themes/next";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en" suppressHydrationWarning>
      <body>
        <ThemeProvider>{children}</ThemeProvider>
      </body>
    </html>
  );
}

Usage

Use the useTheme hook in any Client Component to read and update the current theme.

components/theme-toggle.tsx
"use client";

import { useTheme } from "@wrksz/themes/client";

export function ThemeToggle() {
  const { resolvedTheme, setTheme } = useTheme();

  return (
    <button
      type="button"
      onClick={() => setTheme(resolvedTheme === "dark" ? "light" : "dark")}
    >
      Toggle theme
    </button>
  );
}

Import paths

ImportUse for
@wrksz/themes/nextThemeProvider in Next.js (recommended)
@wrksz/themes/clientuseTheme, useThemeValue, useThemeEffect, ThemedImage, ClientThemeProvider, createThemes
@wrksz/themes/client/use-themeDirect useTheme import
@wrksz/themes/client/use-theme-valueDirect useThemeValue import
@wrksz/themes/client/use-theme-effectDirect useThemeEffect import
@wrksz/themes/client/themed-imageDirect ThemedImage import
@wrksz/themes/client/providerDirect ClientThemeProvider import
@wrksz/themes/client/create-themesDirect createThemes import
@wrksz/themesClient-safe ThemeProvider alias and createThemes for framework-neutral React usage

The API is identical to next-themes. Migrating requires changing one import line: @wrksz/themes/next instead of next-themes. See Why not next-themes? for a full comparison.

Requirements

  • Next.js 16+
  • React 18+ (uses native useEffectEvent on React 19.2+)
  • TypeScript 5.9+ Breaking · v2.0.0-beta.1 (typescript peer is >=5.9 from 2.0.0-beta.1; 4.x and 5.0–5.8 are unsupported on this line)

Next steps

On this page