Get Started
Components
- Accordion
- Alert
- Alert Dialog
- Aspect Ratio
- Attachment
- Avatar
- Badge
- Breadcrumb
- Bubble
- Button
- Button Group
- Card
- Checkbox
- Collapsible
- Combobox
- Context Menu
- Date Picker (Lite)
- Dialog
- Direction
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Input OTP (Lite)
- Item
- Kbd
- Label
- Marker
- Menubar
- Message
- Native Select
- Navigation Menu
- Pagination
- Popover
- Progress
- Radio Group
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toast
- Toggle
- Toggle Group
- Tooltip
What changes when shadcn/ui components are rendered by Hono JSX instead of React.
The components keep upstream's markup, classes, data-slot attributes and props where Hono JSX allows. These are the differences that apply to every component; each component page lists its own under Notes.
Props
- Components accept
class, notclassName: Hono JSX rendersclass. - Base UI's
renderprop works on the server, for example<Button render={<a href="/docs" />}>Docs</Button>. Links rendered this way stay links (norole="button"). asChildis not supported, and refs are not forwarded.Buttonrenderstype="button"by default, like Base UI; passtype="submit"inside forms.
Rendering
- Everything is server-rendered. Client-side state attributes from Base UI (for example
data-focused) are not rendered, except where a client script keeps them up to date (Tabs). - Icons are inlined SVG from the preset's icon library, identical to what its React package renders. See Icons.
Native elements
- Dialog, Alert Dialog and Sheet are native
<dialog>elements opened with Invoker Commands. They need no JavaScript but require Chrome 135, Firefox 144 or Safari 26.2 or later, and have no controlledopenstate. Use<DialogTrigger render={<Button variant="outline" />}>as upstream does. - Accordion and Collapsible are native
<details>/<summary>elements: no JavaScript and no open/close animation.CollapsibleTriggermust be the first child ofCollapsibleand is styled withclassinstead ofrender. - Checkbox, Switch, Radio Group, Toggle and Toggle Group are native inputs inside upstream's styled elements. They work and submit with forms without JavaScript, and
id,name,valueandaria-*go to the input. - Popover uses the native
popoverattribute and CSS anchor positioning. It opens next to its trigger in Chrome 135, Firefox 147 and Safari 26.2 or later, and centered in older browsers. Near the edge of the viewport a popup flips to the other side but does not slide along the edge as Base UI does. - Select is a customizable native
<select>. It works and submits without JavaScript, and Chrome 135, Firefox 149 and Safari 27 or later show upstream's design; older browsers show a classic select styled like the trigger.
Components
Some upstream components are built on React libraries (react-day-picker, embla-carousel, recharts, cmdk, input-otp). They are not available yet, and some have lite alternatives instead. See Compatibility.