Component guideEditable source

Pagination

Links for moving through a paginated collection.

Original component docs
On this page4 sectionsBack to top

Use Pagination when a collection has addressable pages. It styles links but does not fetch data, calculate page counts, or manage the current page. For client-side table state, see Data Table.

Live preview
Loading preview...

#Installation

Complete the base setup. For manual installation:

npx shadcn@latest add https://neobrutal-ui.andongmin.com/r/pagination.json

#Usage

import {
  Pagination,
  PaginationContent,
  PaginationItem,
  PaginationLink,
  PaginationNext,
} from "@/components/ui/pagination";

export default function ArticlePages() {
  return (
    <Pagination aria-label="Article pages">
      <PaginationContent>
        <PaginationItem>
          <PaginationLink href="?page=1" isActive>
            1
          </PaginationLink>
        </PaginationItem>
        <PaginationItem>
          <PaginationLink href="?page=2">2</PaginationLink>
        </PaginationItem>
        <PaginationItem>
          <PaginationNext href="?page=2" />
        </PaginationItem>
      </PaginationContent>
    </Pagination>
  );
}

#API reference

Prop / partPurposeDefault
PaginationNamed navigation landmarkLabelled pagination
PaginationLink.hrefDestination URLUnset
PaginationLink.isActiveCurrent-page state and aria-currentfalse
PaginationLink.sizeButton-style size: default, sm, lg, or iconicon
PaginationPrevious.text / PaginationNext.textDirectional labelPrevious / Next
PaginationEllipsisOmitted pagesNon-interactive

#Accessibility

Provide actual destinations and mark exactly one current page. Anchors have no native disabled state: omit unavailable Previous/Next links or render non-interactive text instead of keeping a clickable link styled as disabled. Use a specific collection label when a page has multiple pagination controls.