tessl install github:uzhussain/ant-to-shadcn --skill ant-to-shadcn-migrationMigrate Ant Design UIs to shadcn/ui + Tailwind (React/CRA/Vite → Next.js App Router) with layout/page skeleton generation, component mapping, and aggressive legacy CSS cleanup guidance.
Review Score
75%
Validation Score
14/16
Implementation Score
63%
Activation Score
83%
Comprehensive guide for migrating legacy Ant Design frontends to shadcn/ui + Tailwind (Radix under the hood), covering component equivalence, theming/tokens, layout/navigation, forms/tables, overlays/alerts, accessibility, and bundle-size cleanup. Targets React (CRA/Vite) apps moving to Next.js App Router, with patterns for running Ant and shadcn side-by-side during transition. Includes automated skeleton generation guidance for fresh layouts/pages with role-aware routing.
Use the latest stable versions of:
next ≥ 16.x (App Router)react ≥ 19.xtailwindcss ≥ 3.4.xshadcn/ui latest@radix-ui packages as pulled by shadcn/uiclass-variance-authority, tailwind-merge, lucide-react, sonnerreact-hook-form ≥ 7.x and zod ≥ 3.x for forms (recommended)| Priority | Category | Impact | Prefix | Rules |
|---|---|---|---|---|
| 1 | Setup & Dependencies | CRITICAL | setup- | 5 |
| 2 | Design Tokens & Theming | CRITICAL | theme- | 2 |
| 3 | Layout & Navigation (Responsive) | HIGH | layout- | 3 |
| 4 | Forms & Validation | HIGH | forms- | 3 |
| 5 | Data Display (Tables/Lists) | HIGH | data- | 2 |
| 6 | Feedback & Overlays | HIGH | overlay- | 2 |
| 7 | Content, Icons, Typography | MEDIUM | content- | 1 |
| 8 | Styling & CSS Cleanup | MEDIUM | css- | 2 |
| 9 | Accessibility, Responsiveness & Interop | MEDIUM | a11y- | 4 |
| 10 | Testing & Verification | LOW | test- | 2 |
| 11 | Common Gotchas | HIGH | gotchas- | 3 |
| Ant Design 6.x | shadcn/ui + Tailwind (or pattern) | Notes |
|---|---|---|
| Button | Button, ButtonGroup | |
| FloatButton | Button with fixed/absolute + shadow | |
| Icon | lucide-react | Drop Ant icons |
| Typography | Tailwind text utilities; Typography classes | |
| Divider | Separator | |
| Flex/Grid/Masonry | Tailwind flex/grid; CSS masonry if needed | |
| Layout, Space, Splitter | Tailwind stack/gap; custom splitter with Resizable | |
| Anchor | NavigationMenu/ScrollArea or manual anchor links | |
| Breadcrumb | Breadcrumb | |
| Dropdown | DropdownMenu | |
| Menu | NavigationMenu or Sheet nav | |
| Pagination | Pagination | |
| Steps | Custom flex steps | |
| Tabs | Tabs | |
| AutoComplete/Mentions | Combobox/Command | |
| Cascader/TreeSelect | Combobox with grouped/indented options | |
| Checkbox/Radio | Checkbox, RadioGroup | |
| ColorPicker | Custom popover + color input | |
| DatePicker/TimePicker | Calendar + Popover, time input | |
| Form/Form.Item | Form (RHF) + shadcn fields | |
| Input/InputNumber | Input (number type), InputGroup | |
| Rate | Custom star row using Button/Toggle | |
| Select | Select or Combobox | |
| Slider/Switch | Slider, Switch | |
| Transfer | Dual list with checkboxes and buttons | |
| Upload | File input + dropzone + progress | |
| Avatar | Avatar | |
| Badge/Tag | Badge | |
| Calendar | Calendar | |
| Card | Card | |
| Carousel | Carousel | |
| Collapse | Accordion | |
| Descriptions | Definition list with grid/flex | |
| Empty | Empty or custom empty block | |
| Image | img with Tailwind classes | |
| List | Cards/grid/flex list | |
| Popover/Tooltip | Popover, Tooltip | |
| QRCode | Use QR library + Card | |
| Segmented | ToggleGroup | |
| Statistic | Card + text/metric styling | |
| Table | tanstack + Table | |
| Timeline | Custom vertical list with bullets | |
| Tour | Custom popover walkthrough (command + popover) | |
| Tree | Indented list + checkboxes; virtualize if large | |
| Alert | Alert | |
| Drawer | Sheet | |
| Message/Notification | toast/sonner | |
| Modal/Popconfirm | Dialog / AlertDialog | |
| Progress | Progress | |
| Result | Alert success/error block | |
| Skeleton/Spin | Skeleton or spinner utility | |
| Watermark | CSS background or canvas overlay | |
| Affix | sticky positioning | |
| App/ConfigProvider/Util | Not needed; use shadcn/Tailwind tokens and providers | |
| Pro* (ProTable, etc.) | Compose with tanstack table + filters/forms + cards |
Button/Toggle.Card.background-image or canvas; keep scoped.position: sticky on containers.grid-auto-rows + spans.Card with muted labels.Command/Combobox for search/select; Sonner for toasts; Menubar/Sidebar for complex nav; Spinner for lightweight loading; Chart (community/blocks) where Ant charts were used; Input OTP for code entry; Field/Textarea for richer forms.Form.Item patterns to shadcn + react-hook-form + zod; validation and submission states; success/failure/inline errors.content-icons-typography.a11y-responsive-checks, a11y-motion-contrast, responsive-touch, rtl-l10n.gotchas-ux-fallbacks).perf-bundle-guard).analytics-observability).gotchas-scroll-state).Run scans to route findings to rules:
antd imports and package version → setup-antd-upgrade, setup-, css-legacy, theme-bridge, component mappings.ConfigProvider, theme.useToken → theme-bridge, theme-dark-mode, css-layering.*.less, global.css, index.css) → css-legacy-inventory, css-layering, css-asset-hygiene.style= with Ant tokens → theme-bridge, css-inline-cleanup.Layout.Sider, Menu, Breadcrumb → layout-shell, layout-nav.Form, Form.Item, message, notification, Modal.confirm → forms-*, overlay-*, gotchas-ux-fallbacks.Table, List, Descriptions, Tag, Badge, Empty → data-*, components-* (pagination/result/empty), data-table-tanstack.layout-route-scaffold, layout-auth-discovery, gotchas-coexistence.layout-auth-discovery.@ant-design/icons, global Ant CSS, LESS files → content-icons-typography, css-legacy-inventory, perf-bundle-guard.theme-dark-mode-guardrails.css-asset-hygiene, assets-images.fonts-setup.gotchas-scroll-state.a11y-motion-contrast, a11y-responsive-checks, responsive-touch.rtl-l10n.analytics-observability.# Ant version
npm ls antd
# Ant imports and icons
rg \"antd\" src app
rg \"@ant-design/icons\" src app
# ConfigProvider and tokens
rg \"ConfigProvider\" src app
rg \"theme\\.useToken\" src app
# Ant imperative APIs
rg \"Modal\\.confirm\" src app
rg \"notification\\.\" src app
rg \"message\\.\" src app
# Table/columns
rg \"columns\\s*=\\s*\\[\" src app
# LESS and global CSS
rg --files -g\"*.less\" src app
rg \"global\\.css\" src app
# Dark mode selectors
rg \"\\.dark\" src app
# Assets and fonts
rg --files -g\"*.{png,jpg,jpeg,svg}\" public/ src app
rg \"font-family\" src app
# Responsive/touch/scroll
rg \"overflow\" src app
rg \"scrollIntoView\" src app
# Routes/guards/menus
rg \"<Router\" -g\"*.tsx\" src app
rg \"RequireAuth|useAuth|Clerk|Supabase\" src app
rg \"menu\" src app/components
# Analytics/logging
rg \"track|analytics|logEvent\" src appsetup-antd-upgrade, setup-shadcn-install, setup-shadcn-mcp, setup-legacy-parking, build-envtheme-bridge-tokens, theme-dark-mode-guardrailslayout-route-scaffold, layout-responsive-shell, layout-auth-discoveryforms-rhf-shadcn, forms-api-states, forms-select-date-uploaddata-tables-state, data-table-tanstack, components-pagination, components-result-emptyoverlay-alerts-toasts, overlay-toast-consolecomponents-tabs-steps, components-tree-cascader, components-upload, components-pagination, components-result-emptycontent-icons-typographycss-legacy-inventory, css-asset-hygiene, assets-images, fonts-setupa11y-responsive-checks, a11y-motion-contrast, responsive-touch, rtl-l10nperf-bundle-guardtest-visual-a11y, test-e2e-visualgotchas-coexistence, gotchas-ux-fallbacks, gotchas-scroll-stateanalytics-observabilityrules/), starting with setup, CSS cleanup, theming, then layout/forms/data/overlays.components.json and use npx shadcn@latest for additions.