Accordion

A grouping of related disclosures that supports both single and multiple expanded items.

const items = /* ... */;

<Accordion className="max-w-2xl">
  {items.map((item) => (
    <Disclosure id={item.id} key={item.id}>
      <DisclosureTrigger>{item.question}</DisclosureTrigger>
      <DisclosurePanel>{item.answer}</DisclosurePanel>
    </Disclosure>
  ))}
</Accordion>

Installation

npx shadcn@latest add @dotui/accordion

Anatomy

import { Accordion } from '@/components/ui/accordion'
import {
  Disclosure,
  DisclosurePanel,
  DisclosureTrigger,
} from '@/components/ui/disclosure'
<Accordion>
  <Disclosure>
    <DisclosureTrigger>Disclosure Heading</DisclosureTrigger>
    <DisclosurePanel>Disclosure Panel</DisclosurePanel>
  </Disclosure>
  <Disclosure>
    <DisclosureTrigger>Disclosure Heading</DisclosureTrigger>
    <DisclosurePanel>Disclosure Panel</DisclosurePanel>
  </Disclosure>
</Accordion>

Open state

Expanded items are tracked by each Disclosure's id. Give the group defaultExpandedKeys for uncontrolled state, or expandedKeys with onExpandedChange to control it — both are a Set of ids. Pass allowsMultipleExpanded to let the set hold more than one id at a time.

<Accordion defaultExpandedKeys={['getting-started']}>
  <Disclosure id="getting-started">
    <DisclosureTrigger>How do I get started?</DisclosureTrigger>
    <DisclosurePanel>…</DisclosurePanel>
  </Disclosure>
</Accordion>

Examples

FAQ

Product Features

Settings Panel

API Reference

Accordion

A DisclosureGroup is a grouping of related disclosures, sometimes called an accordion. It supports both single and multiple expanded items.

PropType
boolean
ReactNode | function
Iterable<Key>
Iterable<Key>
boolean

Last updated on 7/9/2026