Navbar

Responsive navigation bar with brand, content, and actions areas.

Usage

<%= ui.navbar do %>
  <%= ui.navbar_brand do %>
    <%= link_to "Logo", root_path %>
  <% end %>
  <%= ui.navbar_main do %>
    <%= ui.navbar_content do %>
      <%= ui.breadcrumbs %>
    <% end %>
    <%= ui.navbar_actions do %>
      <%= ui.btn "Action", url: "#" %>
    <% end %>
  <% end %>
<% end %>
Props
PropTypeDefaultDescription
stickyBooleantrueWhether the navbar sticks to the top of the viewport.

Also accepts any HTML attributes via **options (e.g., id:, data:, aria:). class: is also supported for custom styling.

SubcomponentsUse subcomponents below or any HTML.
NameHelperDescription
navbar_brandui.navbar_brandBrand/logo area on the left side.
navbar_mainui.navbar_mainMain wrapper for content and actions. Required for proper grid alignment.
navbar_contentui.navbar_contentContent area (breadcrumbs, search, etc.).
navbar_actionsui.navbar_actionsActions area on the right (buttons, user menu, etc.).

Examples

Basic

<%= ui.navbar do %>
  <%= ui.navbar_brand do %>
    <%= link_to ui.icon("cube", size: 6), "#" %>
    <span class="font-semibold">App Name</span>
  <% end %>
  <%= ui.navbar_main do %>
    <%= ui.navbar_actions do %>
      <%= ui.btn "Sign In", url: "#", size: :sm, variant: :outline %>
    <% end %>
  <% end %>
<% end %>

With breadcrumbs

<%= ui.navbar do %>
  <%= ui.navbar_brand do %>
    <%= link_to ui.icon("cube", size: 6), "#" %>
  <% end %>
  <%= ui.navbar_main do %>
    <%= ui.navbar_content class: "hidden md:flex" do %>
      <nav class="flex items-center gap-2 text-sm text-muted-foreground">
        <a href="#">Home</a>
        <span>/</span>
        <a href="#">Products</a>
        <span>/</span>
        <span class="text-gray-900">Details</span>
      </nav>
    <% end %>
    <%= ui.navbar_actions do %>
      <%= ui.btn "Settings", url: "#", size: :sm, variant: :ghost %>
    <% end %>
  <% end %>
<% end %>

With user menu

<%= ui.navbar do %>
  <%= ui.navbar_brand do %>
    <%= link_to "Brand", "#", class: "font-bold text-lg" %>
  <% end %>
  <%= ui.navbar_main do %>
    <%= ui.navbar_actions do %>
      <%= ui.dropdown do %>
        <%= ui.dropdown_trigger do %>
          <%= ui.avatar size: 8 %>
        <% end %>
        <%= ui.dropdown_menu do %>
          <%= ui.dropdown_link "Profile", url: "#" %>
          <%= ui.dropdown_link "Settings", url: "#" %>
          <%= ui.dropdown_divider %>
          <%= ui.dropdown_button "Sign Out", url: "#" %>
        <% end %>
      <% end %>
    <% end %>
  <% end %>
<% end %>

Non-sticky

<%= ui.navbar sticky: false do %>
  <%= ui.navbar_brand do %>
    <%= link_to "Logo", "#", class: "font-bold" %>
  <% end %>
  <%= ui.navbar_main do %>
    <%= ui.navbar_actions do %>
      <%= ui.btn "Contact", url: "#", size: :sm %>
    <% end %>
  <% end %>
<% end %>

With mobile menu toggle

<%= ui.navbar do %>
  <%= ui.navbar_brand do %>
    <%= button_tag ui.icon("bars-2", size: 6), class: "md:hidden" %>
    <%= link_to "App", "#", class: "font-bold" %>
  <% end %>
  <%= ui.navbar_main do %>
    <%= ui.navbar_actions do %>
      <%= ui.btn "Menu", url: "#", size: :sm, class: "md:hidden" %>
      <div class="hidden md:flex gap-2">
        <%= ui.btn "Features", url: "#", size: :sm, variant: :ghost %>
        <%= ui.btn "Pricing", url: "#", size: :sm, variant: :ghost %>
        <%= ui.btn "Sign In", url: "#", size: :sm, variant: :outline %>
      </div>
    <% end %>
  <% end %>
<% end %>