foundations
Layer 2
Semantic CSS classes for every primitive that needs no behavior — so Python and Go surfaces get the system too.
layer 2
Termizen is three layers, and only the top one is React. Tokens are framework-free CSS. On top of them, termizen.css carries every primitive that needs no behavior as a semantic class — so a Django, Flask, or Go html/template surface links one file and gets the system. Only the components that carry real behavior require React on Base UI.
<link rel="stylesheet" href="termizen.css"><button class="tz-btn tz-btn--primary">run job</button>
import '@termizen/tokens/termizen.css';import { Button } from '@termizen/react';<Button variant="primary">run job</Button>
rendered from classes
Everything below is plain markup with a class attribute and nothing else. No component, no script.
form
Same classes as the React form. Native form and fieldset, a hairline hr, named checks. .tz-switch is a button — native submit cannot read it, so a posted flag is a named checkbox. Buttons write type on the markup: primary is submit, cancel is button. This page only stops the navigation.
class ↔ component
Both layers read the same tier-3 component tokens, so a class and its React counterpart cannot drift apart visually — changing --btn-primary-bg moves both.
| primitive | class | react |
|---|---|---|
| button | .tz-btn .tz-btn--primary | <Button variant="primary"> |
| input | .tz-input | <Input /> |
| number-field | .tz-number .tz-number__step | <NumberField /> |
| field | .tz-field .tz-label .tz-hint | <Field label hint> |
| fieldset | .tz-fieldset .tz-fieldset__legend | <Fieldset legend> |
| form | .tz-form | <Form> |
| checkbox-group | .tz-checkgroup | <CheckboxGroup> |
| switch | .tz-switch | <Switch /> |
| panel | .tz-panel .tz-panel__head | <Panel label meta> |
| separator | .tz-separator | <Separator /> |
| table | .tz-table .tz-table--dense | — CSS only |
| scroll | .tz-scroll | — CSS only |
| code-block | .tz-code .tz-code__line | <CodeBlock /> |
| log | .tz-log .tz-log__src | — CSS only |
| badge | .tz-badge .tz-badge--ok | <Badge tone="ok"> |
| tabs | .tz-tabs .tz-tab | <Tabs /> |
| nav item | .tz-navitem | <SidebarNav /> |
| status bar | .tz-statusbar | — CSS only |
| meter | .tz-meter .tz-meter__cell--on | <Meter /> |
| progress | .tz-progress .tz-meter__cell--on | <Progress /> |
| vacant | .tz-vacant | — CSS only |
| texture | .tz-tex .tz-tex--25 | — CSS only |
| lamp | .tz-lamp .tz-lamp--live | — CSS only |
| cursor | .tz-cursor | — CSS only |
| spin | .tz-spin | — CSS only |
| star | .tz-star | — CSS only |
| wait | .tz-wait | — CSS only |
| tick | .tz-tick | — CSS only |
| marquee | .tz-marquee | — CSS only |
| callout | .tz-callout .tz-callout--warn | <Callout tone="warn"> |