Component reference
Footer
Grouped product links and legal information.
Preview
Live previewOptional six-digit hex. Clear to restore the preset. Check contrast with your brand color.
Changes apply to this preview only.
Width adapts to the available space
"use client";
import { Footer, Button, Link } from "@pimolu/react";
const hugeColumns = [
{
title: "Product",
links: [
{ label: "Components", href: "/docs" },
{ label: "Themes", href: "/docs" },
{ label: "Design tokens", href: "/docs" },
{ label: "Changelog", href: "/docs" },
],
},
{
title: "Resources",
links: [
{ label: "Documentation", href: "/docs" },
{ label: "Examples", href: "/docs" },
{ label: "GitHub", href: "https://github.com", external: true },
{ label: "Figma kit", href: "https://figma.com", external: true },
],
},
{
title: "Company",
links: [
{ label: "About", href: "/docs" },
{ label: "Careers", href: "/docs" },
{ label: "Contact", href: "/docs" },
],
},
];
export function DemoExample() {
return (
<Footer
brand={<span
className="flex items-center gap-3 no-underline text-inherit"
>
<span
className="grid place-items-center size-9 rounded-md bg-primary text-[var(--pimolu-primary-foreground)]"
>P</span>
<span>
<strong className="block">Pimolu UI</strong>
<span className="text-xs text-muted">Design system</span>
</span>
</span>}
description={(
"One design system shared by the web, the playground and native " +
"applications. Built on tokens, plain CSS and accessible React " +
"primitives."
)}
actions={<Button
size="sm"
appearance="outline"
>
Star on GitHub
</Button>}
columns={hugeColumns}
copyright="© 2026 Pimolu UI. MIT licensed."
bottom={<>
<Link href="/docs" variant="muted" underline="hover">Privacy</Link>
<Link href="/docs" variant="muted" underline="hover">Terms</Link>
<Link href="/docs" variant="muted" underline="hover">Status</Link>
</>}
/>
);
}More examples
Different configurations and compositions using the real Pimolu API. Each preview runs independently and follows the site appearance.
Surface treatments
Choose a surface, blend into the page, or use a floating frame. The transparent appearance avoids side edges caused by an inset background.
Minimal footer
Only the columns are required; the brand, the actions and the bottom row are optional.
Copyright and legal row
The bottom row separates the copyright from the legal links and wraps when the container is narrow.
Usage
Choose surface (default), transparent for a seamless page, or floating for a framed section. bordered controls the top divider; floating retains its frame.
Use actual destinations and keep secondary navigation distinct from primary tasks.
API reference
Generated from the public TypeScript declarations. Native HTML attributes are inherited where the component extends them; this reference includes Pimolu props and selected common native attributes.
PimoluFooterLink
Type source| Name | Type | Default | Description |
|---|---|---|---|
labelRequired | ReactNode | — | Visible link label. |
hrefRequired | string | — | Link destination. |
external | boolean | undefined | false | Opens the link in a new tab with rel="noopener noreferrer". Defaults to false. |
labelRequiredReactNodeNo default extracted.
Visible link label.
hrefRequiredstringNo default extracted.
Link destination.
externalboolean | undefinedDefault: false
Opens the link in a new tab with rel="noopener noreferrer". Defaults to false.
PimoluFooterColumn
Type source| Name | Type | Default | Description |
|---|---|---|---|
titleRequired | ReactNode | — | Title of the column; it also names the navigation landmark. |
linksRequired | PimoluFooterLink[] | — | Public Pimolu prop; see the source declaration for details. |
titleRequiredReactNodeNo default extracted.
Title of the column; it also names the navigation landmark.
linksRequiredPimoluFooterLink[]No default extracted.
Public Pimolu prop; see the source declaration for details.
PimoluFooterProps
Type source| Name | Type | Default | Description |
|---|---|---|---|
appearance | "surface" | "transparent" | "floating" | undefined | surface; transparent inherits the page background | Surface treatment. Defaults to surface; transparent inherits the page background. |
bordered | boolean | undefined | true | Draw the top divider. Defaults to true. |
brand | ReactNode | — | Logo, wordmark or any brand node. |
description | ReactNode | — | Short description displayed under the brand. |
columnsRequired | PimoluFooterColumn[] | — | Navigation columns, each rendered as a named landmark. |
actions | ReactNode | — | Buttons or links displayed with the brand block. |
copyright | ReactNode | — | Copyright line displayed in the bottom row. |
bottom | ReactNode | — | Legal links or other content displayed opposite the copyright. |
className | string | undefined | — | Public Pimolu prop; see the source declaration for details. |
defaultValue | string | number | readonly string[] | undefined | — | Standard React/HTML attribute. |
style | CSSProperties | undefined | — | Standard React/HTML attribute. |
aria-label | string | undefined | — | Defines a string value that labels the current element. |
children | ReactNode | — | Standard React/HTML attribute. |
onChange | ChangeEventHandler<HTMLElement, Element> | undefined | — | Standard React/HTML attribute. |
onClick | MouseEventHandler<HTMLElement> | undefined | — | Standard React/HTML attribute. |
appearance"surface" | "transparent" | "floating" | undefinedDefault: surface; transparent inherits the page background
Surface treatment. Defaults to surface; transparent inherits the page background.
borderedboolean | undefinedDefault: true
Draw the top divider. Defaults to true.
brandReactNodeNo default extracted.
Logo, wordmark or any brand node.
descriptionReactNodeNo default extracted.
Short description displayed under the brand.
columnsRequiredPimoluFooterColumn[]No default extracted.
Navigation columns, each rendered as a named landmark.
actionsReactNodeNo default extracted.
Buttons or links displayed with the brand block.
copyrightReactNodeNo default extracted.
Copyright line displayed in the bottom row.
bottomReactNodeNo default extracted.
Legal links or other content displayed opposite the copyright.
classNamestring | undefinedNo default extracted.
Public Pimolu prop; see the source declaration for details.
defaultValuestring | number | readonly string[] | undefinedNo default extracted.
Standard React/HTML attribute.
styleCSSProperties | undefinedNo default extracted.
Standard React/HTML attribute.
aria-labelstring | undefinedNo default extracted.
Defines a string value that labels the current element.
childrenReactNodeNo default extracted.
Standard React/HTML attribute.
onChangeChangeEventHandler<HTMLElement, Element> | undefinedNo default extracted.
Standard React/HTML attribute.
onClickMouseEventHandler<HTMLElement> | undefinedNo default extracted.
Standard React/HTML attribute.
Accessibility
- Label multiple navigation regions and keep link groups in a coherent reading order.