Smooth Operator (Mode 2026)
This release introduces synchronized output updates, which is enabled by default. This mode enhances how supported terminals render program updates by triggering the updates atomically.
We've also fixed a bunch of renderer bugs and edge cases 🙂
Changelog
New!
- 94247ed: feat: add SupportsKeyDisambiguation to KeyboardEnhancementsMsg (@aymanbagabas)
- f1799cd: feat: add synchronized updates option to renderer interface (@aymanbagabas)
- 7120058: feat: introduce ModeReportMsg for terminal mode reports (@aymanbagabas)
- 349783e: feat: query terminal for synchronized output support (mode 2026) (@aymanbagabas)
- d88ab58: feat: renderer: use uv altscreen helpers (@aymanbagabas)
Fixed
- 101fd11: Revert "fix: renderer: sync buffer resize with frame rate" (@aymanbagabas)
- 8f17c35: fix(examples): revert textarea pointers to values (@aymanbagabas)
- 78766cd: fix(examples): use updated progress bar blend api (@aymanbagabas)
- d9f7210: fix(renderer): avoid unnecessary resize on alt screen buffer (@aymanbagabas)
- 03b6524: fix: edge case where cursor visibility is the only change (@aymanbagabas)
- 1ef7dd4: fix: ensure TERM_PROGRAM is set (@aymanbagabas)
- 5133131: fix: renderer: always erase to end of line when prepending lines (@aymanbagabas)
- f206009: fix: renderer: always redraw on resize (@aymanbagabas)
- 2c7af7f: fix: renderer: avoid redundant cursor toggles (@aymanbagabas)
- 4687350: fix: renderer: check for cellbuf size change before skipping flush (@aymanbagabas)
- f19cb68: fix: renderer: defer resize and draw until flush (@aymanbagabas)
- 3a71934: fix: renderer: ensure prepended lines queued before render (@aymanbagabas)
- 83e606b: fix: renderer: handle cursor visibility and syncd output efficiently (@aymanbagabas)
- f01fc81: fix: renderer: reset cursor position in inline mode to avoid line wraps (@aymanbagabas)
- f952eb9: fix: renderer: use an interface for inline height calculation (@aymanbagabas)
- 1dcdea9: fix: renderer: use the correct size when resizing the screen (@aymanbagabas)
- aa0071e: fix: renderer: we want to always use the frame area for drawing (@aymanbagabas)
Docs
- 9878b7a: docs: update NewView and SetContent to add examples and notes (@aymanbagabas)
- cfe6724: docs: update code example formatting in screen.go (@aymanbagabas)
- 3780c0e: docs: update keyboard enhancement flags comment (@aymanbagabas)
Other stuff
- 514da28: perf: renderer: skip flush if no changes (@aymanbagabas)
- ed050cd: refactor: extract terminal capability detection into helper function (#1543) (@Copilot)
- f03c467: refactor: keyboard enhancements api improvements (#1534) (@aymanbagabas)
- a1ecb94: refactor: rename View.Layer to View.Content for clarity (#1536) (@aymanbagabas)
- c3c752d: refactor: renderer: support mode 2026, manage cursor visibility and altscreen (@aymanbagabas)
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.