shadcn-ui/ui · error · Error

useSidebar must be used within a SidebarProvider.

Error message

useSidebar must be used within a SidebarProvider.

What it means

Same guard as the bases/radix sidebar: useSidebar reads SidebarContext, populated only by <SidebarProvider>. This is the new-york-v4 legacy copy; any sidebar sub-component rendered outside <SidebarProvider> throws.

Source

Thrown at apps/v4/registry/new-york-v4/ui/sidebar.tsx:50

const SIDEBAR_WIDTH_ICON = "3rem"
const SIDEBAR_KEYBOARD_SHORTCUT = "b"

type SidebarContextProps = {
  state: "expanded" | "collapsed"
  open: boolean
  setOpen: (open: boolean) => void
  openMobile: boolean
  setOpenMobile: (open: boolean) => void
  isMobile: boolean
  toggleSidebar: () => void
}

const SidebarContext = React.createContext<SidebarContextProps | null>(null)

function useSidebar() {
  const context = React.useContext(SidebarContext)
  if (!context) {
    throw new Error("useSidebar must be used within a SidebarProvider.")
  }

  return context
}

function SidebarProvider({
  defaultOpen = true,
  open: openProp,
  onOpenChange: setOpenProp,
  className,
  style,
  children,
  ...props
}: React.ComponentProps<"div"> & {
  defaultOpen?: boolean
  open?: boolean
  onOpenChange?: (open: boolean) => void
}) {

View on GitHub (pinned to efac598707)

Solutions

  1. Wrap the layout in <SidebarProvider>.
  2. Ensure <SidebarProvider> wraps both <Sidebar> and <SidebarInset>.
  3. Move portal sidebar content back under the provider.

Example fix

// before
<div>
  <Sidebar />
</div>

// after
<SidebarProvider>
  <Sidebar />
  <SidebarInset />
</SidebarProvider>
Defensive patterns

Strategy: validation

Validate before calling

function useOptionalSidebar() {
  return React.useContext(SidebarContext)
}
const sidebar = useOptionalSidebar()
if (!sidebar) return null

Type guard

function useHasSidebarProvider(): boolean {
  return React.useContext(SidebarContext) !== null
}

Prevention

When it happens

Trigger: Rendering new-york-v4 <Sidebar>, <SidebarTrigger>, or <SidebarInset> outside of <SidebarProvider>; portal/modal sidebar content outside the provider subtree.

Common situations: Layout refactor moving SidebarProvider off a route; copy-pasting SidebarTrigger into a header above the provider.

Related errors


AI-assisted analysis of shadcn-ui/ui@efac598707 (2026-08-12). Data as JSON: /api/errors/00069dcdc439dc60. Report an issue: GitHub.