Skip to content

Rendering and performance

Core decides what a frame contains: which rows changed, which glyphs they need, where images sit, what the cursor looks like. Each platform rasterises glyphs with its own text stack and draws the result on its own GPU interface. The work is split so that the model is locked only while a frame is captured, never while the GPU runs.

A composed system monitor: sample CPU bars, braille histories and a process table.
CPU bars, braille graphs and a process table.
Platform Drawing Text
macOS Metal, through one Swift renderer shared with iOS CoreText
iPhone and iPad The same Metal renderer CoreText
Linux Vulkan, with a CPU path FreeType and HarfBuzz, fontconfig
Web WebGL2, with a CPU 2D-canvas path The browser’s fonts or the built-in bitmap face

The web client’s GPU output is checked against its CPU raster, which serves as the reference for what a frame should contain.

  • Only changed rows are rebuilt. Each row carries a content digest; a frame rebuilds the rows whose digest moved.
  • Synchronized output. A program that brackets an update with mode 2026 is drawn at the end of the bracket, never halfway through it.
  • Paced by the display. On macOS a display link drives frames; [render] max_fps caps the rate and [render] vsync chooses tear-free presentation.
  • Box drawing that tiles. Box-drawing characters come from the font, stretched to the cell edges so lines meet without seams. Blocks, shades, Legacy Computing symbols, octants and Powerline separators are drawn as geometry. Braille is drawn as a dot lattice in seven styles.
  • Resizing. The macOS app draws whole rows during a resize drag and reflows content to the resulting grid.
  • Colour. sRGB or Display P3 output on macOS. Translucent backgrounds, behind-window blur and a background image are available on macOS; blur works on Linux where the compositor supports it.

The repository records parser, frame-building, search and storage measurements with their workload and build environment. Performance links the baselines and reproduction commands. Parser throughput, frame rate, and input-to-display latency are measured separately.