Skip to showcase
Pith

A tiny UI foundation for product teams.

Product-grade UI.
Without the framework tax.

Pith gives you semantic HTML, accessible defaults, responsive layout, and a CSS layer you can understand and own.

1.47 KBcore CSS gzip0 runtime dependenciesNative HTML first

See the difference

A real UI, with nothing to hide.

Start with the browser. Add only the layer your product needs. The result is small, inspectable, and still useful when JavaScript is unavailable.

ProjectsAll systems ready
NorthstarDesign system rolloutUpdated today
BeaconResearch portalUpdated yesterday
View patterns
<button data-variant="primary">
  Create project
</button>

The foundation

Less abstraction. More ownership.

Everything you need for a solid product surface, with the browser’s behavior still intact underneath.

01

Semantic by default

Real HTML keeps navigation, keyboard operation, and assistive technology working together.

02

Small by design

Ship only the contracts your interface uses. No component runtime or dependency maze.

03

Ready for products

Responsive layout, focus states, form states, data patterns, and progressive enhancement are included.

Comparable CSS gzip sizes
ProjectGzipREADME
Pith core1.47 KBReadme
Milligram≈2 KBReadme
Pure.css≈3.5 KBReadme
Bootstrap≈28 KBReadme
Bulma77.8 KBReadme

Gzip figures compare CSS artifacts where available. Pith is measured as the core stylesheet; framework figures are full or default CSS distributions. Bundlephobia provides the Bulma package measurement.

Try the examples below

Explore the patterns

Start with the patterns most products need, then move into richer behavior. Every example uses real HTML; use your keyboard, resize the page, and open the source recipes.

1 · Start here

Native foundations

Buttons perform actions. Links go places. Headings, lists, code, badges, separators, and media keep their browser meaning.

Jump to controlsDraft⌘ K

Nothing saved yet.

2 · Most common

Buttons, forms, and controls

Updates
Contact preference

Ready.

Invalid, loading, and disabled states

Native validation keeps errors next to their source. Submit the form empty to try it, or use the controls above without JavaScript.

60%

3 · Make state clear

Feedback and surfaces

Cards group content; alerts explain status; loading, error, and empty states make the next action explicit.

Empty and loading

No archived projectsArchived projects will appear here.
Loading project summary…

4 · Compose without wrappers

Layout and surfaces

Preview a layout primitive
StackVertical rhythm that remains readable at narrow widths.
ClusterActions wrap without changing the markup.
GridColumns create space without changing the DOM.

Grid preview active.

Questionnaire action flow

6 · Focused tasks

Dialogs, drawers, menus, and tabs

Dialog and menu

The main action stays visible. Use More actions for secondary work.

Review changes?

Your draft is ready to share. Click outside or press Escape to close.

Tabs

Two projects are ready to review.

7 · Dense content

Tables, data, and readable content

Recent projects
ProjectOwnerStatusUpdated
NorthstarJordan LeeReadyToday
BeaconSamira KhanReviewYesterday

2 projects shown.

Readable by default

Long labels wrap, tables scroll in a labelled region, and content keeps its meaning at 200% zoom.

<table>...</table>

8 · Add only when needed

Progressive enhancements

Comboboxes, command palettes, drawers, toasts, carousels, OTP fields, tooltips, and richer data-table behavior are optional recipes layered on native markup.

Combobox enhancement

Command palette

Search or use Arrow keys to move through actions; Enter chooses one.

Why optional?

When JavaScript is unavailable, native controls and primary content still work. Install a recipe when the product actually needs the behavior.

Get started

Bring your own markup.

Install the core layer, then add optional recipes when your product genuinely needs richer behavior.

Read the documentation
# install
npm install pith-css

# use in your stylesheet
@import "pith-css/core.css";