Icon Buttons

Usage and anatomy

IconButton is the icon-only counterpart to Button. Use <IconButton.Root /> as the interactive element and <IconButton.Icon /> for its icon. Every icon button should have an accessible aria-label.

import * as IconButton from "@acme/ui/icon-button"
import { Search } from "lucide-react"
<IconButton.Root aria-label="Search">
<IconButton.Icon>
<Search />
</IconButton.Icon>
</IconButton.Root>
  • Use IconButton for compact icon-only actions; use Button when visible text improves clarity.
  • Set loading to disable interaction and render the spinner automatically.
  • Use asChild to apply the styles to a link while preserving link semantics.

Icon Button Variants

Icon Button Sizes

Icon Button with Icons

Icon Button Loading States

Icon Button Disabled States

Icon Button as Child

API reference

IconButton.Root
PropTypeDefault
variantprimary | secondary | tertiary | destructive | ghostprimary
sizesm | md | lg | xl | xxlmd
loadingbooleanfalse
disabledbooleanfalse
asChildbooleanfalse

IconButton.Root also accepts native button props. IconButton.Icon inherits the root size and loading state. IconButton requires an accessible name, typically provided with aria-label.

PlumeUI - Build beautiful React applications faster