Application frame: sectioned sidebar, sticky header and scrolling main; the sidebar becomes a mobile drawer with a built-in burger button.

npx slipstream-ui@latest add app-shell
Dashboard shell (interactive)
Studio

Dashboard

Current route: #dashboard

Props

PropTypeDefaultDescription
sidebarReactNode—Desktop rail content; also rendered inside the mobile drawer (AppShell).
headerReactNode—Sticky top bar content (AppShell).
hideMobileMenubooleanfalseHide the built-in burger when the header owns navigation (AppShell).
sidebarWidthstring'w-64'Tailwind width class for the desktop rail (AppShell).
sections{ title?: string; items: SidebarItem[] }[]requiredGrouped navigation items (Sidebar).
activeHrefstring—Current route — matching items get aria-current="page" (Sidebar).
linkComponentReact.ElementType'a'Router link component (react-router Link, Next Link) (Sidebar).
heading / footerReactNode—Brand slot at the top and utility slot at the bottom (Sidebar).

Accessibility

  • Sidebar renders a named nav landmark; the active item carries aria-current="page".
  • On small screens the rail becomes a focus-trapped Drawer with Escape and focus restoration.
  • Pass your router’s Link so navigation stays client-side.

Browser support

BrowserTested versions
Chrome111+ (Mar 2023)
Edge111+ (Mar 2023)
Firefox121+ (Dec 2023)
Safari17.2+ — macOS & iOS (Dec 2023)

Slipstream components rely only on CSS custom properties, Flexbox/Grid, and ARIA — the everyday baseline of the last two years of evergreen releases. Anything newer is progressive enhancement: unsupported browsers keep full functionality with static behavior instead of animations.

Was this page helpful?