21st Design Sync

21st-dev/skill/skills/21st-design-sync

by 21st-dev15c7436c41dcNo license12 starsListed Oct 9, 2026Updated Oct 9, 2026Repository updated 4 weeks ago

Look at the current project's design (its shadcn / Tailwind CSS variables and color tokens) and publish it to the 21st.dev community as a shareable theme, using `21st publish-theme`. Use when the user says "publish my theme", "share our design as a 21st theme", "sync my design to 21st", "turn my globals.css into a theme", "залей наш дизайн темой", "опубликуй тему". This is the 21st equivalent of design-sync: it reads the project's design tokens and syncs them into the public theme library.

Instructions onlyDesign & Creative
AI-generated overview

Reads a project's shadcn/Tailwind design tokens and publishes them as a public theme on 21st.dev.

What it does
The skill locates a project's shadcn/Tailwind CSS custom properties, typically in a globals.css or index.css file, and assembles a standalone theme file containing both the :root and .dark token blocks. If the project lacks a dark variant, it generates one before publishing. It then names and tags the theme and publishes it to the public 21st.dev theme library via the 21st CLI, returning the live theme URL.
When to use it
Use it when a user wants to share or publish their project's existing design as a 21st.dev theme, for example when they say "publish my theme" or "sync my design to 21st". It is not for publishing components or for syncing a component library to a Claude Design project.
Requirements
Requires the @21st-dev/cli package (bin 21st), runnable via npx, and a 21st.dev API key beginning with 21st_sk_ supplied through --api-key or the TWENTYFIRST_TOKEN / API_KEY_21ST environment variables. Network access to 21st.dev is needed. The skill ships no scripts; it is instructions only.

21st Design Sync — publish your project's design as a theme

Take the design a project already ships (its light + dark CSS variables) and publish it to the public 21st.dev theme library so anyone can preview, bookmark, and apply it. Under the hood this is one CLI call: 21st publish-theme <file.css> --name "…".

Pre-flight (always)

  1. Auth needs a real API key. publish-theme is a management endpoint: it accepts a 21st_sk_… key only, not a 21st login session token. Get one at https://21st.dev/mcp (or https://21st.dev/settings/api-keys) and pass it via --api-key 21st_sk_… or the TWENTYFIRST_TOKEN / API_KEY_21ST env var. If the user has no key, point them there — don't try to mint one.
  2. The CLI is the unified @21st-dev/cli (bin 21st). Use npx @21st-dev/cli if it isn't installed.
  3. Publishing is public and outward-facing. A published theme is immediately is_public in the community library (there is no unlisted/private option for themes). Confirm with the user before publishing.

Step 1 — Find the project's design tokens

Locate the file that defines the shadcn/Tailwind theme variables. Check, in order:

  • app/globals.css, src/app/globals.css
  • src/index.css, styles/globals.css, app/styles/globals.css

You're looking for a :root { … } block of CSS custom properties (--background, --foreground, --card, --primary, --secondary, --muted, --accent, --destructive, --border, --input, --ring, the --chart-* / --sidebar-* tokens, --radius) and a matching .dark { … } block. Values may be hsl(...), oklch(...), hex, or raw channels — keep them exactly as the project wrote them.

Tailwind v4 projects usually keep the same :root / .dark blocks plus an @theme inline mapping; you only need the :root and .dark token values, not the @theme mapping.

Step 2 — Assemble a valid theme CSS file

The publish endpoint parses --name: value; pairs out of a :root { … } block and a .dark { … } block, and requires both to be non-empty. So the file you publish must contain both.

  • Copy the project's :root and .dark blocks into a standalone file (e.g. project-theme.css). Nothing else is required.
  • If the project has only a light :root and no .dark (or an empty one), generate a dark variant before publishing — don't ship a theme with an empty dark mode. Reuse the add-dark-mode / oklch-skill approach: invert lightness while preserving hue/chroma so the dark set stays on-brand. Keep the same token names.
  • Keep the token names shadcn-standard so the theme previews correctly on the card and applies cleanly for others.

Minimal shape:

css
:root {  --background: 0 0% 100%;  --foreground: 240 10% 4%;  --primary: 240 6% 10%;  /* …the rest of the project's light tokens… */  --radius: 0.5rem;}.dark {  --background: 240 10% 4%;  --foreground: 0 0% 98%;  --primary: 0 0% 98%;  /* …the rest of the project's dark tokens… */}

