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:

bash
pnpm dlx zyncat-ui init
~/my-app
Demo of the zyncat-ui init terminal output: the package installs with a progress bar, then the agent skill, MCP server and stylesheet are wired up.

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

  1. Installs the package

    Adds @zyncat/ui with your package manager - detected from the lockfile, the packageManager field or the runner you invoked it with. If react is 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.

  2. Imports the stylesheet

    Finds your app entry (app/layout.tsx, src/main.tsx, app/root.tsx, ...) and adds import '@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.

  3. Writes the theme file

    Writes zyncat.theme.css beside 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.

  4. Installs the agent skill

    Copies the zyncat-ui skill into .claude/skills/ - the component map, picker tables, recipes and theming guide an AI coding agent should hold in context while writing your UI.

  5. Registers the MCP server

    Merges the zyncat-ui entry 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.

  6. Bridges Tailwind, when it is there

    With Tailwind v4 installed, finds the stylesheet that imports tailwindcss and 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:

tsx
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:

tsx
// app/layout.tsx - already imports the stylesheet after init
import { 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 - react and react-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:

bash
npx zyncat-ui init --yes --pm pnpm

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

Set in Geist & Newsreader — animated by the house engineZyncat UI · Rev 0.11 · MIT · Built by Tabsir Ahammed · Source on GitHub