v0.7.1
longbridge/gpui-kitv0.7.1Oct 5, 2026by huacnlee
Upgrading?
AI Summary
This release adds speech input and ColorSelect components, introduces chart draw-in animations, and improves IME editing and Markdown source mapping. It pins GPUI snapshot dependencies to 0.3.8 and fixes text clipping, IME positioning, and streaming issues.
Key Highlights
- Speech input feature with SpeechState and SpeechWaveform
- ColorSelect component for forms
- Chart appear motion with PlotAppearScope
- Improved IME editing and inline-token interactions
- Markdown source-based highlights and streaming improvements
Breaking Changes
- Charts animate on first paint by default (disable with .appear(false))
- Single-choice Questionnaire activation confirms by default
- Non-interactive charts now retain an element ID for animation
New Features
- Speech input components (SpeechButton, SpeechWaveform)
- ColorSelect component for forms
- Chart appearance animation support
- Source-based highlights via RenderedText::source
- Scrollable code blocks with custom scrollbar
- Improved keyboard focus visibility and control sizing
Full Release Notes
# v0.7.1 GPUI Kit v0.7.1 adds speech input and ColorSelect, and gives charts an initial draw-in animation. It improves IME editing, inline-token interactions, Markdown source mapping and streaming, keyboard focus, and table rendering. This release pins the GPUI snapshot dependencies to 0.3.8. ## New components and charts - **Speech input**: enable the `speech` feature to capture audio with `SpeechState`, start and stop sessions with `SpeechButton`, and display levels with `SpeechWaveform`. Applications can supply a `SpeechRecognizer` and `AudioInput`; native system recognition is available on supported macOS and Windows configurations, while Linux needs an application recognizer. ([#3333](https://github.com/longbridge/gpui-kit/pull/3333)) - **Speech waveform**: levels are sampled once per 80 ms, and the waveform starts empty and scrolls smoothly from the trailing edge using its own playhead. ([#3352](https://github.com/longbridge/gpui-kit/pull/3352)) - **ColorSelect**: use a framed color field with a swatch, hex value and caret in forms. `ColorSelect::new` shares `ColorPickerState` with the compact picker, and supports placeholder and accessible-name overrides. `ColorPicker` now applies its root style refinements. ([#3289](https://github.com/longbridge/gpui-kit/pull/3289)) - **Chart appear motion**: built-in charts draw their data in on first paint, with reduced-motion support. Use `.appear(false)` to opt out or `.appear_key(...)` to replay; `PlotAppearScope` remembers completed animations across virtual-list remounts while the scope remains painted. Existing custom plots retain their behavior unless they opt in. ([#3296](https://github.com/longbridge/gpui-kit/pull/3296), [#3308](https://github.com/longbridge/gpui-kit/pull/3308)) ## Editor and text input - **Inline-token hover**: `Input::on_token_hover` and `Textarea::on_token_hover` report token entry and exit with `InlineTokenHoverEvent`, so applications can anchor tooltips or previews without changing selection. JavaScript bindings expose the same interaction. ([#3346](https://github.com/longbridge/gpui-kit/pull/3346)) - Fixed IME candidate positioning before repaint and grouped rewrites of a typed character, including Korean IME input, into the typing undo step. ([#3297](https://github.com/longbridge/gpui-kit/pull/3297), [#3341](https://github.com/longbridge/gpui-kit/pull/3341)) - Fixed Textarea row-based height, text clipping in short single-line frames, and consistency between soft wrapping and horizontal scrolling. ([#3330](https://github.com/longbridge/gpui-kit/pull/3330), [#3343](https://github.com/longbridge/gpui-kit/pull/3343), [#3358](https://github.com/longbridge/gpui-kit/pull/3358)) - Fixed completion-prefix measurement and stale trigger offsets, Kotlin syntax-query compilation, and stale syntax-injection ranges. ([#3363](https://github.com/longbridge/gpui-kit/pull/3363), [#3367](https://github.com/longbridge/gpui-kit/pull/3367), [#3317](https://github.com/longbridge/gpui-kit/pull/3317)) - Fixed mask validation for non-ASCII characters, including Chinese literal separators and characters matched by `*`. ([#3369](https://github.com/longbridge/gpui-kit/pull/3369)) ## Markdown and text rendering - **Source-based highlights**: `RenderedText::source` exposes the source of the rendered snapshot, and `range_for_source` converts Markdown source byte ranges into rendered ranges for `RangeHighlight`. ([#3281](https://github.com/longbridge/gpui-kit/pull/3281)) - **Scrollable code blocks**: a code-block style with vertical scrolling and a height cap now provides its own scrollbar, handles nested wheel scrolling and keeps code actions pinned. ([#3322](https://github.com/longbridge/gpui-kit/pull/3322)) - Improved streaming through incremental prefix updates in `TextViewState::set_text` and by committing valid background parse results overtaken by newer chunks. ([#3294](https://github.com/longbridge/gpui-kit/pull/3294), [#3344](https://github.com/longbridge/gpui-kit/pull/3344)) - Fixed CJK punctuation wrapping, inherited text colors in filled containers, and ragged GFM table rows; scroll-table column measurements are reused. ([#3293](https://github.com/longbridge/gpui-kit/pull/3293), [#3329](https://github.com/longbridge/gpui-kit/pull/3329), [#3365](https://github.com/longbridge/gpui-kit/pull/3365), [#3318](https://github.com/longbridge/gpui-kit/pull/3318)) ## Dock and controls - **Dock**: `DockArea::set_split_sizes` restores a split's proportions in place, without rebuilding panels, and reports one layout change. ([#3314](https://github.com/longbridge/gpui-kit/pull/3314)) - **Questionnaire**: choosing a single-choice answer now confirms the item and advances or submits after a brief feedback pause. `QuestionnaireState::choose` exposes that activation path; `activate_choice` continues to change the answer without confirming. Arrow-key selection, multiple-choice toggles and freeform typing do not auto-advance. ([#3350](https://github.com/longbridge/gpui-kit/pull/3350)) - **Keyboard focus**: borderless buttons show a legible focus line, DataTable shows keyboard focus, and popup menus preserve a single keyboard highlight. ([#3299](https://github.com/longbridge/gpui-kit/pull/3299), [#3300](https://github.com/longbridge/gpui-kit/pull/3300), [#3307](https://github.com/longbridge/gpui-kit/pull/3307)) - **Control sizing**: control text follows the Input/Select size ladder, OtpInput follows interface zoom, and Large Switch uses a larger track. ([#3287](https://github.com/longbridge/gpui-kit/pull/3287)) - **Clipboard**: buttons have a localized accessible name by default; `accessibility_label` provides a contextual override. ([#3354](https://github.com/longbridge/gpui-kit/pull/3354)) - **Slider**: touch drags on the track move the thumb. ([#3313](https://github.com/longbridge/gpui-kit/pull/3313)) - **Radio**: disabled controls stay disabled inside RadioGroup. ([#3331](https://github.com/longbridge/gpui-kit/pull/3331)) - **Shimmer**: the default highlight remains visible on foreground text in dark mode. ([#3328](https://github.com/longbridge/gpui-kit/pull/3328)) - **Command**: item-row corners stay concentric with the frame. ([#3285](https://github.com/longbridge/gpui-kit/pull/3285)) ## Runtime, platform and documentation - **GPUI snapshot**: exact snapshot dependencies are updated to `=0.3.8`, with continuation-indent API adaptation preserving the previous wrapping behavior. ([#3370](https://github.com/longbridge/gpui-kit/pull/3370)) - **Web runtime**: target-specific Instant handling avoids a touch-related wasm panic. ([#3271](https://github.com/longbridge/gpui-kit/pull/3271)) - **Scrolling**: phaseless mouse wheels continue scrolling after an edge bounce. ([#3316](https://github.com/longbridge/gpui-kit/pull/3316)) - **Shell**: QuickJS JIT is updated to 0.12.11. ([#3338](https://github.com/longbridge/gpui-kit/pull/3338)) - **Kit macros**: the hidden GPUI re-export points at Kit, keeping generated paths consistent. ([#3306](https://github.com/longbridge/gpui-kit/pull/3306)) - **Documentation**: release snapshots drive onboarding dependency versions; setup documents the macOS font-kit requirement, and skill examples correct app startup, async and Select re-entrancy usage. ([#3284](https://github.com/longbridge/gpui-kit/pull/3284), [#3356](https://github.com/longbridge/gpui-kit/pull/3356), [#3339](https://github.com/longbridge/gpui-kit/pull/3339), [#3345](https://github.com/longbridge/gpui-kit/pull/3345), [#3351](https://github.com/longbridge/gpui-kit/pull/3351)) ## Behavior changes Charts animate on first paint by default; disable this with `.appear(false)`. Non-interactive built-in charts now retain an element ID for animation and caches, while remaining non-interactive. ([#3296](https://github.com/longbridge/gpui-kit/pull/3296)) ```diff let chart = LineChart::new(data).interactive(false); - assert!(Plot::id(&chart).is_none()); + assert!(Plot::id(&chart).is_some()); + assert!(!Plot::interactive(&chart)); ``` Single-choice Questionnaire activation now confirms by default. Applications that need to change an answer without confirmation can continue to call `activate_choice`. ([#3350](https://github.com/longbridge/gpui-kit/pull/3350)) Thank you to everyone who contributed code, documentation, testing, and feedback! ## What's Changed * command: Keep item row radius concentric with the frame by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3285 * website: Follow release versions and highlight diffs by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3284 * base: Gate GlobalState's Instant by target to fix a wasm touch panic by @yoyo930021 in https://github.com/longbridge/gpui-kit/pull/3271 * color_picker: Add ColorSelect, a framed field that opens the picker by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3289 * text: Keep inline flow lines within the wrap width for CJK punctuation by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3293 * button: Show keyboard focus on borderless variants when `focus_ring` is off by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3299 * chart: Add appear motion to `Plot` and every chart by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3296 * text: parse prefix extensions incrementally in TextViewState::set_text (#3291) by @Yi-111-a in https://github.com/longbridge/gpui-kit/pull/3294 * button: Keep the focus line off text and legible on fills by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3300 * website: Fit StatusBar demo sections to narrow windows by @ihavecoke in https://github.com/longbridge/gpui-kit/pull/3301 * docs: Update gpui-kit dependency version to 0.7 in READMEs by @obito-t in https://github.com/longbridge/gpui-kit/pull/3304 * website: Keep box-drawing glyphs in the gallery font subsets by @ihavecoke in https://github.com/longbridge/gpui-kit/pull/3305 * table, menu: Show keyboard focus on `DataTable` and keep menu highlights on key presses by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3307 * plot: Keep finished appears across remounts with `PlotAppearScope` by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3308 * kit: Point the hidden gpui re-export at the Kit itself by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3306 * dock: Add `DockArea::set_split_sizes` to restore a split's slot sizes by @IHadACookie in https://github.com/longbridge/gpui-kit/pull/3314 * component: Align control text sizes with Input and Select by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3287 * scroll_bounce: Let phaseless wheels scroll again after bouncing at an edge by @ylinwind in https://github.com/longbridge/gpui-kit/pull/3316 * highlighter: Clip stale injection ranges to char boundaries before slicing by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3317 * slider: Let a touch drag on the track move the thumb by @Bombatomica64 in https://github.com/longbridge/gpui-kit/pull/3313 * chore: upgrade notify to 8.2 and harden theme watching by @orielhaim in https://github.com/longbridge/gpui-kit/pull/3320 * shell: update QuickJS JIT to 0.12.11 by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3338 * docs: Document macOS font-kit requirement by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3339 * text: Avoid remeasuring scroll-table column widths by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/3318 * markdown: add source & range_for_source by @tidely in https://github.com/longbridge/gpui-kit/pull/3281 * text_view: Let fenced code blocks scroll inside a height cap by @jarviisha in https://github.com/longbridge/gpui-kit/pull/3322 * shimmer: Keep the default highlight visible on foreground text in dark mode by @Bombatomica64 in https://github.com/longbridge/gpui-kit/pull/3328 * text_view: Follow the container's text color so rich text reads in filled bubbles by @Bombatomica64 in https://github.com/longbridge/gpui-kit/pull/3329 * input: Make rows set the height of a plain Textarea again by @Bombatomica64 in https://github.com/longbridge/gpui-kit/pull/3330 * radio: Keep a disabled Radio disabled inside a RadioGroup by @Bombatomica64 in https://github.com/longbridge/gpui-kit/pull/3331 * input: Keep a single-line Input's text from being clipped in a short frame by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3343 * website: Fix bold labels in Chinese numbered lists by @ihavecoke in https://github.com/longbridge/gpui-kit/pull/3342 * skills: Fix async and app startup examples that don't compile by @AncientPixel in https://github.com/longbridge/gpui-kit/pull/3345 * questionnaire: Confirm a single-choice item when a choice is chosen by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3350 * skills: Fix the Select re-entrancy test examples by @AncientPixel in https://github.com/longbridge/gpui-kit/pull/3351 * speech: Add speech input by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3333 * input: Group IME rewrites of the typed character into one undo step by @insd47 in https://github.com/longbridge/gpui-kit/pull/3341 * text: Commit background parses that a newer streamed chunk overtook by @FenjuFu in https://github.com/longbridge/gpui-kit/pull/3344 * input: fall back to last caret for IME candidate bounds before repaint (#3286) by @Yi-111-a in https://github.com/longbridge/gpui-kit/pull/3297 * website: Fail a docs test on a hand-written GPUI Kit version by @Yi-111-a in https://github.com/longbridge/gpui-kit/pull/3353 * website: Match onboarding dependencies to release snapshots by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3356 * clipboard: Add accessibility_label to name the icon button by @counterbeing in https://github.com/longbridge/gpui-kit/pull/3354 * input: report inline token hover for tooltips and previews by @Muhammad-Owais-Warsi in https://github.com/longbridge/gpui-kit/pull/3346 * input: Keep horizontal scrolling and soft wrapping consistent by @suxiaoshao in https://github.com/longbridge/gpui-kit/pull/3358 * editor: Measure the completion prefix from the typed text and drop stale trigger offsets by @abderbejaoui in https://github.com/longbridge/gpui-kit/pull/3363 * highlighter: Make the Kotlin query compile against its grammar by @PieWhite in https://github.com/longbridge/gpui-kit/pull/3367 * text_view: normalize GFM table rows to the header column count by @kossoy in https://github.com/longbridge/gpui-kit/pull/3365 * input: Count characters, not bytes, when validating a mask pattern by @kevin9327 in https://github.com/longbridge/gpui-kit/pull/3369 * speech: Pace `SpeechWaveform` at one bar per 80 ms and scroll it smoothly by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3352 * kit: Update GPUI to gpui-pre 0.3.8 and prepare v0.7.1 by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3370 ## New Contributors * @yoyo930021 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3271 * @Bombatomica64 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3313 * @orielhaim made their first contribution in https://github.com/longbridge/gpui-kit/pull/3320 * @AncientPixel made their first contribution in https://github.com/longbridge/gpui-kit/pull/3345 * @insd47 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3341 * @FenjuFu made their first contribution in https://github.com/longbridge/gpui-kit/pull/3344 * @counterbeing made their first contribution in https://github.com/longbridge/gpui-kit/pull/3354 * @abderbejaoui made their first contribution in https://github.com/longbridge/gpui-kit/pull/3363 * @PieWhite made their first contribution in https://github.com/longbridge/gpui-kit/pull/3367 * @kevin9327 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3369 **Full Changelog**: https://github.com/longbridge/gpui-kit/compare/v0.7.0...v0.7.1
Related Repositories
A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io
An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.
Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one