Glin UI
Blockbeta

Feature Grid

Icon-framed feature cards in three-up, bento, icon-list and alternating-row layouts.

Edit on GitHub

Why Glin

Everything a landing page needs

Six reasons to stop rebuilding the same section.

Fast by default

Server components, zero client JS for static sections.

Learn more

Accessible

Landmarks, focus rings and AA contrast built in.

Composable

Every block is built from the same primitives you already use.

Learn more

Measurable

Hooks for analytics on every call to action.

Private

No third party requests, no tracking pixels.

Easy to leave

Plain React and Tailwind. Copy the file and own it.

Installation

Install from
pnpm dlx @glinui/cli@latest add feature-grid

Prefer the package?

Usage

Own design from Card, IconFrame, Heading and Text. The `bento` layout composes BentoGrid for the grid and uses Card tiles with repeating spans; it does not duplicate BentoCard.

Icons are nodes (Phosphor elements work). They are decorative and wrapped in an IconFrame.

Variants

Bento, icon list and alternating rows.

Bento

Fast by default

Server components, zero client JS for static sections.

Learn more

Accessible

Landmarks, focus rings and AA contrast built in.

Composable

Every block is built from the same primitives you already use.

Learn more

Measurable

Hooks for analytics on every call to action.

Private

No third party requests, no tracking pixels.

Icon list

  • Fast by default

    Server components, zero client JS for static sections.

    Learn more
  • Accessible

    Landmarks, focus rings and AA contrast built in.

  • Composable

    Every block is built from the same primitives you already use.

    Learn more
  • Measurable

    Hooks for analytics on every call to action.

Alternating rows

  1. Fast by default

    Server components, zero client JS for static sections.

    Learn more
  2. Accessible

    Landmarks, focus rings and AA contrast built in.

<FeatureGrid layout="bento" features={features} />
<FeatureGrid layout="icon-list" features={features} />
<FeatureGrid layout="alternating-rows" features={features} />

Accessibility

  • A `section` labelled by its heading with headings in order.
  • Rows and icon lists are semantic lists.
  • Card links are real anchors with focus rings.

ARIA Attributes

  • `aria-labelledby` on the section
  • `aria-hidden` on icon frames

Reduced Motion

Entrance reveals and the card hover lift follow the Glin motion level. At level none or prefers-reduced-motion everything renders in its final static state.

API Reference

PropTypeRequiredDefaultDescription
featuresFeatureItem[]Yes-icon, title, description, href, linkLabel, media (alternating-rows), span (bento).
layoutFeatureGridLayoutNothree-upArrangement.
eyebrow / title / descriptionReactNode--Section header.
headingLevel2 | 3No2Section heading level; cards use the next level.
variantBlockLook | "default" | nullNoambientOmit `variant` to follow the ambient style: glinr (open canvas), plain under minimal, glass panel when opted in.
descriptionReact.ReactNodeNo-Auto-generated from TypeScript source.
eyebrowReact.ReactNodeNo-Auto-generated from TypeScript source.
titleReact.ReactNodeNo-Auto-generated from TypeScript source.

Source

Import directly from the package or browse the source on GitHub. Click any file to view it.

Import

import { FeatureGrid } from "@glinui/ui"

Dependencies

@glinui/ui@phosphor-icons/react

Generated API Snapshot

Beta

Auto-extracted from TypeScript source in packages/ui/src/components/feature-grid.tsx. This section is in beta and may lag behind hand-curated docs. Regenerate with pnpm --filter @glinui/docs api:generate.

Generated: 2026-10-08T01:41:21.546Z · Full index: /docs/api-metadata

Primary Props Type

FeatureGridProps

FeatureGridProps

PropTypeRequiredDefaultDescription
descriptionReact.ReactNodeNo--
eyebrowReact.ReactNodeNo--
featuresFeatureItem[]Yes--
headingLevel2 | 3No2Level of the section heading. Cards use the next level. Default 2.
layoutFeatureGridLayoutNo"three-up"-
titleReact.ReactNodeNo--
variantBlockLook | "default" | nullNo-Block shell: glinr (open), plain, glass panel. Omit for the ambient style.