shadcn.io is an independent project built on shadcn/ui
A menu button opens a panel from the left titled Menu. It has a short description, one line about navigation, and Close.
Use it for navigation on a small screen. On a wide layout, keep those links in a Sidebar. In React, Base UI closes it when the panel is swiped away.
Installation
Anatomy

Usage
<Drawer swipeDirection="left">
<DrawerTrigger
render={
<Button aria-label="Open menu" size="icon-md" variant="outline" />
}
>
<MenuIcon aria-hidden="true" />
</DrawerTrigger>
<DrawerContent>
<DrawerHeader>
<DrawerTitle>Menu</DrawerTitle>
<DrawerDescription>
This drawer slides in from the left side.
</DrawerDescription>
</DrawerHeader>
<div className="p-4">
<p className="text-muted-foreground text-sm">
Left-side drawers are commonly used for navigation menus and sidebars.
</p>
</div>
<DrawerFooter>
<DrawerClose render={<Button variant="outline" />}>Close</DrawerClose>
</DrawerFooter>
</DrawerContent>
</Drawer>FAQ
How does this drawer open from the left?
swipeDirection="left" on Drawer puts it on the left edge. The prop names the swipe that closes the drawer, so left docks it on the left; leave it out for a bottom drawer.
How is the menu button labeled?
An outline icon button opens the drawer. Its aria-label, Open menu, is the accessible name; the icon is aria-hidden.
The Button goes in the render prop of DrawerTrigger.
What's inside the panel?
DrawerHeader with the title Menu and the description This drawer slides in from the left side, one paragraph, and DrawerFooter with a Close button.
How does Close work?
It's a DrawerClose, so it dismisses the drawer. Swiping it back toward its edge, Escape and a click on the overlay all close it, and focus goes back to the trigger.
The Button goes in the render prop of DrawerClose.
API Reference
Drawer
Sets swipeDirection="left". The rest is on the Drawer page.
Button
Sets aria-label="Open menu", size="icon-md" and variant="outline". The rest is on the Button page.





