Compatibility
What we verify on every push, versus what we treat as best-effort. If your stack lands in a row marked Manual step, the docs note tells you exactly what to do.
Legend
- Tested in CIExercised on every CI run (unit, E2E smoke, registry validation, or per-component build).
- Best effortWe expect it to work because the code is framework-agnostic, but it isn't in our test matrix yet.
- Manual stepWorks, but requires a one-time setup step documented in the notes column.
Runtime
| Target | Version | Status | Notes |
|---|---|---|---|
| Node.js (CLI users) | ≥ 18 | Tested in CI | Minimum supported by `uniqueui-cli`. Use 20 LTS or 22 LTS for the smoothest experience. |
| Node.js (this repo contributors) | 24.x | Tested in CI | Matches `package.json#engines` for monorepo work; mismatch is fine for end users of the CLI. |
| pnpm | 10.33.x | Tested in CI | Pinned via `packageManager`. Other PMs work for end users (`pnpm`, `npm`, `yarn`, `bun` all detected). |
React stack
| Target | Version | Status | Notes |
|---|---|---|---|
| React | 18 / 19 | Tested in CI | The docs site runs React 19; components are written to also work on 18. |
| React Server Components | — | Manual step | UniqueUI components are client components by default (`"use client"`). Import them from a Server Component normally. |
| TypeScript | ≥ 5 | Tested in CI | Each registry file is strict-mode safe. The CLI itself ships types. |
| Tailwind CSS v3 | ≥ 3.4 | Tested in CI | The CLI merges component `tailwindConfig.theme.extend` directly into your `tailwind.config.{js,ts}`. |
| Tailwind CSS v4 | ≥ 4.0 | Tested in CI | The CLI detects v4 (via `@tailwindcss/postcss`, a 4.x `tailwindcss` range, or `@import "tailwindcss"` in your globals.css) and appends a marker-wrapped `@theme` snippet to your `tailwind.css` path. Idempotent across re-runs and respected by `--dry-run`. |
| Motion (formerly Framer Motion) | ≥ 12 | Tested in CI | Components import from `motion/react`. The CLI installs `motion` for you. |
Frameworks
| Target | Version | Status | Notes |
|---|---|---|---|
| Next.js (App Router) | 15 – 16 | Tested in CI | The docs site itself runs Next 16. Components use `"use client"` where they touch state or motion. |
| Next.js (Pages Router) | 13+ | Best effort | Components are framework-agnostic React. No `next/*` imports in registry code. |
| Vite + React | ≥ 5 | Best effort | After `npx uniqueui init`, edit `components.json` paths if your project uses `src/` or `app/` differently. |
| Remix / React Router 7 | ≥ 2 | Best effort | Same caveat as Vite. The CLI does not auto-detect framework yet. |
| Astro (React island) | ≥ 4 | Best effort | Wrap each UniqueUI component in `client:load` or `client:visible`. |
CLI flows
| Target | Version | Status | Notes |
|---|---|---|---|
| `uniqueui init` — Next.js (App Router) | — | Tested in CI | Smoke-tested locally and in CI. |
| `uniqueui add <slug>` — every registry component | — | Tested in CI | `scripts/test-all-components.ts` installs each component into a fresh Next app and builds. |
| shadcn registry — `npx shadcn add .../r/<slug>.json` | — | Tested in CI | `pnpm test:e2e:shadcn` adds every item with the shadcn CLI and runs `next build`. |
| Offline / airgapped install | — | Manual step | Pass `--url file://path/to/built/registry` to point the CLI at a local checkout. |
Tailwind v4 — how it works
A v4 project's tokens live in CSS (@theme in your global stylesheet), not in a JS tailwind.config. When you run uniqueui add <component>, the CLI detects v4 (from @tailwindcss/postcss, a 4.x tailwindcss range, or @import "tailwindcss" in your CSS) and, if the component ships a tailwindCss snippet, appends it to the file at components.json#tailwind.css wrapped in /* uniqueui:start <slug> */ markers. Re-runs are idempotent; --dry-run prints the snippet without writing.
On a v3 project the same command takes the legacy path and merges theme.extend.animation / keyframes into your tailwind.config.{js,ts}. You don't pick a mode — the CLI does.
Found a gap? Open an issue at github.com/pras75299/uniqueui/issues with your stack versions and the error you hit.