GPUI Kit v0.6.1
GPUI Kit v0.6.1 brings multi-cursor editing, automatic bracket pairing, smart indentation, and headless UI testing. This release also improves Markdown rendering, text selection, accessibility, and everyday component behavior.
Editor and Text Input
- Multi-cursor editing with Alt-click to add cursors and Shift-Alt-drag for column selection. Column selections now preserve their width across short lines. (#2837, #2987)
- Automatic bracket pairing and smart indentation on Enter, with configurable language rules and independent
auto_closeandsmart_indentpreferences. (#3018) - Improved search behavior: reopening search restores focus, preserves the active match, and reveals matches after manual scrolling. (#2932, #2953, #2955)
- Fixed cursor movement across CRLF boundaries and pending syntax highlighting when switching languages. (#2986, #2994)
- Fixed selection drag-autoscroll in virtualized lists and ensured scrolling stops when the selection gesture ends. (#2948, #2941)
- Reduced unnecessary updates when scroll and paint state remain unchanged. (#2988)
Headless UI Testing
Applications can now test interactions and layout through gpui_kit::test, enabled by the test-support feature. The testing API supports scoped queries, native input events, state snapshots, and waiting for deferred updates.
This release also expands integration coverage across core controls, menus, dialogs, tables, and dock layouts, with separate Metal rendering checks on macOS. (#3005, #3019)
Markdown and Text Rendering
- Added opt-in YAML frontmatter rendering through
MarkdownExtensions::frontmatter()andFrontmatterPlugin. Supported mappings render as structured metadata; unsupported content falls back to a YAML code block. (#2850) - Corrected hard and soft line-break rendering. (#2945, #2947)
- Improved inline code styling with rounded backgrounds and a monospace font. (#2949)
- Fixed stale measurements when replacing a document with another containing the same number of blocks. (#2946)
Components and Accessibility
- Button: added preferred tooltip placement and restored the selected background for ghost buttons. (#2971, #2938)
- Select: exposed committed values, improved accessible activation, and made
on_dismissrun consistently regardless of how the popup closes. (#2973, #2984) - Sidebar: added
Styledsupport andlabel_styletoSidebarMenuItem. (#2957) - Icons: added SVG byte support in component icon slots and shared Lucide icon names while preserving default icons. (#2980, #3020)
- Fixed panel resizing flicker and list measurement when the configured measurement row is absent. (#2907, #2975)
- Improved accessibility for dialog close buttons and calendar items. (#2969, #2996)
- Added fallback to an installed monospace font when the default is unavailable. (#3009)
Runtime and Platform Improvements
- Refined FPS reporting using frame cost and the display's refresh rate, with sustained frames enabled by default. (#2944, #2954, #2956)
- Restricted Windows native-menu
uxthemeloading to System32. (#2974) - Updated Tree-sitter and removed the previous workaround. (#2990)
Documentation
The documentation website now uses Astro, with improved App Stories browsing and preserved sidebar scroll position. Component API documentation is separated from shared Kit guides, with expanded coverage of fonts, editor search, UI testing, and AI-assisted development.
Thank you to everyone who contributed code, documentation, testing, and feedback!
What's Changed
- website: Bundle IBM Plex Sans so
.SystemUIFontresolves on the web by @huacnlee in #2933 - gpui-pre: Audit licenses before publishing and state GPUI's origin by @huacnlee in #2936
- chore: Let the doctests written for gpui-kit users compile by @huacnlee in #2937
- website: Add a release notes page and keep page titles off the toolbar by @huacnlee in #2935
- button: Select a ghost button with
secondary_activeagain by @madcodelife in #2938 - shell: Improve application compatibility by @huacnlee in #2939
- chroe: Drop the unused reqwest_client dependency by @huacnlee in #2940
- base: Stop auto scroll once the text selection gesture has ended by @madcodelife in #2941
- skills: Quote gpui-kit skill description by @prabirshrestha in #2943
- fps: Sustain frames by default, and stop grading the rate by @huacnlee in #2944
- website: migrate from VitePress to Astro by @endless-bot in #2926
- story: Draw the chart gallery through a virtual list by @huacnlee in #2950
- markdown: render hard line breaks instead of concatenating lines by @kossoy in #2945
- editor: Refocus the search bar when search is invoked again by @hlcfan in #2932
- markdown: reflow soft line breaks instead of rendering them as hard breaks by @kossoy in #2947
- text: remeasure list items when a document is replaced with an equal block count by @kossoy in #2946
- website: Add five apps to the app stories page by @huacnlee in #2951
- resizable: Fix panel resizing flickering by @hlcfan in #2907
- shell: Expose GPUI's list and uniform_list to scripts by @huacnlee in #2952
- fps: Derive the headline rate from frame cost instead of driving the frame loop by @huacnlee in #2954
- fps: Cap the headline by asking the platform what the panel runs at by @huacnlee in #2956
- sidebar: make SidebarMenuItem implement Styled and add label_style by @ItsCacia in #2957
- website: Fix Showcase lockfile installation in docs releases by @huacnlee in #2958
- website: Refine App Stories layout and browsing by @huacnlee in #2960
- website: Remove two Vue components orphaned by the Astro migration by @huacnlee in #2965
- editor: Reveal search match after manual scroll by @hlcfan in #2955
- chore: Forward platform test support and profiling by @grishy in #2966
- base: move the native examples into their own package by @Tryanks in #2963
- editor: Preserve active search match on panel open by @hlcfan in #2953
- dialog: make the close button accessible by @grishy in #2969
- button: expose preferred tooltip placement by @grishy in #2971
- docs: welcome AI-assisted contributions by @huacnlee in #2981
- ci: enable weekly gpui-pre releases by @huacnlee in #2982
- native_menu: Constrain uxtheme loading to System32 by @lurenjia534 in #2974
- select: expose committed values and accessible activation by @grishy in #2973
- list: measure an existing row when the configured item is absent by @grishy in #2975
- story: replace List search results without duplicating rows by @grishy in #2976
- icon: Support SVG bytes in component icon slots by @suxiaoshao in #2980
- select: run on_dismiss however the popup closes by @huacnlee in #2984
- chore: isolate story examples from test-support by @huacnlee in #2985
- input: Multi cursors by @zanmato in #2837
- input: Keep column selection width over short rows by @huacnlee in #2987
- input: preserve CRLF cursor boundaries and document shortcuts by @kossoy in #2986
- chore: Fix the CI metadata parse and skip unchanged snapshots by @huacnlee in #2992
- fix(base): name calendar items for accessibility by @huacnlee in #2996
- chore: improve component conventions for AI-assisted development by @huacnlee in #2993
- highlighter: Update tree-sitter to remove workaround by @zanmato in #2990
- input: trigger pending re-highlight when switching editor language by @Muhammad-Owais-Warsi in #2994
- input: Avoid notifying unchanged scroll and paint state by @jlucaso1 in #2988
- docs: document editor search panel and searchable API by @Muhammad-Owais-Warsi in #3002
- chore: Expand CONTRIBUTING.md with GPUI and GPUI Kit details by @huacnlee in #3004
- docs: separate Component API docs from shared Kit guides by @huacnlee in #3006
- theme: Fall back to an installed monospace font when the default is missing by @madcodelife in #3009
- docs: document fonts - system, theme, custom bundling, and WASM by @Muhammad-Owais-Warsi in #3010
- kit: Add headless UI testing to gpui-kit by @huacnlee in #3005
- docs: migrate root/theme/dock from docs to component section by @endless-bot in #3014
- website: Preserve docs sidebar scroll position across navigation by @loosheng in #3007
- kit: expand core UI integration coverage by @huacnlee in #3019
- markdown: Add Frontmatter plugin as structured metadata by @BeratHundurel in #2850
- assets: share Lucide icon names and preserve default icons by @huacnlee in #3020
- text_view: Improve inline code render with rounded style and mono font by @kossoy in #2949
- text_selection: drag-autoscroll never moved a virtualized list by @kossoy in #2948
- editor: auto-close brackets and smart indent on Enter by @Muhammad-Owais-Warsi in #3018
New Contributors
- @prabirshrestha made their first contribution in #2943
- @endless-bot made their first contribution in #2926
- @kossoy made their first contribution in #2945
- @grishy made their first contribution in #2966
- @Tryanks made their first contribution in #2963
- @Muhammad-Owais-Warsi made their first contribution in #2994
- @loosheng made their first contribution in #3007
Full Changelog: v0.6.0...v0.6.1