Rio 0.3.0 is a major release with a ground-up rewrite of the rendering architecture, including a new GPU-accelerated Metal backend on macOS, a completely new tab and split panel system powered by Taffy layout, and features like Kitty/Sixel graphics, command palette, and trail cursor effects. With this level of change, rough edges are expected — if you run into bugs, please report them at https://github.com/raphamorim/rio/issues and they'll be addressed as quickly as possible.
For Windows users, feel free to use 0.3.0 but I'd recommend waiting for the next release, which will include significant improvements and stability
fixes for the platform.
Happy Easter!
Changelog
- Quit Confirmation Dialog: New in-window quit screen with Rio logo, triggered by Cmd+Q / confirm-before-quit
- Respond with
yto quit ornto cancel - Optional native macOS quit dialog via
window.macos-use-quit-dialogconfig
- Respond with
- Kitty Graphics Protocol: Display images directly in your terminal
- Direct placements (U=0)
- Virtual placements (U=1)
- Diacritic-based row/column encoding (283 combining characters)
- RGB color encoding for image/placement IDs (24+8 bit support)
- Virtual placement rendering (infrastructure complete, rendering pending)
- Sixel Graphics: Full support with proper scrolling and positioning
- Graphics Rendering Improvements:
- Fixed vertical positioning alignment
- Fixed scrolling (images persist when origin scrolls off-screen)
- Fixed duplicate rendering with per-frame deduplication
- LRU cache with automatic eviction
- Native Metal Support (macOS): Hardware-accelerated rendering with Metal
- New GPU-Rendered Navigation: Faster, smoother tab interface
- Command Palette: Quick access to terminal functions
- Toggle Appearance Theme: Switch between dark and light themes at runtime via key binding (
ToggleAppearanceTheme) or command palette (only available when adaptive theme is configured) - Custom Mouse Cursor: Configurable mouse cursor effects via
effects.custom-mouse-cursor - Trail Cursor: Smooth spring-animated cursor trail using neovide-style physics (enabled by default via
effects.trail-cursor) - Desktop Notifications: Support for OSC 9 (iTerm2) and OSC 777 (rxvt) terminal notifications using native platform APIs (macOS
UNUserNotificationCenter, Linux D-Bus, Windows Toast) - Force Theme: New
force-themeconfiguration property to override the system theme when using adaptive themes - macOS Traffic Light Positioning: Customize position of window control buttons
- Configure via
macos-traffic-light-position-xandmacos-traffic-light-position-y - Defaults to standard macOS positioning (11.4, 16.1)
- Not available in Tab navigation mode
- Configure via
- OSC 9;4 Progress Bar Support: Terminal progress indicator (ConEmu/Windows Terminal compatible)
- Scroll Bar: Overlay scroll bar that appears on scroll and fades out after 2s
- Works per-panel in split views
- Draggable thumb with click-on-track jump scrolling
- Configure via
enable-scroll-bar(enabled by default)
- Tab Title
RELATIVE_PATHvariable: New template variable that shows a home-relative shortened path (e.g.~/Documents/a/rioor…/a/psone/starpsx). Default tab title on macOS/Linux changed to{{ TITLE || RELATIVE_PATH }}. - Wgpu now is always f32.
- This fixes non arm chip macos use cases.
Breaking Changes
- Navigation modes simplified - if you use
TopTab,BottomTab, orBookmark, change to:[navigation] mode = "Tab"
- Default
Decorationschanged toTransparenton macOS (wasEnabled) - Removed:
TopTab,BottomTab, andBookmarknavigation modes - Available modes:
Plain,Tab,NativeTab(macOS only) - Tab color configuration simplified: Removed
tabs-foreground,tabs-active-foreground, andtabs-active-highlight- Use
tabsfor inactive tab text and border color (default:#cccccc) - Use
tabs-activefor active tab text color (default:#ffffff)
- Use
- The old padding api became margin:
# It will apply margin rules to the main container # CSS-Like margin = [10] # (10px to all) margin = [10, 5] # (top and bottom margin are 10px, right and left margin are 5px) margin = [10, 5, 15, 20] # (top margin is 10px, right margin is 5px, bottom margin is 15px, left margin is 20px) # It will apply margin rules to panels [panel] margin = [5] # (5px to all) row-gap = 0 # (0px) column-gap = 0 # (0px)
Technical Details
- Complete rendering architecture rewrite for GPU-based UI
- Parser now supports APC sequences for Kitty graphics protocol
- Removed legacy layer/quad rendering system
- Added Metal backend for macOS, split WebGPU backend for cross-platform
- New
kitty_virtualmodule for placeholder encoding - Graphics cleanup with LRU eviction strategy (evicts up to 5 oldest when atlas full)
- Added 5 unit tests for graphics rendering (positioning, LRU, deduplication)