Installation
One command installs Zyncat UI - React 19 components with no Tailwind, PostCSS or bundler config.
One command
Zyncat UI installs through its CLI, not a bare package install. Run this in the root of a React project:
pnpm dlx zyncat-ui initThat is the whole setup. The CLI installs @zyncat/ui (and React 19, if the project does not have it yet), imports the base stylesheet at your app root, writes a theme file beside it, installs the agent skill and registers the MCP server - then tells you exactly what it wrote.
What init does
Five steps, six under Tailwind v4, each printed as it lands. Nothing is hidden and nothing else is touched.
Installs the package
Adds
@zyncat/uiwith your package manager - detected from the lockfile, thepackageManagerfield or the runner you invoked it with. Ifreactis missing it installs React 19 alongside; if React 18 is installed it asks before upgrading. Under pnpm the progress bar tracks the real download - resolved and fetched packages, with live byte counts on the tarballs.Imports the stylesheet
Finds your app entry (
app/layout.tsx,src/main.tsx,app/root.tsx, ...) and addsimport '@zyncat/ui/styles.css';as the first import, so stylesheets you load later keep winning the cascade. If the import already exists, the file is untouched; if no entry is found, it prints the one line to add yourself.Writes the theme file
Writes
zyncat.theme.cssbeside that entry and imports it right after the stylesheet. It holds the eight decisions the whole system derives from - the four hues, the gray ramp's hue, the radius, the two faces - at their defaults, so a retheme is editing a value there. A file you already have is kept.Installs the agent skill
Copies the
zyncat-uiskill into.claude/skills/- the component map, picker tables, recipes and theming guide an AI coding agent should hold in context while writing your UI.Registers the MCP server
Merges the
zyncat-uientry into.mcp.json, pointing at the server bundled with the installed package - so an agent's answers about props and tokens always match the version your project runs. Existing servers in the file are preserved.Bridges Tailwind, when it is there
With Tailwind v4 installed, finds the stylesheet that imports
tailwindcssand puts@import '@zyncat/ui/tailwind.css';on the line above it. From then on the token vocabulary is a set of utilities -bg-surface,text-muted,rounded-md,ease-standard- that Tailwind IntelliSense completes. The theming guide has the full map.
After init
Restart your agent session so it picks up the skill and the MCP server, then prove the wiring with any component:
import { Button } from '@zyncat/ui/button';import { toast } from '@zyncat/ui/toast-store'; export function Hello() { return ( <Button variant="primary" onClick={() => toast.success('Wired', { description: 'Zyncat UI is ready.' })}> Say hello </Button> );}Two things stay in your hands, because they are places in your JSX:
Render one <Toaster /> at the root if you use toasts:
// app/layout.tsx - already imports the stylesheet after initimport { Toaster } from '@zyncat/ui/toast'; export default function RootLayout({ children }: { children: React.ReactNode }) { return ( <html lang="en"> <body> {children} <Toaster /> </body> </html> );}From here: retheme through the scaffolded theme file on the Theming & Overrides page, or see what the agent tooling can answer on the MCP Server page.
Requirements & CI
- React 19 -
reactandreact-dom^19. The CLI installs or offers the upgrade itself. - Node.js 18+ for the CLI and the MCP server.
- Modern browsers - Chrome 123+, Safari 17.5+, Firefox 128+, Edge 123+ (relative colour syntax, light-dark() and WAAPI).
- Icons are bundled. There is no icon peer to install - components render their own glyphs, and any prop that takes an icon accepts your own
ReactNode.
In CI or any non-interactive shell the CLI prints plain sequential logs and never prompts. Pass --yes to accept every default and --pm to pin the package manager:
npx zyncat-ui init --yes --pm pnpmRe-run init any time - after upgrading @zyncat/ui it refreshes the skill and theme types to match the new version. Once the package is installed, pnpm exec zyncat-ui init (or plain npx zyncat-ui init) runs the local, version-matched copy.
Frequently asked questions
Run npx zyncat-ui init in the root of the project - or pnpm dlx zyncat-ui init, yarn dlx zyncat-ui init, bunx zyncat-ui init. The CLI installs @zyncat/ui with the package manager it detects, adds the @zyncat/ui/styles.css import as the first import in your app entry, installs the agent skill into .claude/skills/ and registers the MCP server in .mcp.json. Every step is idempotent, so re-running it after an upgrade refreshes all four.
It splits by what you want back. Tailwind, Bootstrap and Bulma hand you utility classes to compose, while MUI, Chakra and Zyncat UI hand you finished React components. Zyncat UI is the option with no utility layer at all: plain modern CSS behind a closed token vocabulary, so nothing about it needs a PostCSS pipeline, a CSS-in-JS runtime or a build step.
No. Zyncat UI ships compiled CSS and needs no Tailwind, no PostCSS plugin, no bundler plugin and no build step - you link @zyncat/ui/styles.css once at the app root, and every component imports its own stylesheet from there so your bundler code-splits it with the component. init inserts that import above your own stylesheets, so your CSS keeps winning the cascade.
Yes, and with no transpilePackages entry. The package ships built ESM with its 'use client' directives intact, so App Router server and client boundaries resolve on their own. The only optional Next.js config is wrapping next.config.mjs with withZyncat from '@zyncat/ui/next'.
pnpm, npm, yarn and bun all work - the CLI picks yours from the lockfile, the packageManager field or the runner you invoked it with, and --pm <pnpm|npm|yarn|bun> pins it. It needs Node.js 18 or newer. In CI or any non-interactive shell it prints plain logs and never prompts, so npx zyncat-ui init --yes --pm pnpm runs unattended.
One subpath per component: import { Button } from '@zyncat/ui/button'. There is no barrel entry - importing from '@zyncat/ui' deliberately does not resolve - so an import pulls only that component and its CSS. React 19 is the one peer requirement, icons are bundled with no icon peer to install, and the package declares zero runtime dependencies.