v0.2.21
# Termy v0.2.21 This release turns Plugins into a proper extension platform. Plugins can now render safe native interfaces, store data, expose settings, and react to terminal events. Terminal rendering also received a healthy performance diet. ### Plugins - Build native tools using TSX and Termy’s allowlisted UI components. - Plugin interfaces are validated and rendered safely through GPUI—no React, HTML, or direct renderer access. - Added buttons, checkboxes, text inputs, layouts, dividers, and semantic styling. - Added persistent JSON storage and plugin-specific data/cache directories. - Added typed plugin settings, including toggles, text, secrets, and selects. - Added lifecycle events for terminal readiness, tab changes, working-directory changes, and completed commands. - Added plugin commands to Termy’s keybinding system. - Added a complete Todo plugin example. - Added automatic bundling, content hashing, Worker reloads, and cached builds. - Added plugin management through Settings → Plugins. - Expanded the CLI with init, add, dev, update, status, enable, disable, and uninstall. ### Plugin capabilities Plugins must explicitly declare the Termy APIs they use: { "$schema": "https://termy.sh/schemas/plugin.schema.json", "apiVersion": 1, "id": "todos", "name": "Todos", "capabilities": ["storage", "native-ui"] } - storage enables persistent storage and plugin data paths. - native-ui enables native views and view.open. - Added a public JSON Schema for validation and editor autocomplete. Capabilities gate Termy APIs, but plugins remain trusted local Bun code with normal system access. ### Performance - Terminal wakeups are now event-driven and coalesced per terminal. - Only terminals with pending events are processed. - Damaged render rows are updated in batches with fewer allocations and clones. - Search results share line data instead of duplicating strings. - Redundant resize damage and redraw work has been reduced. - Performance benchmarks now enforce CPU, memory, frame, hitch, and idle-wakeup measurements more strictly. ### Fixed - Fixed right-click handling in mouse-aware terminal applications. - Fixed toast ID collisions that could dismiss the wrong plugin toast. - Fixed native plugin dialogs leaking input and shortcuts into the terminal. - Native plugin views can now be closed using the X button or Escape. - Improved plugin failure handling and Worker recovery. - Fixed production TLS initialization for the API. - Fixed the API Docker image’s glibc compatibility. ### Documentation and website - Renamed “TypeScript Plugins” to simply Plugins. - Reorganized plugin documentation into dedicated sidebar pages. - Added guides for native UI, commands, context, lifecycle events, storage, security, and runtime limits. - Published the plugin manifest schema. - Reduced homepage animation cost and optimized image assets. - Improved static asset serving and release-page rendering. Full changelog: v0.2.20...v0.2.21 (https://github.com/lassejlv/termy/compare/v0.2.20...v0.2.21)