Releases: migueldeicaza/SwiftTerm
v1.11.0
What's Changed
- New: SearchService is finally here.
- New: 256 color palette now defaults to be rendered like this: https://gist.github.com/jake-stewart/0a8ea46159a7da2c808e5be2177e1783
- iOS now also generates the sequence for shift-tab, before, only macOS did.
Performance workj
- New benchmark suite
- 24% faster on parsing/redndering vttest
- Tuning of processing, we used to process 730k calls per second in our internal benchmarks, now they do 1,233 (69% throughput increase)
While there is still some more that can be extracted out of this, the next step is to redo the IO system, because right now, the IO, the rendering and the parsing are all done on the same thread. The experimental branch with the IO measuring has been great, the performance can vastly improve if we use two threads for this.
Contributions
- Make HeadlessTerminal.process public by @zxss702 in #460
- Fix keyboard toggle flicker on iOS by @alvarolb in #466
- Fix NSScroller layout when TerminalView uses Auto Layout constraints by @colemaco in #469
- More tests from xterm.js and Ghostty, and fixed a few things along the way: regional emoji merging
Fixes iOS scrolling
v1.10.1 Fix scrolling on iOS after I changed the placement of the view layout
V1.10
What's Changed
-
Mac/iOS: Custom block renderer: you can now use the
customBlockGlyphsto control whether to render various block drawing primitives using the system font, or whether we should render them manually - this helps rendering crisp graphics when using the block drawing characters. Initial POC contributed by Adam Meghji, and completed with inspiration from Ghostty and WezTerm. -
MacOS: abandon the use of Swift subprocess which fixes the subprocess terminal resizing, and along those assorted coding agents.
-
Add support for terminal-based progress notifications in OSC 9;4. On the MacOS/iOS backends, like Ghostty, we display with the progress update, and also call a delegate method for those hooking up to it.
-
Add support for SGR 2 dim/faint text attribute by @buddyh in #445
-
Fix NO-BREAK SPACE (U+00A0) column width calculation by @kuzmeech in #448
-
Fixes a crash on iOS 26 with Writing Tools in some languages.
-
Handle removing the cursor from the view when an app requests it.
-
Triple-tap will now select a row on iOS.
-
Fixes CSI > m handling
v1.9.0
New Features
- Integrated esctest test suite — Ported and automated the esctest suite (previously Python 2.7-based) to work on modern macOS, improving test coverage and catching regressions
Performance Improvements
-
Major Kitty image scrolling fix — Resolved a significant performance regression introduced with Kitty image support. Scrolling now tracks which lines contain images and only performs expensive operations when necessary
-
Inlined EscapeSequenceParser — Replaced configurable parser with expensive hash table lookups with direct method calls, yielding 1–4% performance improvements on escape sequence processing (#436)
-
Optimized dirty line flagging — Using borrows for buffer operations provides a 4.1% throughput improvement
-
General throughput gains — Combined optimizations deliver up to 58% throughput improvement on VteBench and 20% on raw feeding tests
Bug Fixes
- Fixed DECSLRM margin handling — scroll(), cmdIndex, and reverseIndex now properly respect left/right margins. This fixes display corruption in applications like tmux when using side-by-side panes (#434)
- Fixed color parsing — Corrected escape sequence terminator handling to use the current terminator rather than hardcoding to BEL
- Fixed macOS esctest compatibility — Resolved SIGCHLD signal handling conflict with Swift Subprocess
- Fixed missing version specification — Package now includes a fixed version so dependents can properly resolve it (#438)
Thread Safety
Eliminated global state in CharSets — Character set data is now local to each Terminal instance, continuing the effort to make Terminals fully thread-safe
v1.8.0
Kitty Graphics Protocol
- Full Kitty graphics support: Unicode placeholders, virtual placeholder rendering with pixel offsets, cursor movement, and all transport modes including Ghostty security restrictions.
- Memory management for Kitty images: Added configurable memory limits (default 320MB, up to 4GB). When limits are reached, images are evicted in order: non-visible first, then oldest, then any remaining until quota is met.
Unicode & CJK Improvements
- Unicode width specification compliance: Implemented the https://wcwidth.readthedocs.io/en/latest/specs.html for proper Unicode character measurement. Width now derives from UCD properties, EastAsianWidth ranges, and valid emoji variation sequences.
- Fixed Emoji and CJK cursor drift: Resolved an issue where the cursor would gradually drift away from Japanese, Chinese, and Korean text. Glyphs are now positioned at exact terminal column positions rather than using CoreText's advance width.
Stability Fixes
- Fixed crash in reverseIndex and cmdRestoreCursor (#256): Buffer.clear() now properly resets yBase to prevent out-of-bounds access when switching between normal and alternate buffers. Added defensive bounds checking and cursor position clamping.
- Fixed macOS background color rendering: Corrected an issue where foreground colors were incorrectly applied as background colors (e.g., in ls --color output).
iOS Keyboard Input
- Improved IME support: Fixed an issue where double-space would insert a period in the terminal (the iOS shortcut for typing a period). This behavior is now correctly intercepted.
- Better CJK keyboard handling: Improved Chinese, Japanese, and Vietnamese input. Korean input includes special handling for composition edge cases.
New Features
- Synchronized output (CSI 2026): Implemented the https://github.com/contour-terminal/vt-extensions/blob/master/synchronized-output.md with a 1-second timeout and automatic reset on window resize.
- API addition: MacLocalTerminalView.startProcess() now exposes the currentDirectory parameter.
- Copy improvement: Added mode to skip null characters inserted for double-width characters during copy operations.
Internal
- Test suite modernization: Migrated from XCTest to Swift Test. Fixed thread-safety issues in CharData for parallel test execution. Imported additional tests from Ghostty and xterm.js, including reflow tests.
- API change: CharData tables are now owned by Terminal rather than being static, enabling thread-safe parallel terminal instances.
Unicode Improvements.
This addresses some long-term rendering problems with Emoji
Windows build improvements.
v1.5.1 Do not compile HeadlessTerminal on Windows as it uses LocalProcess, w…
Major performance improvements.
1.5.0 Fix test warnings, disable Windows features
1.2.1: Merge pull request #289 from migueldeicaza/cursorRenderContentsOnLayer
The caret will now render the character underneath it.