Native first
Web Components, Shadow DOM, CSS Custom Properties. Frameworks come and go, the web stays.
Baustein UI · v0.1
A framework-agnostic system on Lit, Shadow DOM, and CSS Custom Properties. Small primitives, reusable patterns.
Baustein UI is organized into clear layers. Each layer has its own responsibility. Click a card to enter the layer.
What sets Baustein UI apart from yet another UI kit — and why a file with 200 buttons is still not a design system.
Web Components, Shadow DOM, CSS Custom Properties. Frameworks come and go, the web stays.
Combine small blocks. No button with 47 booleans. Slots instead of feature flags.
Loading, empty, error, disabled, pending, stale — all part of the design, not an afterthought.
Every component documents inputs, outputs, events, slots, parts. Without a contract, no system.
Unambiguous names, repeatable structures, readable contracts. Humans understand it. Machines do not ruin it.
Beauty comes from order, rhythm, good decisions — not from ornament.
No huge dependencies. No magic. Just blocks that do what they should.
Four foundation primitives, one package. Lit as peer dependency. Tokens as separate CSS that you import and override.
Install
pnpm add baustein-ui lit
Import
/* Tokens as CSS */ @import 'baustein-ui/tokens.css'; // Components — auto-register all four import 'baustein-ui';
Use
<bau-card> <span slot="header">Project Status</span> <p>Everything running. Suspicious, but beautiful.</p> <bau-stack slot="footer" direction="row" justify="between"> <bau-button variant="ghost">Cancel</bau-button> <bau-button variant="accent">Save</bau-button> </bau-stack> </bau-card>
Theme
/* Override one token. The whole system follows. */ :root { --bau-color-accent: #2a5bff; --bau-radius-md: 0.5rem; --bau-control-height-md: 2.5rem; }