#66
chore: release 0.6.0
:robot: I have created a release beep boop
0.6.0 (2026-10-27)
Features
- a11y: screen reader announcements, row mirror and keyboard exit (37c7595)
- add GPU post-process effects and custom WGSL shaders (6040feb), closes #43
- add React, Vue, Svelte and <wraith-term> bindings (9b9c876), closes #42
- command blocks API, gutter and shell integration for both profiles (fe489e0), closes #48
- command blocks from OSC 133 shell integration (bd31175)
- demo: add the effects lab with a custom shader gallery (48d4bff), closes #43
- draw pooled terminals into one shared WebGPU surface per worker (e5fbb60), closes #45
- engine: track OSC 133 command blocks with Ghostty tracked refs (a986aa5), closes #48
- expose VT state snapshots and grid digests from the headless engine (c08ca79), closes #47
- GPU effects (CRT, bloom, cursor trail) and custom WGSL shaders (a7cfb53)
- let the engine worker own the terminal's WebSocket (0873abe)
- React, Vue, Svelte and <wraith-term> bindings (2b3f45b)
- record, replay and scrub terminal sessions (a9bdbd9), closes #47
Performance
- batch serve's PTY output into larger WebSocket messages (66f6f5b)
- measure keystroke-to-pixel latency; render idle echoes at once (2c66654)
- open serve's WebSocket in the engine worker, off the main thread (3f6548d)
- read serve's PTY from a worker thread (a7849e2)
- read serve's PTY into a shared ring without stack traces (1f48fa6), closes #60
- render an idle terminal's next write at once (7c308c3), closes #59
- stop re-layerizing the page on every unfocused cursor move (94b0ec7), closes #45
- warm up the first engine in each worker during idle time (73f9788)
- warm up the Wasm engine; measure SIMD and build flags (c787121)
Bug fixes
- a11y: hold accessibility config until the worker has started (c266ed4)
- a11y: show the focus ring only for the focus a Tab caused (c252051)
- bindings: stop live grid changes on fitting terminals and late onReady (e42377a)
- correct bash integration cmdlines for unsaved and non-ASCII commands (db6df0c)
- drop the worker socket when the terminal fails (75ca66b)
- effects: survive dispose during setEffects and restore trail after reduced motion (bda3871)
- engine: report blocks erased by clear as truncated (34489dc)
- fall back to the typed command in the native profile (a30dca5)
- hide styled-hidden and re-clip moved hosts on shared surfaces (9908ea9)
- ignore command-block replies while a terminal disposes (00e893e)
- keep internal player seeks from raising unhandled rejections (50b2a72), closes #47
- keep Wraith.player from deadlocking under top-level await (ee33a8b)
- read grid digests inside synchronized output without releasing it (1567485), closes #47
- record resizes in the order the worker applies them (415563b)
- serve: stop the PTY reader thread before node-pty closes the master (92f242e)
Documentation
- a11y: describe what announcements: 'always' actually gates on (accbcc0)
- document accessibility and compare it with wterm (564fb28)
- document command blocks and measure their overhead (3de3011), closes #48
- document framework bindings and add a <wraith-term> demo (5c3723e), closes #42
- document recording, asciicast and the scrubbable player (87514b5), closes #47
- measure and document GPU effects (de0790f), closes #43
- record replay seek latency on a 10-minute session (0ef13cd), closes #47
- rename engine warm-up report and state its measurement limits (2de5b0f)
- report the headed fleet benchmark and document shared surfaces (53ecd08), closes #45
- state shared atlas capacity and opacity limits in both READMEs (127d4a3)
- state that recordings start empty (1cf25a3)
Benchmarks
- a11y: measure screen reader mode overhead and record validation (66fab23)
- add engine-only throughput, first-content and worker profile harnesses (c2dc4be)
- add headed fleet benchmark for shared vs per-canvas pools (df8b8db), closes #45
- make the native-Ghostty scripts portable across concurrent runs (5dc8e63), closes #60
- measure keystroke-to-pixel latency through serve (d255384), closes #59
- record serve's ring reader against #57, with a browserless client (a05efe2), closes #60
This PR was generated with Release Please. See documentation.