Bento Grid

Responsive masonry-style grid with staggered scroll-reveal, pointer-follow spotlight, hover lift and shadows, optional spin borders, and spring micro-interactions per cell.

UniqueUI CLI

npx uniqueui add bento-grid

shadcn CLI

npx shadcn@latest add https://uniqueui.com/r/bento-grid.json -y

shadcn path expects @/lib/utils (run shadcn init first). Same source file is installed to components/ui/.

Features

Variant 1 of 4
import { BentoGrid, BentoCard } from "@/components/ui/bento-grid";
import { Sparkles, Zap, Shield, Globe } from "lucide-react";

export default function Example() {
  return (
    <div className="p-8 w-full">
      <BentoGrid>
        <BentoCard
          icon={<Sparkles className="w-5 h-5" />}
          title="Beautiful animations"
          description="Every interaction is crafted with spring-physics Motion.dev animations."
          cta="Explore components"
          className="col-span-2"
          spinBorder
          spinBorderColors={["#E2CBFF", "#393BB2"]}
        />
        <BentoCard
          icon={<Zap className="w-5 h-5" />}
          title="Lightning fast"
          description="Copy-paste components with zero runtime overhead."
          spinBorder
          spinBorderColors={["#a3e635", "#065f46"]}
        />
        <BentoCard
          icon={<Shield className="w-5 h-5" />}
          title="Type-safe props"
          description="Fully typed with TypeScript for confidence at scale."
          spinBorder
          spinBorderColors={["#67e8f9", "#1e3a5f"]}
        />
        <BentoCard
          icon={<Globe className="w-5 h-5" />}
          title="Zero lock-in"
          description="You own the code. No external runtime dependency."
          cta="Get started"
          className="col-span-2"
          spinBorder
          spinBorderColors={["#fda4af", "#9f1239"]}
        />
      </BentoGrid>
    </div>
  );
}

Showcase

Variant 2 of 4

Magnetic pull

Spring-physics cursor attraction.

Spotlight effect

Radial light that follows your mouse.

import { BentoGrid, BentoCard } from "@/components/ui/bento-grid";

export default function Example() {
  return (
    <div className="p-8 w-full">
      <BentoGrid>
        <BentoCard
          title="Aurora vibes"
          description="Layered animated gradients that feel alive."
          background={
            <div className="absolute inset-0 bg-gradient-to-br from-violet-700/30 via-fuchsia-600/15 to-cyan-600/20 animate-pulse" />
          }
          cta="View component"
          className="col-span-2"
        />
        <BentoCard
          title="Magnetic pull"
          description="Spring-physics cursor attraction."
          background={
            <div className="absolute inset-0 bg-gradient-to-br from-rose-700/25 to-orange-600/20" />
          }
        />
        <BentoCard
          title="Spotlight effect"
          description="Radial light that follows your mouse."
          background={
            <div className="absolute inset-0 bg-gradient-to-br from-sky-700/25 to-indigo-700/20" />
          }
        />
        <BentoCard
          title="Meteor storm"
          description="Shooting star particles raining through cards."
          background={
            <div className="absolute inset-0 bg-gradient-to-br from-emerald-700/25 to-teal-600/20" />
          }
          cta="Try it"
          className="col-span-2"
        />
      </BentoGrid>
    </div>
  );
}

Stats

Variant 3 of 4
24
24

Components

Production-ready animated components

0
0

Zero dependencies

No UniqueUI runtime in your bundle

~3s

Install time

Seconds from CLI to working component

Tailwind compatible

v3 and v4 supported

import { BentoGrid, BentoCard } from "@/components/ui/bento-grid";

