Prodular UI

Navigation menu

The top navigation of a marketing site or docs, with dropdown panels of links that animate between each other.

npx prodular-ui add navigation-menu

Marketing header

Panels with an icon, a title and one line per link. Hover Product, then move to Solutions.

Relay

Anatomy

<NavigationMenu>  <NavigationMenuList>    <NavigationMenuItem>      <NavigationMenuTrigger>Product</NavigationMenuTrigger>      <NavigationMenuContent>        <NavigationMenuLink href="/inbox">          <InboxIcon />          <NavigationMenuLinkText title="Shared inbox" description="Email, chat and forms in one queue." />        </NavigationMenuLink>      </NavigationMenuContent>    </NavigationMenuItem>    <NavigationMenuItem>      <NavigationMenuLink href="/pricing" className={navigationMenuTriggerStyle()}>Pricing</NavigationMenuLink>    </NavigationMenuItem>  </NavigationMenuList></NavigationMenu>

Guidance

Use it when

  • Use for the header of a marketing site, docs or a public app with a few top level sections.
  • Use NavigationMenuLinkText inside links to show a title and one line of description.

Avoid

  • In app navigation. Use Sidebar or Tabs.
  • More than five or six top level items. Group them into panels.

Rules for AI agents

Published in llms-full.txt, the registry and the MCP server, so coding agents follow them when they build with this component.

  • Every link must be a NavigationMenuLink with a real href. Pass render={<NextLink href="..." />} for client routing.
  • Top level links without a panel use className={navigationMenuTriggerStyle()} so they match the triggers.
  • Set active and aria-current="page" on the link for the current page.
  • Give each NavigationMenuContent list a width with sm:w-* so panels do not jump between sizes.
  • Keep descriptions to one short line.

API

NavigationMenu

PropTypeDefaultDescription
align"start" | "center" | "end""start"Alignment of the panel against the active trigger.
value / onValueChangestring | nullControls which panel is open.

NavigationMenuLink

PropTypeDefaultDescription
activebooleanfalseMarks the current page.

NavigationMenuLinkText

PropTypeDefaultDescription
title / descriptionReactNodeTitle and one line of copy inside a link.

Installation

The Prodular UI CLI adds the source to components/ui with everything it depends on. In a project that already uses shadcn/ui, the shadcn CLI installs it from the Prodular registry too. See Installation for the first setup.

npx prodular-ui add navigation-menu# or, with the registry in components.jsonnpx shadcn@latest add @prodular/navigation-menu