v0.2.31
# Termy 0.2.31 ## Command palette - **Fuzzy search with ranking.** The palette now matches subsequences (`gsw` → "Git: Switch Branch") and ranks results by match quality instead of listing them in static order. - **Recently used commands rank higher.** Commands you run often surface first; unavailable commands sink to the bottom in ranked modes. - **Better scannability.** Matched characters are highlighted inline, rows show category labels, icons are tinted per category, and keyboard shortcuts render as keycap chips. - **Inline reasons for unavailable commands.** Disabled rows explain why instead of just looking dead. - **Navigation and hover fixes.** Arrow/Home/End navigation and viewport scrolling behave correctly, and selection no longer jumps under a stationary mouse. ## Plugins - **Context-menu commands.** Commands can declare `placements: ["commandPalette", "terminalContextMenu", "tabContextMenu"]`. Context-menu placements are available on Linux and Windows; `placements: []` makes a command keybinding-only. - **Native views inside the palette.** `view.open` accepts `target: "commandPalette"` to render a plugin's native view in the palette results area, keeping palette search and footer, instead of a centered modal. - **Stale-revision safety.** Actions and native-view updates returned by a request whose plugin changed, was disabled, or was removed are now rejected. ## Fixes - **ANSI text attributes preserved across renderers.** Bold, italic, underline and friends now survive the GPUI grid, FFI frame snapshots, and the macOS SwiftUI renderer consistently. - **Windows new tab button placement.** Corrected tab strip layout and titlebar drag regions on Windows. ## Docs - Termy agent skills published: `build-termy-plugins` (plugin authoring for coding agents) and `ghostty-to-termy` (Ghostty config conversion), with docs on the website. - Plugin docs updated for placements, palette-targeted views, and lifecycle guarantees. **Full Changelog**: https://github.com/lassejlv/termy/compare/v0.2.30...v0.2.31