GitHub

grid

Responsive CSS grid. Collapses to a single column on mobile. Direct children of the content slot become grid items โ€” no wrapper needed.

Column counts

Use cols to set the number of columns. All layouts collapse to one column on mobile.

2 columns

Left
Right
grid({ cols: 2, content: left + right })

3 columns (default)

One
Two
Three
grid({ cols: 3, content: items.join('') })

4 columns

A
B
C
D
grid({ cols: 4, content: items.join('') })

Gap sizes

Control spacing between items with gap: 'sm' | 'md' | 'lg'. Default is 'md'.

Small gap

One
Two
Three
grid({ cols: 3, gap: 'sm', content: items.join('') })

Large gap

One
Two
Three
grid({ cols: 3, gap: 'lg', content: items.join('') })

With components

Grid accepts any HTML string as content โ€” pass other component outputs directly.

Feature grid

Fast

Sub-100ms server responses with streaming SSR.

Secure

Security headers on every response, including errors.

Simple

No build step, no virtual DOM, no dependencies.

grid({
  cols: 3,
  content: features.map(f => feature(f)).join(''),
})

Stat grid

Monthly users

24.8k

+12%

Revenue

$18.2k

+8.4%

Churn rate

2.1%

โˆ’0.3%

Uptime

99.98%

0.0%

grid({
  cols: 4,
  content: stats.map(s => stat(s)).join(''),
})

Testimonial grid

โ˜…โ˜…โ˜…โ˜…โ˜…

Shipped our redesign in a weekend. No boilerplate, no config hell.

Alex Morgan

CTO at Launchpad

โ˜…โ˜…โ˜…โ˜…โ˜…

The streaming SSR makes our pages feel instant. Lighthouse is happy.

Sara Kim

Lead Engineer, Orbit

โ˜…โ˜…โ˜…โ˜…โ˜…

Finally a UI kit that doesn't fight the platform. Just HTML.

Dan Okafor

Founder, Stackly

grid({
  cols: 3,
  content: testimonials.map(t => testimonial(t)).join(''),
})

Card grid

Getting started

Install and run your first Pulse app in under five minutes.

Components

30+ accessible, composable UI primitives ready to drop in.

Deployment

Static hosting, Node servers, or edge runtimes โ€” one build.

grid({
  cols: 3,
  content: docs.map(d => card({
    title:   d.title,
    content: `<p>${d.summary}</p>`,
    footer:  badge({ label: d.tag }),
  })).join(''),
})

Single column

Use cols: 1 for a stacked list with consistent spacing โ€” useful for form sections or timelines.

Step one
Step two
Step three
grid({ cols: 1, gap: 'sm', content: steps.join('') })
PropTypeDefault
contentstring (HTML)โ€”Raw HTML slot โ€” direct children are grid items
colsnumber31 ยท 2 ยท 3 ยท 4
gapstring'md''sm' ยท 'md' ยท 'lg'