skip to content

foundations

Layer 2

Semantic CSS classes for every primitive that needs no behavior — so Python and Go surfaces get the system too.

layer 2

one file, no build step

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.

server-rendered — any languagehtml
<link rel="stylesheet" href="termizen.css"><button class="tz-btn tz-btn--primary">  run job</button>
reacttsx
import '@termizen/tokens/termizen.css';import { Button } from '@termizen/react';<Button variant="primary">run job</Button>

rendered from classes

live — no react primitive on this row

Everything below is plain markup with a class attribute and nothing else. No component, no script.

readynominalrun

form

tz-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.

job

the node the command is sent to


flags
on run

class ↔ component

30 of 43

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.

primitiveclassreact
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">
pagecssthemelighttokenscopy2026srclinknominal