v2.0.0-rc.2
Breaking Changes
View.Layerrenamed toView.Contentfor clarity
Features
- Synchronized output (Mode 2026) enabled by default — terminals now render updates atomically for smoother output
SupportsKeyDisambiguationadded toKeyboardEnhancementsMsgModeReportMsgfor terminal mode reports- Terminal capability detection refactored into helper functions
Fixes
- Renderer edge cases: cursor visibility-only changes, redundant cursor toggles, unnecessary resize on alt screen buffer
- Renderer now properly defers resize and draw until flush
- Cursor position reset in inline mode to avoid line wraps
- Prepended lines now queued before render
- Always redraw on resize and erase to end of line when prepending
- Cellbuf size change detection before skipping flush
- Correct frame area dimensions used for drawing
TERM_PROGRAMenvironment variable now always set
Improvements
- Renderer uses
uvaltscreen helpers - Skip flush if no changes
- Keyboard enhancements API improvements
- Inline height calculation now uses interface pattern
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!
- 94247ed8f1de0b14d18221c5b1bc0a3ace867491: feat: add SupportsKeyDisambiguation to KeyboardEnhancementsMsg (@aymanbagabas)
- f1799cdf0528fa6eabd3e3f234aaa3ff9bea0ae7: feat: add synchronized updates option to renderer interface (@aymanbagabas)
- 7120058b79d9bd1147923b6d3c80730715c889e4: feat: introduce ModeReportMsg for terminal mode reports (@aymanbagabas)
- 349783e879971124e16fd6bd6d4ee5a68eecf449: feat: query terminal for synchronized output support (mode 2026) (@aymanbagabas)
- d88ab58421e23806003a92c034848234c75f3643: feat: renderer: use uv altscreen helpers (@aymanbagabas)
Fixed
- 101fd110a0c5ce2021c0b661b3e16d1a131cf25a: Revert "fix: renderer: sync buffer resize with frame rate" (@aymanbagabas)
- 8f17c3584f3df68f12703cb0f5e58f482f2e5d62: fix(examples): revert textarea pointers to values (@aymanbagabas)
- 78766cd0caffe74e4556b8cb81015be7186d74fa: fix(examples): use updated progress bar blend api (@aymanbagabas)
- d9f7210a9efd9d5badaeb4ded9c2a65a70d9322e: fix(renderer): avoid unnecessary resize on alt screen buffer (@aymanbagabas)
- 03b65248bf57d2db591717a069bd17a6e189b046: fix: edge case where cursor visibility is the only change (@aymanbagabas)
- 1ef7dd45893b2a1015c56a4eedd3eeddcea848b7: fix: ensure TERM_PROGRAM is set (@aymanbagabas)
- 513313125a10d7d62c83d295ca4fcbe0b547ac05: fix: renderer: always erase to end of line when prepending lines (@aymanbagabas)
- f206009f44a500e25ff21a155d98fdddc228c5f5: fix: renderer: always redraw on resize (@aymanbagabas)
- 2c7af7f201d59cdf7b7ee815da7beca2ac80aab0: fix: renderer: avoid redundant cursor toggles (@aymanbagabas)
- 4687350583449b10eb27f6be36c4bd0dc4b81447: fix: renderer: check for cellbuf size change before skipping flush (@aymanbagabas)
- f19cb6850adb26d4b472967d6aab331918189f02: fix: renderer: defer resize and draw until flush (@aymanbagabas)
- 3a71934c730fb80d422a03a7784c37baba45df1a: fix: renderer: ensure prepended lines queued before render (@aymanbagabas)
- 83e606b3d00262767f84c39258257543d11439fa: fix: renderer: handle cursor visibility and syncd output efficiently (@aymanbagabas)
- f01fc811bc64e4b3549330a860c61e7650ab0375: fix: renderer: reset cursor position in inline mode to avoid line wraps (@aymanbagabas)
- f952eb953acf76a30205b1c350a8154554ce8325: fix: renderer: use an interface for inline height calculation (@aymanbagabas)
- 1dcdea988ca7528967868c14cbde497005f496ef: fix: renderer: use the correct size when resizing the screen (@aymanbagabas)
- aa0071e72dc6c1ed3e1bb788f06cef223ad3299a: fix: renderer: we want to always use the frame area for drawing (@aymanbagabas)
Docs
- 9878b7a536694e0878bb01d558cdd331e6bae622: docs: update NewView and SetContent to add examples and notes (@aymanbagabas)
- cfe67248a64a82c9aeb6cb560be5bea76e2b7ae5: docs: update code example formatting in screen.go (@aymanbagabas)
- 3780c0e8b11d04c0bfa0e977cd3f970a2c874304: docs: update keyboard enhancement flags comment (@aymanbagabas)
Other stuff
- 514da28df3ee0bda03d51689900d6e2307feeb6e: perf: renderer: skip flush if no changes (@aymanbagabas)
- ed050cd1086878ecc4ae28a3c356f0e706e57407: refactor: extract terminal capability detection into helper function (#1543) (@Copilot)
- f03c467c1b08d1bf316777591dfd963b059be4ac: refactor: keyboard enhancements api improvements (#1534) (@aymanbagabas)
- a1ecb94bda0e4ced64384234e6296129341f16a6: refactor: rename View.Layer to View.Content for clarity (#1536) (@aymanbagabas)
- c3c752dbf7b3dbf33f3895af2970c5840b3b32e8: 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.
