sumi
Chapters

Reference

The authoritative support matrix. Three buckets throughout: supported, ~ supported with stated deviations, not supported (dropped gracefully unless noted). Anything not listed is unsupported.

Elements

ElementStatusNotes
div, span, p, h1h6block/inline per the UA stylesheet
ul, ol, li~ markers via li::before; no ol counters yet
blockquote, pre, code, hr
strong/b, em/i, u, s/del, mark, kbd, abbr, samp, varSGR-attribute styling
aunderlined, focusable; Enter/click opens href
buttonEnter/Space/click activate
input (text)readline keymap, value, maxlength, readonly, password
input checkbox / radio[x] / (•), Space toggles, radio name groups
select / option / optgroup~popup-less cycling control (no dropdown overlay)
textareamulti-line editing
progress, metereighth-block bars
details / summary▶/▼, open, toggle event
dialogmodal focus trap, Escape closes
labelwrapping and for= association
regionconsumer-fed cell area + resize event
ansiraw SGR passthrough, pre-like
imgplanned (half-block cells, then kitty graphics)
table, tr, td, th, thead/tbody/tfoot, caption, colgroupsee Layout

CSS: layout

FeatureStatusNotes
display: block / inline / inline-blockreal inline formatting context: runs wrap across styled elements
display: flexdirection, wrap, gap, grow/shrink/basis, justify (incl. space-around/evenly), align, align-self, order, reverse
display: grid~cell/ch/%/fr, repeat(), minmax(), areas, span; row auto-flow only
display: table + internalscolspan/rowspan, caption, header/footer groups, border-collapse, border-spacing, table-layout: fixed, empty-cells, colgroup width hints
display: contents / none
width/height, min/max-*, %, calc()box-sizing both models
padding, marginmargin auto centring; vertical margin collapse between adjacent block siblings (positive margins only)
position: relative / absolute / fixed / stickyz-index paint order
overflow: hidden / scroll / autoscrollbars, mouse wheel, scroll state
Units~cell and ch (1 cell) only; pixel-derived units drop to 0

CSS: selectors and cascade

FeatureStatusNotes
tag / class / id / attribute selectors, combinators
structural pseudo-classes (:first-child, :nth-child(), …)true runtime sibling context, including {for} lists
:hover, :focus, :checked, :disabled, :enabled
:not() / :is()~compound-only arguments
::before / ::after~content strings, attr(), concatenation; subject-only
specificity + source order + inline-attribute precedenceinline template attributes always win
var() custom propertiesinheritance and fallbacks
calc() / min() / max() / clamp()% resolves at layout
@mediaviewport, prefers-color-scheme, prefers-reduced-motion
@containersize queries against laid-out ancestors
@supports~property-name checks

CSS: visual

FeatureStatusNotes
coloursnamed, hex, rgb(), light-dark(); Lab-space interpolation; quantized to detected depth (16/256/truecolor)
opacity / alpha~composites over RGB backdrops; dim fallback otherwise
borderssingle/double/rounded/heavy/ascii box drawing; border-collapse junction merging; border-title (sumi extra)
text-align, text-overflow (ellipsis, ellipsis-middle)
white-space: normal / nowrap / pre, text-transform, word-break, visibility
transitionscolours + lengths, easing incl. steps()
@keyframes animationsiteration/direction/fill-mode/play-state; per-node var() and light-dark()

Events and input

FeatureStatusNotes
capture/bubble DOM dispatch, stopPropagation, preventDefaultclick, keydown, input, change, paste, toggle, focus, blur, resize
focus managementTab/Shift-Tab cycling, click-to-focus, dialog focus trap, disabled skipped
keyboardfull modifier decoding, F1–F12, kitty protocol (disambiguate mode: Ctrl+Enter, clean Escape) with legacy fallback
mouseclick, wheel scroll, hover, drag
global text selectiondrag / double-click word / triple-click line; inverse painting; OSC 52 + platform-tool clipboard on release
bracketed paste
Ctrl+Z suspend / resumeclean terminal restore + repaint

Runtime

FeatureStatusNotes
fullscreen modealternate screen, synchronized output (DEC 2026), diffed frames
inline moderenders at the shell cursor; final frame stays in scrollback; FrameLog streams and archives frames
io injectionRunOptions.In/Out/Size; runs in the browser via runtime/webterm (wasm)
colour schemeOSC 11 detection, light-dark(), forced via option
reduced motionoption or SUMI_REDUCED_MOTION
log captureRunOptions.OnLog routes stdlib log
toolingsumi init, sumi dev (hot reload, keep-last-good), sumi inspect

Templates

FeatureStatusNotes
{expression} text, name={expr} / {name} attributes
mixed content (text interleaved with elements)whitespace-only gaps follow the JSX newline rule
{if}/{else}/{/if}, {for} with key= diffing
snippets and {render}
components with props, callback props, bind:value, slots
{#await} / {#key} equivalents

Deviations from web behaviour are listed in each chapter. The terminal capability matrix (which terminals support which escape sequences) is in terminals.