Site footer
BlockLink columns, social links and legal text.
pnpm dlx shadcn@latest add https://caliperui.site/r/site-footer.jsonWhen to use #
Use it for
- The bottom of a public website.
Skip it when
- Application screens.
Installation #
terminal
pnpm dlx shadcn@latest add https://caliperui.site/r/site-footer.json
Adds its 2 files to components/ui/, each with its own stylesheet, and installs their packages. No account needed. The first part also adds Caliper UI’s tokens; import them once as in Installation.
Usage #
This is the code behind the preview above.
example.tsx
import { AtSign, MessageCircle, Rss } from "lucide-react" import { SiteFooter } from "@/components/ui/site-footer" function Brand() { return ( <a href="#top" className="flex items-center gap-2 rounded-control text-sm font-semibold tracking-tight no-underline outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring"> <span aria-hidden="true" className="grid size-7 place-items-center rounded-surface bg-foreground text-xs text-background">R</span> Caliper UI </a> ); } export function SiteFooterDemo() { return ( <SiteFooter brand={<Brand />} description="A library of interface parts that you install, read and change." columns={[ { title: "Product", links: [{ label: "Components", href: "#" }, { label: "Blocks", href: "#" }, { label: "Changelog", href: "#" }] }, { title: "Resources", links: [{ label: "Docs", href: "#" }, { label: "Guides", href: "#" }, { label: "Status", href: "#" }] }, { title: "Company", links: [{ label: "About", href: "#" }, { label: "Contact", href: "#" }, { label: "Careers", href: "#" }] }, { title: "Legal", links: [{ label: "Terms", href: "#" }, { label: "Privacy", href: "#" }, { label: "License", href: "#" }] }, ]} social={[ { label: "Community chat", href: "#", icon: <MessageCircle aria-hidden="true" /> }, { label: "Email us", href: "#", icon: <AtSign aria-hidden="true" /> }, { label: "RSS feed", href: "#", icon: <Rss aria-hidden="true" /> }, ]} legal={<span>© 2026 Caliper UI. All rights reserved.</span>} /> ); }
API reference #
Accessibility #
It is built on native elements and keeps aria-label in step with state.
No custom key handling; Tab and the native activation keys do the work.
Motion #
It declares no animation in its component source. Any transition comes from its stylesheet, which uses the duration tokens that collapse to instant under prefers-reduced-motion.