Step 3 — Name & tag it

  • Name (required, ≤ 50 chars): infer from the project — the product/brand name from package.json, the repo, or the site title. Ask the user if it's ambiguous.
  • Tags (optional): a few descriptors that match how people browse themes, e.g. dark, minimal, neutral, vibrant, saas. Pass comma-separated.

Step 4 — Publish

bash
21st publish-theme ./project-theme.css \  --name "Acme" \  --tags dark,minimal \  --api-key 21st_sk_…            # or set TWENTYFIRST_TOKEN

The command prints the live theme URL (https://21st.dev/community/themes/<slug>). Share it with the user.

Updating vs re-publishing

  • Each publish-theme creates a NEW theme (there's no upsert-by-slug like components have). Running it twice = two themes in the library.
  • To change name/tags/visibility on an existing theme, edit it in place: 21st edit <theme-id> --type theme [--name "…"] [--tags a,b].
  • To change the colors, publish a fresh file and remove the old one: 21st delete <theme-id> --type theme --yes (soft-unpublish, reversible).

When NOT to use this

  • Syncing a component library to a Claude Design project → that's the built-in /design-sync skill, a different destination.
  • Publishing a component (not a color theme) → use 21st-registry.

Source and attribution

Source:21st-dev/skillinskills/21st-design-syncat commit15c7436

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal

More from 21st-dev/skill

21st Ui Review

21st-dev

Reviews existing UI for accessibility, responsiveness, and design-system defects, with safe deterministic fixes.

Design & Creative12updated 4 weeks ago

21st Ui Explore

21st-dev

Explore and compare multiple meaningfully different UI directions grounded in the current project's design system and 21st inspiration. Use when the user wants options, variants, concepts, a redesign direction, visual experimentation, or is unsure how a new interface should look. Trigger for requests such as "show me three directions", "explore alternatives", "what could this page look like", or "generate variants". Do not use for a straightforward implementation with an already-selected direction.

Awaiting classification12updated 4 weeks ago

21st Ui Build

21st-dev

Build or substantially change production UI using the current project's design context, existing components, and grounded 21st inspiration. Use when implementing a page, section, component, responsive redesign, or visual polish in an existing web project. Trigger for requests such as "build this UI", "implement this screen", "make this page production-ready", or "use 21st to create the interface". Use 21st-ui-explore first when the visual direction is intentionally undecided, and 21st-ui-review for critique-only work.

Awaiting classification12updated 4 weeks ago

21st Registry

21st-dev

Publish your own work to 21st.dev and manage it from the terminal with the `21st` CLI (`@21st-dev/cli`): publish a React component to a team library, publish a CSS theme or a template listing, edit / unpublish / delete your published items, list and reopen existing component work, and read/replace your public profile page (bento board). Triggers when the user says "publish/share/upload this to 21st", "залей в наш регистр", "опубликуй компонент/тему/темплейт", "share with team", "make this reusable", "unpublish/edit/delete my component", "change its visibility", "find/open my old component or draft", "найди/открой мой старый компонент или драфт", "add this to my 21st profile/bento", "update my profile page", "обнови мой профиль на 21st", "добавь блок в бенто", "add controls/knobs to my demo", "сделай демо с контролами". For finding and installing existing items use `21st-cli-use`; for turning a project's design tokens into a theme use `21st-design-sync`.

Awaiting classification12updated 4 weeks ago

21st Cli Use

21st-dev

Guides use of the 21st CLI to search, install, and pull React/shadcn components, themes, and templates from the 21st.dev catalog.

Software Development12updated 4 weeks ago

21st Ai

21st-dev

Generate and iterate on UI with 21st AI from the terminal via the `21st` CLI (`@21st-dev/cli`): sketch a UI from a prompt, preview the variants in the browser, edit any variant in place with a natural-language change, and pull the final code into the project. Use whenever the user wants to BUILD / SKETCH new UI ("sketch a pricing page", "generate a hero with 21st", "make me a <X> section"), ITERATE on a generated draft ("edit the third variant", "add a toggle to that take"), or GRAB the code of a draft ("pull that variant's code", "сгенери UI на 21st", "поправь третий вариант", "забери код того наброска"). For finding/installing existing components use the `21st-cli-use` skill; to publish your own, `21st-registry`.

Awaiting classification12updated 4 weeks ago