{"version":"v1.0","client_state":{"Studio.default":{"fields":{"primary":"#682747","secondary":"#3a52b0","success":"#2f9e64","warning":"#f0a91b","error":"#e5484d","info":"#0e9bc4","background":"#fafafa","surface":"#ffffff","interface":"#f0f0f1","text":"#171717","muted":"#6b6b6e","d_primary":"#682747","d_secondary":"#3a52b0","d_success":"#2f9e64","d_warning":"#f0a91b","d_error":"#e5484d","d_info":"#0e9bc4","d_background":"#0a0a0a","d_surface":"#151515","d_interface":"#212121","d_text":"#f5f5f5","d_muted":"#a0a0a3","spacing":0.1875,"box":0.75,"field_":0.75,"selector":0.375,"stroke":1.0,"font":"ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'"},"persist":"local","send_to_server":true},"ColorScheme.default":{"fields":{"mode":"system"},"persist":"local","send_to_server":true},"Workspace.default":{"fields":{"slug":"northwind"},"persist":"memory","send_to_server":true}},"endpoints":{"action":"/_bretzel/action","sse":"/_bretzel/sse","refetch":"/_bretzel/refetch"},"csrf":"bc10dd44ee0ed071502bd3fbf0d437be","page_id":"83382a48f12a47b2870bc8ed6b2b9773","address":""}
ui.text

Text

Ten sizes, four weights, every semantic colour, truncation — and text that follows the browser's state live.

Type scale

One size scale for the whole app, repainted by the theme.
xsShip internal tools in days
smShip internal tools in days
mdShip internal tools in days
lgShip internal tools in days
xlShip internal tools in days
2xlShip internal tools in days
3xlShip internal tools in days

Status messages

A colour says what happened; the weight says how much it matters.
Payment received — invoice INV-2041 is settled.Your trial ends in 3 days.The card ending in 4242 was declined.Last synced 2 minutes ago.

A price, and the old one

Sizes, weights and a line-through combine into a pricing block.
Team plan
€19€29/ seat / month
Billed yearly. Cancel any time.

Long names that truncate

truncate=True cuts with an ellipsis instead of breaking the row.
Q3-board-meeting-minutes-final-v4-approved-by-legal.pdf
customer-interviews-transcripts-september.docx
brand-guidelines-2026.fig

Paragraphs

tag="p" for real paragraphs; align= for centred or justified copy.

Why we built Bretzel

Most internal tools start as a spreadsheet and end as a React app nobody wants to maintain. Bretzel keeps the whole thing in Python: the state, the handlers and the interface.

Text that follows the browser

Pass a ClientState field instead of a string: the text follows every keystroke, with no request to the server.
Workspace name
.bretzel.app
Your team will sign in at