ToroUI

Menubar

A horizontal menu bar with dropdown menus, modeled after desktop application menu bars.


A composable menu bar that renders a horizontal row of dropdown menus. Built on top of Base UI's Menubar and Menu primitives and internally reuses DropdownMenu sub-components for menu content, items, and submenus.

import {
  Menubar,
  MenubarMenu,
  MenubarTrigger,
  MenubarContent,
  MenubarItem,
  MenubarSeparator,
} from "@/components/ui/menubar"

export default function MenubarDemo() {
  return (
    <Menubar>
      <MenubarMenu>
        <MenubarTrigger>File</MenubarTrigger>
        <MenubarContent>
          <MenubarItem>New Tab</MenubarItem>
          <MenubarItem>New Window</MenubarItem>
          <MenubarSeparator />
          <MenubarItem>Print</MenubarItem>
        </MenubarContent>
      </MenubarMenu>
      <MenubarMenu>
        <MenubarTrigger>Edit</MenubarTrigger>
        <MenubarContent>
          <MenubarItem>Undo</MenubarItem>
          <MenubarItem>Redo</MenubarItem>
        </MenubarContent>
      </MenubarMenu>
    </Menubar>
  )
}

Anatomy

import {
  Menubar,
  MenubarMenu,
  MenubarTrigger,
  MenubarContent,
  MenubarItem,
  MenubarSeparator,
  MenubarLabel,
  MenubarShortcut,
  MenubarGroup,
  MenubarPortal,
  MenubarSub,
  MenubarSubTrigger,
  MenubarSubContent,
  MenubarCheckboxItem,
  MenubarRadioGroup,
  MenubarRadioItem,
} from "@/components/ui/menubar"
<Menubar>
  <MenubarMenu>
    <MenubarTrigger>File</MenubarTrigger>
    <MenubarContent>
      <MenubarItem>New Tab</MenubarItem>
      <MenubarItem>New Window</MenubarItem>
      <MenubarSeparator />
      <MenubarItem>Exit</MenubarItem>
    </MenubarContent>
  </MenubarMenu>
</Menubar>

Examples

Basic menu bar

<Menubar>
  <MenubarMenu>
    <MenubarTrigger>File</MenubarTrigger>
    <MenubarContent>
      <MenubarItem>
        New Tab <MenubarShortcut>Ctrl+T</MenubarShortcut>
      </MenubarItem>
      <MenubarItem>
        New Window <MenubarShortcut>Ctrl+N</MenubarShortcut>
      </MenubarItem>
      <MenubarSeparator />
      <MenubarItem>Exit</MenubarItem>
    </MenubarContent>
  </MenubarMenu>
  <MenubarMenu>
    <MenubarTrigger>Edit</MenubarTrigger>
    <MenubarContent>
      <MenubarItem>Undo</MenubarItem>
      <MenubarItem>Redo</MenubarItem>
    </MenubarContent>
  </MenubarMenu>
</Menubar>

With submenus

<Menubar>
  <MenubarMenu>
    <MenubarTrigger>View</MenubarTrigger>
    <MenubarContent>
      <MenubarItem>Zoom In</MenubarItem>
      <MenubarItem>Zoom Out</MenubarItem>
      <MenubarSeparator />
      <MenubarSub>
        <MenubarSubTrigger>Layout</MenubarSubTrigger>
        <MenubarSubContent>
          <MenubarItem>Sidebar</MenubarItem>
          <MenubarItem>Panel</MenubarItem>
        </MenubarSubContent>
      </MenubarSub>
    </MenubarContent>
  </MenubarMenu>
</Menubar>

With checkbox and radio items

<Menubar>
  <MenubarMenu>
    <MenubarTrigger>Options</MenubarTrigger>
    <MenubarContent>
      <MenubarLabel>Appearance</MenubarLabel>
      <MenubarCheckboxItem checked>Show Toolbar</MenubarCheckboxItem>
      <MenubarCheckboxItem>Show Statusbar</MenubarCheckboxItem>
      <MenubarSeparator />
      <MenubarLabel>Theme</MenubarLabel>
      <MenubarRadioGroup value="light">
        <MenubarRadioItem value="light">Light</MenubarRadioItem>
        <MenubarRadioItem value="dark">Dark</MenubarRadioItem>
        <MenubarRadioItem value="system">System</MenubarRadioItem>
      </MenubarRadioGroup>
    </MenubarContent>
  </MenubarMenu>
</Menubar>

API Reference

The root container. Renders a horizontal flex row with border and padding.

PropTypeDefault
classNamestring
childrenReactNode

Wraps a single menu within the menu bar. Delegates to DropdownMenu.

PropTypeDefault
childrenReactNode

The button that opens a menu. Styled as a compact text button that highlights on hover and when expanded.

PropTypeDefault
classNamestring
childrenReactNode

The dropdown panel that appears when a trigger is activated.

PropTypeDefaultDescription
alignstring"start"Alignment of the popup relative to the trigger.
alignOffsetnumber-4Offset from the aligned edge in pixels.
sideOffsetnumber8Distance from the trigger in pixels.
classNamestring
childrenReactNode

A single actionable item inside a menu.

PropTypeDefaultDescription
insetbooleanWhen true, adds left padding to align with items that have icons.
variant"default" | "destructive""default"Visual variant for the item.
classNamestring
childrenReactNode

A menu item with a checkbox indicator.

PropTypeDefaultDescription
checkedbooleanWhether the item is checked.
insetbooleanWhen true, adds left padding for alignment.
classNamestring
childrenReactNode

Groups radio items so only one can be selected at a time.

PropTypeDefault
valuestring
childrenReactNode

A menu item with a radio indicator.

PropTypeDefaultDescription
valuestringThe value of this radio item.
insetbooleanWhen true, adds left padding for alignment.
classNamestring
childrenReactNode

A non-interactive label for grouping items.

PropTypeDefaultDescription
insetbooleanWhen true, adds left padding for alignment.
classNamestring
childrenReactNode

A horizontal line separating groups of items.

PropTypeDefault
classNamestring

Displays a keyboard shortcut hint aligned to the right of a menu item.

PropTypeDefault
classNamestring
childrenReactNode

Groups related menu items together.

PropTypeDefault
childrenReactNode

Renders menu content into a portal.

PropTypeDefault
childrenReactNode

Wraps a submenu trigger and content pair.

PropTypeDefault
childrenReactNode

The item that opens a submenu. Renders a chevron to indicate nesting.

PropTypeDefaultDescription
insetbooleanWhen true, adds left padding for alignment.
classNamestring
childrenReactNode

The dropdown panel for a submenu.

PropTypeDefault
classNamestring
childrenReactNode