export default function Example() {
  return (
    <div className="p-8 w-full">
      <BentoGrid className="auto-rows-[160px]">
        <BentoCard
          title="Components"
          description="Production-ready animated components"
          background={
            <div className="absolute top-4 right-4 text-6xl font-black text-white/[0.06] select-none">24</div>
          }
          icon={<span className="text-2xl font-black text-violet-400">24</span>}
        />
        <BentoCard
          title="Zero dependencies"
          description="No UniqueUI runtime in your bundle"
          background={
            <div className="absolute top-4 right-4 text-6xl font-black text-white/[0.06] select-none">0</div>
          }
          icon={<span className="text-2xl font-black text-emerald-400">0</span>}
        />
        <BentoCard
          title="Install time"
          description="Seconds from CLI to working component"
          icon={<span className="text-2xl font-black text-sky-400">~3s</span>}
        />
        <BentoCard
          title="MIT License"
          description="Open source forever. Fork it, extend it, ship it."
          cta="View on GitHub"
          className="col-span-2"
        />
        <BentoCard
          title="Tailwind compatible"
          description="v3 and v4 supported"
          icon={<span className="text-2xl font-black text-cyan-400"></span>}
        />
      </BentoGrid>
    </div>
  );
}

Team

Variant 4 of 4
AK

Alex Kim

Lead Engineer

Motion
SC

Sara Chen

Design Systems

Tailwind
JL

Jordan Lee

DX Engineer

CLI
MP

Maya Patel

Animations Lead

Motion.dev
RW

Ryan Wu

Accessibility

ARIA
PS

Priya Shah

TypeScript Infra

TS 5.x
import { BentoGrid, BentoCard } from "@/components/ui/bento-grid";

const members = [
  { name: "Alex Kim",   role: "Lead Engineer",    tag: "Motion",     color: "#a855f7" },
  { name: "Sara Chen",  role: "Design Systems",   tag: "Tailwind",   color: "#6366f1" },
  { name: "Jordan Lee", role: "DX Engineer",      tag: "CLI",        color: "#ec4899" },
  { name: "Maya Patel", role: "Animations Lead",  tag: "Motion.dev", color: "#10b981" },
  { name: "Ryan Wu",    role: "Accessibility",    tag: "ARIA",       color: "#f59e0b" },
  { name: "Priya Shah", role: "TypeScript Infra", tag: "TS 5.x",    color: "#3b82f6" },
];

export default function Example() {
  return (
    <div className="p-8 w-full">
      <BentoGrid className="auto-rows-[180px]">
        {members.map((m) => (
          <BentoCard
            key={m.name}
            title={m.name}
            description={m.role}
            background={
              <div
                className="absolute bottom-0 right-0 w-24 h-24 rounded-tl-full opacity-10"
                style={{ backgroundColor: m.color }}
              />
            }
            icon={
              <div
                className="w-8 h-8 rounded-full flex items-center justify-center text-xs font-bold text-white"
                style={{ backgroundColor: m.color + "33", border: `1.5px solid ${m.color}66` }}
              >
                {m.name.split(" ").map((n) => n[0]).join("")}
              </div>
            }
            cta={m.tag}
          />
        ))}
      </BentoGrid>
    </div>
  );
}

Props

PropTypeDescription
titlestringHeadline text displayed at the bottom of the card.
descriptionstringSupporting body text shown beneath the title.
iconReact.ReactNodeIcon element rendered inside a pill at the top of the card.
backgroundReact.ReactNodeOptional decorative layer (image, gradient, SVG) rendered behind the content.
ctastringCall-to-action label that slides up into view on hover.
hrefstringWhen supplied the card renders as an anchor element.
classNamestringGrid span and sizing classes forwarded to the cell wrapper, e.g. col-span-2 or row-span-2.
spinBorderbooleanEnable the spinning conic-gradient border effect (same technique as the hero button). Replaces the static border.
spinBorderColors[string, string]Two hex/CSS color values for the conic gradient. Defaults to ["#E2CBFF", "#393BB2"] (purple–indigo).
interactiveSpotlightbooleanWhen true (default), a violet radial highlight follows the pointer inside the card on fine-pointer hover.
theme"light" | "dark"Surface and text colors; injected by BentoGrid on each child.