Repository navigation
GPUI Kit v0.9.1
GPUI Kit 0.9.1 is a backward-compatible patch release. It adds a draggable GridLayout, right-pinned table columns, Markdown task checkboxes, link tooltips and motion transitions that outlive their element, along with a large batch of input, text, slider, accessibility and gpui-shell hardening fixes. The default backend moves to gpui-pre 0.3.12 and the optional GPUI Fast backend to 0.1.14.
New APIs
- GridLayout: a grid whose items the user drags and resizes, also registered in the gpui-shell component catalog. (#3770, #3789)
- Table:
ColumnFixed::Rightpins columns to the right edge. (#3833) - Text:
on_task_togglemakes Markdown task checkboxes clickable; block surfaces inTextView; pointer-following link tooltips. (#3811, #3830, #3793) - Motion:
TransitionStatefor transitions that outlive their element. (#3841) - Components:
Button::selected_accent,Slider::track_focus,Dialog::accessibility_label,TimeField::separator,Toolbar::axisfor vertical toolbars, and a ratio-sized PieChart hole. (#3775, #3824, #3826, #3829, #3821, #3784) - WindowBorder: the frame colour comes from the
window.bordertheme token, and window corners can be rounded on request. (#3849, #3848)
Editor and text input
- Keep the first typed character in the editor search panel, compose decoration styles deterministically, draw a placeholder for a folded line, and show the arrow over the gutter. (#3772, #3777, #3791, #3806)
- Tell the platform when the caret moves, publish layout at the end of prepaint, notify a moved input only while focused, and wait for the first layout before shaping an early value. (#3827, #3831, #3828, #3864)
- Keep the caret's visual line at soft wraps. (#3842)
Markdown and text rendering
- Supply editor foreground ranges through the render context and give span-less HTML paragraphs unique ids. (#3754, #3771)
- Tables: highlight the hovered body row, select aligned cell text where it is drawn, and size columns to their images. (#3812, #3813, #3787)
- Limit selection highlights to selected glyphs, draw unsized inline images at their own size, and avoid quadratic paragraph highlight merging. (#3799, #3786, #3846)
Components
- Table / DataTable: name rows after their cells, centre default header names, Tab and Shift+Tab leave a focused DataTable, and a selected cell gets a border distinct from hover. (#3773, #3731, #3800, #3866)
- Slider: allow
minabove the defaultmaxwhile building, snap dragged values to steps frommin, and step one thumb from assistive technology. (#3823, #3822, #3840) - Menu: size items and default max width in rems, and open a scrollable menu on its checked item. (#3809, #3814)
- Settings: follow locale changes in the search placeholder, clear search on Escape, show an empty state for unmatched searches. (#3815, #3816, #3692)
- Motion: reverse an interrupted transition as CSS does, and keep value-transition timing under reduced motion. (#3820, #3839)
- Scrolling: stop smooth-scrolling wheels at the edge on macOS, let the parent scroll a swipe over a fitting horizontal area, and keep the overscroll stream alive through sideways packets. (#3781, #3779, #3790)
- List, Tab, WindowBorder: accent rows use
accent_foreground, icon-only tabs keep their width, the element id path stays stable across decoration changes. (#3774, #3792, #3783) - Diff: reject invalid hunk prefixes before slicing UTF-8. (#3473)
- WebView: fix an X11 abort when a WebView is dropped on Linux. (#3862)
Accessibility
- Report a disabled
SliderThumbto assistive technology. (#3825)
gpui-shell security and robustness
- Require a network grant for
WebViewStatepages, accept only"*"as the unrestrictedexecutegrant, and checkLink.hrefagainst the URL scheme rule. (#3782, #3802, #3804) - Refuse bundle values that would break generated scripts, bound script-supplied counts, nesting depth and self-nesting views, and leave proxy URLs out of the default
process.env. (#3803, #3805, #3808, #3817, #3810) - Stop a Git dependency selector being read as a
git fetchoption, honor the manifest entry when bundling, expose group hover to scripts, and shrinkmaterialize_nodeframes. (#3778, #3682, #3796, #3807)
Dependencies
- Update
rustls-webpkiandwebpki-root-certsfor CVE-2026-111943. (#3801) - gpui-pre 0.3.12 and gpui-fast 0.1.14. Under GPUI Fast 0.1.14, views that were not notified reuse the previous frame instead of rebuilding. (#3867)
Contributors
Thank you to everyone who contributed to this release
@huacnlee, @wangdiandao, @yuluod, @ganeshmshetty, @Elitelord, @AprilNEA, @vinhnx, @madcodelife, @bhavishyasharma, @obito-t, @dedalqq, @insd47, @ylinwind, @LuckyBulgur, @alex-vas, @ohdarling, @mizorewww, @Calvin-Yi, @transilluminate, @lurenjia534, @bjornharrtell, @NONPLAYT, @iam4x.
What's Changed
- diff: Reject invalid hunk prefixes before slicing UTF-8 by @huacnlee in #3473
- text: Supply editor foreground ranges through the render context by @wangdiandao in #3754
- text: Give span-less HTML paragraphs unique element ids by @yuluod in #3771
- input: Keep the first typed character in the editor search panel by @ganeshmshetty in #3772
- table: Name each row after its cells by @Elitelord in #3773
- list: Draw accent-filled rows in accent_foreground by @AprilNEA in #3774
- component: Redraw fully in GPUI Fast lib tests by @huacnlee in #3768
- story: Wrap long questionnaire summaries inside their section by @vinhnx in #3776
- shell: Stop a Git dependency selector from being read as a
git fetchoption by @madcodelife in #3778 - grid_layout: Add a grid whose items the user drags and resizes by @bhavishyasharma in #3770
- button: Add selected_accent for an accent-filled selection by @AprilNEA in #3775
- window_border: Keep the element id path stable across decoration changes by @obito-t in #3783
- shell: Require a network grant for
WebViewStatepages by @madcodelife in #3782 - input: Compose decoration styles deterministically by @dedalqq in #3777
- scrollable_mask: Let the parent scroll a swipe over a horizontal area that fits by @insd47 in #3779
- chart: Size a PieChart's hole as a ratio of its ring by @bhavishyasharma in #3784
- scroll: Stop a smooth-scrolling wheel at the edge on macOS by @insd47 in #3781
- shell: Register GridLayout in the gpui-shell component catalog by @bhavishyasharma in #3789
- tab: Keep an icon-only tab's width instead of collapsing to the icon by @ylinwind in #3792
- shell: Expose group hover to scripts by @LuckyBulgur in #3796
- deps: Update
rustls-webpkiandwebpki-root-certsfor CVE-2026-111943 by @madcodelife in #3801 - shell: Accept only
"*"as the unrestrictedexecutegrant by @madcodelife in #3802 - shell: Refuse bundle values that would break a line in the generated scripts by @madcodelife in #3803
- shell: Check
Link.hrefagainst the URL scheme rule by @madcodelife in #3804 - shell: Bound script-supplied counts before they reach native allocation by @madcodelife in #3805
- input: Draw a placeholder for a folded line by @insd47 in #3791
- shell: Box state style refinements to shrink
materialize_nodeframes by @madcodelife in #3807 - menu: Size items and the default max width in rems by @alex-vas in #3809
- shell: Bound how deep a description may nest by @madcodelife in #3808
- shell: Leave proxy URLs out of the default
process.envby @madcodelife in #3810 - shell: Draw nothing where script views would nest inside themselves or too deep by @madcodelife in #3817
- text: Highlight the table body row under the pointer by @ohdarling in #3812
- text: Select right-aligned and centered table cell text where it is drawn by @ohdarling in #3813
- menu: Open a scrollable menu on its checked item by @ohdarling in #3814
- setting: Follow a locale change in the search placeholder by @ohdarling in #3815
- setting: Clear the sidebar search on Escape by @ohdarling in #3816
- settings: Show an empty state when search has no matches by @huacnlee in #3692
- text: Add
on_task_toggleto make Markdown task checkboxes clickable by @ohdarling in #3811 - slider: Add
Slider::track_focusby @mizorewww in #3824 - text: Limit selection highlights to the selected glyphs on each row by @Calvin-Yi in #3799
- input: Show the arrow over the editor gutter by @insd47 in #3806
- text: Draw an inline image without a size at its own size by @yuluod in #3786
- input: Publish the input's layout at the end of prepaint by @mizorewww in #3831
- dialog: Add
Dialog::accessibility_labelby @mizorewww in #3826 - slider: Allow
minabove the defaultmaxwhile building by @mizorewww in #3823 - time_field: Add
TimeField::separatorby @mizorewww in #3829 - input: Tell the platform when the caret moves by @mizorewww in #3827
- input: Notify an input moved by its parent only while it is focused by @mizorewww in #3828
- slider: Report a disabled
SliderThumbto assistive technology by @mizorewww in #3825 - motion: Reverse an interrupted transition as CSS does by @mizorewww in #3820
- slider: Snap a dragged value to steps counted from
minby @mizorewww in #3822 - table: Add
ColumnFixed::Rightto pin columns to the right by @huacnlee in #3833 - toolbar: Add
Toolbar::axisfor vertical toolbars by @mizorewww in #3821 - text: Add block surfaces to
TextViewby @mizorewww in #3830 - input: Let the completions test run the IME caret reports before counting frames by @madcodelife in #3837
- slider: Step one thumb from assistive technology and report the change by @mizorewww in #3840
- table: Let Tab and Shift+Tab leave a focused DataTable by @huacnlee in #3800
- ci: Propagate Shell integration test failures on Windows by @huacnlee in #3693
- shell: Honor the manifest entry when bundling by @huacnlee in #3682
- motion: Let a value transition keep its timing under reduced motion by @mizorewww in #3839
- editor_host: Keep the caret's visual line at soft wraps by @huacnlee in #3842
- overscroll: Keep the stream alive through sideways packets by @huacnlee in #3790
- website: Recommend Native Shell under the home hero by @huacnlee in #3844
- table: Centre a header's default name in its height by @transilluminate in #3731
- motion: Add
TransitionStatefor transitions that outlive their element by @mizorewww in #3841 - text: Avoid quadratic paragraph highlight merging by @lurenjia534 in #3846
- window_border: Take the frame colour from the window.border theme token by @bjornharrtell in #3849
- text: Size a table column to the images in its cells by @yuluod in #3787
- window_border: Round the window corners on request by @bjornharrtell in #3848
- webview: Fix X11 abort when a WebView is dropped on Linux by @huacnlee in #3862
- input: Wait for the first layout before shaping a value set early by @NONPLAYT in #3864
- table: Add border to selected cell to distinguish it from hover by @huacnlee in #3866
- text: Add pointer-following link tooltips by @iam4x in #3793
- chore: Bump v0.9.1 by @huacnlee in #3867
New Contributors
- @yuluod made their first contribution in #3771
- @vinhnx made their first contribution in #3776
- @bhavishyasharma made their first contribution in #3770
- @LuckyBulgur made their first contribution in #3796
- @ohdarling made their first contribution in #3812
- @mizorewww made their first contribution in #3824
- @Calvin-Yi made their first contribution in #3799
- @bjornharrtell made their first contribution in #3849
- @NONPLAYT made their first contribution in #3864
- @iam4x made their first contribution in #3793
Full Changelog: v0.9.0...v0.9.1