Text sizing in terminal interfaces
This catalog surveys native text sizing from wire encoding through application layout and terminal execution. It informs Sparkles without declaring an accepted API or claiming that protocol support has been implemented.
This survey answers five questions:
- What do size, explicit width, fractional scale, and occupied cells mean? See concepts and Kitty.
- Which receivers execute the protocol? See Kitty, foot, and Ghostty.
- How do libraries measure, wrap, negotiate, and retain sized text? See wcwidth, Blessed, libvaxis, and OpenTUI.
- How do applications turn Markdown or shaped text into terminal output? See presenterm, mdfried, and osc66.
- What must change in Sparkles, and how could correctness be demonstrated? See the baseline, proposal, and validation ledger.
Last reviewed: September 14, 2026
Master catalog
These are inspected local snapshots, not claims about current upstream tips. Each deep-dive records the complete revision, license, source quotations, and evidence limitations. Source inspection is not equivalent to executing tests.
| Subject | Category | Observed sizing boundary | Link |
|---|---|---|---|
| Kitty | Terminal and protocol | Executes rectangular multicells, fractions, editing and reflow | Study |
| Ghostty | Terminal / VT library | Parses OSC 66; execution remains unimplemented in both inspected revisions | Study |
| foot | Terminal | Executes explicit width; scaling deliberately out of scope | Study |
| libvaxis | TUI library | Emits width, integer scale and fractions; retained-state risks | Study |
| OpenTUI | TUI library | Emits explicit width; detects scale without scaled widget layout | Study |
| Blessed | Python terminal library | Constructs sized text and probes support; validation/fallback gaps | Study |
| wcwidth | Python text library | Parses, measures and extracts payloads; clipping/wrapping limitations | Study |
| presenterm | Markdown presentation | Capability-normalized integer-sized text layout | Study |
| osc66 | Shaping CLI | Font-derived explicit width, not enlarged text | Study |
| mdfried | Markdown viewer | Native sized, rasterized, and plain heading paths | Study |
Taxonomy
By responsibility
| Responsibility | Subjects |
|---|---|
| Define and execute terminal semantics | Kitty, foot, Ghostty |
| Parse or construct text-bearing sequences | wcwidth, Blessed |
| Retain and diff a terminal picture | libvaxis, OpenTUI |
| Choose document typography | presenterm, mdfried |
| Derive allocation from a chosen font | osc66 |
By geometry
| Geometry model | Evidence |
|---|---|
| Rectangular object ownership | Kitty |
| Horizontal explicit-width object | foot |
| Ordinary wide-grapheme retained spans | OpenTUI |
| Scaled placement with incomplete ownership | libvaxis, mdfried |
| Height-aware sequential text flow | presenterm |
| Scalar horizontal measurement | wcwidth, Blessed |
Milestones
Dates describe the cited event, not when every downstream acquired the feature.
| Date | Event | Evidence |
|---|---|---|
| February 6, 2025 | foot merges width-only OSC 66 | foot upstream history |
| March 8, 2025 | Kitty 0.40 introduces multiple-sized text | Kitty changelog |
| January 15, 2026 | Ghostty lands OSC 66 parsing, not execution | Ghostty introduction commit |
| February 2, 2026 | OpenTUI fixes force-off still issuing probes | OpenTUI upstream history |
| June 12, 2026 | foot fixes empty-payload out-of-bounds access | foot safety evidence |
| August 23, 2026 | OpenTUI fixes cursor-report attribution | OpenTUI upstream history |
| September 14, 2026 | Survey confirms Ghostty still lacks execution | Ghostty snapshot |
Reading paths
- Implementing the Sparkles feature: concepts, comparison, baseline, proposal, validation.
- Writing a terminal encoder: Kitty, wcwidth, Blessed, then validation.
- Designing a retained renderer: Kitty, foot, OpenTUI, libvaxis.
- Rendering Markdown headings: presenterm, mdfried, then the Sparkles proposal.
- Considering shaping dependencies: osc66 and concepts.