Skip to content
goodtabs UI
BrowseBrowse components

Footer minimal

A one row footer: a legal line on the left and a few small links on the right.

npx shadcn@latest add https://ui.goodtabs.co/r/footer-minimal.json

With the @goodtabs namespace in components.json: npx shadcn@latest add @goodtabs/footer-minimal

Copyright on the left, three links on the right.

Legal only

Made by hand in Lisbon. 2026 Northwind.

A single line with no links.

Usage

import { FooterMinimal } from "@/components/footer-minimal"

<FooterMinimal legal="2026 Northwind Ltd." links={[{ label: "Privacy", href: "/privacy" }]} />

Props

PropTypeDefaultDescription
legalstringCopyright or one short line.
links{ label: string; href: string }[]A few small links, on the right.

Source

footer-minimal/footer-minimal.tsx
import * as React from "react";
import { cn } from "@/lib/utils";

export type FooterMinimalLink = { label: string; href: string };

type FooterMinimalProps = Omit<React.ComponentProps<"footer">, "children"> & {
  /** Copyright or one short line, on the left. */
  legal: string;
  /** A few small links, on the right. */
  links?: FooterMinimalLink[];
};

/** A one row footer: a legal line on the left, a few links on the right. Wraps on a phone. */
export function FooterMinimal({ legal, links = [], className, ...props }: FooterMinimalProps) {
  return (
    <footer
      data-slot="footer-minimal"
      className={cn("w-full border-t text-xs text-muted-foreground", className)}
      {...props}
    >
      <div className="mx-auto flex max-w-6xl flex-col gap-3 px-6 py-5 sm:flex-row sm:items-center sm:justify-between md:px-8">
        <p className="m-0">{legal}</p>
        {links.length > 0 && (
          <nav aria-label="Footer">
            <ul className="m-0 flex list-none flex-wrap items-center gap-x-4 gap-y-2 p-0">
              {links.map((link) => (
                <li key={`${link.href}-${link.label}`}>
                  <a
                    href={link.href}
                    className="rounded-sm transition-colors duration-100 ease-out outline-none hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring"
                  >
                    {link.label}
                  </a>
                </li>
              ))}
            </ul>
          </nav>
        )}
      </div>
    </footer>
  );
}

For AI agents

Hand your agent this page, the markdown at /components/footer-minimal/prompt.md, or the Copy AI prompt button above.

When to use

  • Apps and docs where the footer is only a formality
  • Under a page that already has a closing CTA

When not to use

  • When you need more than four links; use footer-columns

Agent notes

  • Server component with plain anchors
  • Stacks on a phone, one row from sm