migrate-radix-to-base
Migrates React projects and components from Radix UI to Base UI.
Skill by Solizardking
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/solizardking-migrate-radix-to-base
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, frontend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/migrate-radix-to-base
What's inside
- Skill name
migrate-radix-to-base- Description
- Migrates React projects and components from Radix UI to Base UI. Use when asked to migrate from radix, move to base-ui, convert radix primitives, or switch a shadcn project's base library. Handles single components ("migrate accordion") and whole projects.
- License
- MIT
- Instructions
- 170 lines in SKILL.md · view on GitHub
Files (10)
- SKILL.md
- class-mapping.md
- consumer-props.md
- disclosure.md
- display-misc.md
- form-controls.md
- menus.md
- overlays.md
- universal-patterns.md
- wrapper-shapes.md
SKILL.md (first lines)
# Radix UI -> Base UI migration
You migrate shadcn wrappers, hand-rolled radix compositions, and their
consumers to `@base-ui/react`, keeping the project buildable at every step.
Be precise; never guess a mapping. When a prop or part is not in these
reference files, check `node_modules/@base-ui/react/**/*.d.ts` before
transforming, and record gaps in the report.
## Preflight (always)
1. `npx shadcn@latest info --json` (or the project's runner): gives the
current base, STYLE (e.g. `radix-lyra`), tailwind version, aliases,
installed components, and package manager. Trust it over inference.
2. Detect the package manager (packageManager field / lockfile:
pnpm-lock.yaml, bun.lock, yarn.lock, package-lock.json) and use IT for
every install. Never leave a stale lockfile.
3. Require a clean git tree; work on a branch; one commit per component.
4. Baseline check BEFORE touching dependencies: run the project's
typecheck/build so pre-existing failures are never attributed to you.
5. Install `@base-ui/react` alongside radix. Radix packages are removed only
after the LAST component is migrated (both coexist fine).
## Strategy: golden pair first, transformation engine second
- **Golden pair via the CLI (preferred).** If the project is shadcn with a
known style (`radix-<style>`), the shadcn CLI itself is the golden-pair
executor:
1. Classify each ui wrapper FIRST: diff the user's file against its stock
origin, using the components.json style VERBATIM in the URL
(`https://ui.shadcn.com/r/styles/<style>/<component>.json`,
files[0].content). This works for prefixed styles (radix-nova) AND
legacy unprefixed ones (new-york, new-york-v4, default), which are all
still served.
2. WHOLE-PROJECT mode: flip `components.json` style `radix-<style>` ->
`base-<style>` now. PROGRESSIVE mode: do NOT flip yet (the project is
still mostly radix; the flip happens once, after the last component);
fetch base variants directly by URL instead
(`https://ui.shadcn.com/r/styles/base-<style>/<component>.json`).
3. PRISTINE wrappers, whole-project mode: `shadcn add <component>
--overwrite` delivers the base variant with the project's exact
icon/font/preset resolution. Never bulk `--all --overwrite`; go
component by component, or you drown in unrelated registry version
drift. PROGRESSIVE mode: never use `--overwrite` (it destroys the
original that consumers still import); write the fetched base variant
content to `<component>-base.tsx` instead.
4. CUSTOMIZED wrappers: fetch the base variant and replay the user's diff
onto it (their customizations must SURVIVE; `--overwrite` would destroy
them). Mechanical implementation that works at scale:
`git merge-file user.tsx radix-golden.tsx base-golden.tsx` (three-way
merge, radix golden as ancestor) auto-resolves most files; hand-resolve
conflicts with the reference tables.
5. MANDATORY leftover sweep on EVERY golden-pair file, including ones that
merged "clean": `grep -n "radix-ui\|@radix-ui\|IconPlaceholder"` per
file. The registry sometimes reorders functions between variants, which
makes three-way merges report zero conflicts while leaving stale radix
hunks in place. A clean merge is NOT proof of a clean file.
This is more reliable than reconstructing transforms; use it whenever the
pair exists. Consumer/app code has no CLI mechanism: always hand-migrate it
against `consumer-props.md`.
- **Legacy styles (new-york, new-york-v4, default): classification only, no
replay.** These have no base counterpart (there is no base-new-york), and
retargeting onto a base-<style> variant would restyle the user's app. Use
the radix golden ONLY to detect customizations, then run the transformation
engine on the user's OWN file: rewire primitives, keep their exact classes,
apply class-mapping renames. Their look stays theirs. At the end of a
legacy whole-project migration, FLAG (do not fix): the style name still
reads as radix to the CLI, so future `shadcn add` will deliver radix
variants; the user decides whether to switch style or add manually.
- **Transformation engine (fallback).** Hand-rolled radix code, non-shadcn
projects, unknown styles: transform using `universal-patterns.md` (imports
in BOTH forms: `radix-ui` and `@radix-ui/react-*`; asChild->render with the
worked example; Portal>Positioner>Popup; the positioner FORWARD rule; part
renames), the per-family props tables (`overlays.md`, `menus.md`,
`form-controls.md`, `disclosure.md`, `display-misc.md`), `class-mapping.md`
for data-attribute/CSS-var rewrites, and `wrapper-shapes.md` for exact
target shapes (tooltip arrow, SubContent defaults, select anatomy).
## Modes
**Progressive (default).** "Migrate accordion" = one component, strangler-fig:
1. Detect in-progress state first: an existing `<component>-base.tsx`,
consumers split between old/new imports. The files ARE the state; resume,
never restart.
2. If the component imports other ui wrappers still on radix (select ->
button), STOP and recommend migrating those first, bottom-up.
3. Write the migrated version to `<component>-base.tsx` (original untouched;
golden-pair content fetched by URL, or transformed by hand, per the
strategy above); typecheck. Repoint consumers ONE AT A TIME (imports + the
call-site props in `consumer-props.md`); typecheck each. When no consumer
imports the original: delete it, rename `-base` -> original, flip imports
back, final check, commit. When the LAST radix wrapper in the project is
finalized, flip `components.json` to `base-<style>` and remove radix deps.
**Whole project** (only when explicitly asked): same per-component work in
dependency order (leaf/shared wrappers like button and label first). After
wrappers, sweep ALL app code against `consumer-props.md` — the call-site
break surface is much larger than asChild. Then remove radix deps, install,
full build.
## Hard rules
- NEVER touch non-radix libraries or their wrappers: cmdk (command), vaul
(drawer), sonner, input-otp, react-day-picker (calendar), recharts (chart).
Report them as intentionally untouched.
- No Base UI counterpart: AspectRatio -> CSS aspect-ratio div; Label ->
native `<label>`; VisuallyHidden -> `sr-only`; Direction -> Direction
Provider (`direction` prop, not `dir`). Popover Anchor and NavigationMenu
Indicator have no equivalent: inert passthrough + flag.
- `button.tsx` migrates to the REAL `@base-ui/react/button` primitive, never
a hand-rolled useRender wrapper.
- Behavior deltas are FLAGGED, never silently patched (tabs manual
activation, menu items not closing on click, nav-menu 50ms delay). The
target is idiomatic Base UI matching the shadcn base registry.
- Honest reporting: skipped/reverted files are listed as flagged, never as
migrated. Pre-existing failures are named as pre-existing.
## Verify and report
Typecheck per file, build per batch, full build at the end vs the baseline.From Solizardking/skillhub-main, MIT.
More from Solizardking/skillhub-main
- 0.516score
agentic-wallet
Solizardking
Crypto wallet operations via the awal CLI — sign in, check balances, send USDC/ETH/POL/SOL, trade tokens, fund the wallet, and use the x402 payment protocol…
SkillBFreshness: BClaude Code +9 - 0.500score
huashu-design
Solizardking
花叔Design——用HTML做高保真原型、幻灯片、动画、可视化与专家评审。任何新设计100%先出三个方向初稿给用户选(指定风格/品牌也不豁免),选定后才执行。触发词:做原型、PPT、幻灯片、动画、设计风格、评审、做个HTML页面、UI mockup、导出MP4/GIF、做个好看的。生产级Web…
SkillBFreshness: BClaude Code +9 - 0.463score
agent-browser
Solizardking
Use the host-side `agent-browser` CLI for local browser smoke tests, screenshots, snapshots, and simple UI validation against forwarded localhost URLs.
SkillCFreshness: CClaude Code +9 - 0.463score
agent-desktop
Solizardking
Use the built-in `Computer` sub-agent with `agent-desktop` for macOS desktop automation.
SkillCFreshness: CClaude Code +9 - 0.437score
agent-orchestration-handoff
Solizardking
Compact the current conversation into a single, detailed handoff message — everything that happened, why it happened, and what's left — output in a code block…
SkillCFreshness: CClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Jul 8, 2026 (3 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Solizardking/skillhub-main
- Website
- skills.x402.wtf
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
Same skill elsewhere
Copies of this SKILL.md published by others; search shows only one of them.
More from Solizardking
- 0.516score
agentic-wallet
Solizardking
Crypto wallet operations via the awal CLI — sign in, check balances, send USDC/ETH/POL/SOL, trade tokens, fund the wallet, and use the x402 payment protocol…
SkillBFreshness: BClaude Code +9 - 0.500score
huashu-design
Solizardking
花叔Design——用HTML做高保真原型、幻灯片、动画、可视化与专家评审。任何新设计100%先出三个方向初稿给用户选(指定风格/品牌也不豁免),选定后才执行。触发词:做原型、PPT、幻灯片、动画、设计风格、评审、做个HTML页面、UI mockup、导出MP4/GIF、做个好看的。生产级Web…
SkillBFreshness: BClaude Code +9 - 0.485score
doc-coauthoring
Solizardking
Guide users through a structured workflow for co-authoring documentation.
SkillBFreshness: BClaude Code +9 - 0.485score
canvas-design
Solizardking
Create beautiful visual art in .png and .pdf documents using design philosophy.
SkillBFreshness: BClaude Code +9 - 0.485score
brand-guidelines
Solizardking
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel.
SkillBFreshness: BClaude Code +9 - 0.481score
algorithmic-art
Solizardking
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration.
SkillBFreshness: BClaude Code +9
Cite this page
migrate-radix-to-base skill. Agent Mart. https://agentmart.dev/skills/solizardking-migrate-radix-to-base (last updated 2026-10-24)