Skip to content

Releases: raphamorim/rio

v0.3.0

03 Apr 19:27

Choose a tag to compare

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 y to quit or n to cancel
    • Optional native macOS quit dialog via window.macos-use-quit-dialog config
  • 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-theme configuration 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-x and macos-traffic-light-position-y
    • Defaults to standard macOS positioning (11.4, 16.1)
    • Not available in Tab navigation mode
  • 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_PATH variable: New template variable that shows a home-relative shortened path (e.g. ~/Documents/a/rio or …/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, or Bookmark, change to:
    [navigation]
    mode = "Tab"
  • Default Decorations changed to Transparent on macOS (was Enabled)
  • Removed: TopTab, BottomTab, and Bookmark navigation modes
  • Available modes: Plain, Tab, NativeTab (macOS only)
  • Tab color configuration simplified: Removed tabs-foreground, tabs-active-foreground, and tabs-active-highlight
    • Use tabs for inactive tab text and border color (default: #cccccc)
    • Use tabs-active for active tab text color (default: #ffffff)
  • 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_virtual module 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)

v0.2.37

19 Dec 18:13

Choose a tag to compare

  • Support window bg color via OSC.
  • Fix vi cursor not displayed when moving.
  • Fix font loader for fallbacks and extra.
  • Fix font size updating through config.

Commits

v0.2.36

17 Nov 23:44

Choose a tag to compare

Changelog

v0.2.35

03 Nov 17:28

Choose a tag to compare

  • GPU memory usage drop 83%.
  • Sync input render logic (macos).

Changelog

v0.2.34

03 Nov 14:30

Choose a tag to compare

  • Fix issue for finding fonts introduced with the v0.2.33 new font loader.

Changelog

v0.2.33

30 Oct 15:28

Choose a tag to compare

  • Platform-specific configuration improvements #1341:
    • Added support for platform-specific environment variables via env-vars field in platform config
    • Platform-specific env-vars are now appended to global env-vars instead of replacing them
    • Fixed configuration inheritance: platform overrides now use field-level merging instead of replacing entire sections
    • Window, Navigation, and Renderer settings can now be partially overridden per platform without duplicating all fields
    • Added theme field to platform config for per-platform theme selection
    • Shell configuration continues to use complete replacement for simplicity
  • Fix ScrollPageUp and ScrollPageDown actions not working in custom keybindings #1275.
  • Fix Noticeably slower startup compared to wezterm, foot #1346.
  • Fix Font loader taking a LOT of time to load fonts #1339.
  • Fix Rio panics on launch on a Raspberry Pi 5 #1332.
  • Fix kitty keyboard protocol.
  • Support reporting terminal version via XTVERSION.

Changelog

v0.2.32

16 Oct 21:44

Choose a tag to compare

  • Updated WGPU to v27.0.1.
  • Fix No backend are enabled on FreeBSD #1235.

Changelog

v0.2.31

26 Sep 11:45

Choose a tag to compare

  • Update Rust to v1.90.
  • Fix kitty keyboard recognition.
  • Breaking: Simplified key binding escape sequences
    • Replaced separate text and bytes fields with a single esc field
    • Escape sequences are now sent directly to the PTY without text manipulation
    • Migration: Replace bytes = [27, 91, 72] with esc = "\u001b[H"
    • Migration: Replace text = "some text" with esc = "some text"
    • Example: { key = "l", with = "control", esc = "\u001b[2J\u001b[H" } to clear screen
  • Fix key binding conflicts: Resolved issues where keys like PageUp, PageDown, and Alt+Enter required explicit "None" bindings before they could be reassigned
    • Simplified binding conflict resolution logic to automatically remove conflicting default bindings
    • User-defined bindings now always take precedence without requiring placeholder "None" entries

Changelog

v0.2.30

13 Sep 11:38

Choose a tag to compare

  • Fix Debian/Ubuntu package installation: Resolved terminfo conflicts with system packages #1264
    • Debian (.deb) packages no longer include terminfo files to avoid conflicts with ncurses-term
    • Users on Ubuntu 22.04 and older need to manually install terminfo after package installation
    • Debian 13+ and Ubuntu 24.04+ users get terminfo from system's ncurses-term package
    • RPM packages continue to include terminfo as before
  • Add audible & visual bell support #1284.

Changelog

  • ab8b2a5 prepare 0.2.30
  • 0d5a3d5 revert to old stroke but fixing limits
  • dc85bf6 Merge branch 'fix-diagonal'
  • 0c6590d update DiagonalRisingBar DiagonalCross and DiagonalFallingBar (ref: #1297)
  • 48d88b7 fix DiagonalRisingBar calculation
  • 58fdc9d flake.lock: Update (#1296)
  • 1b5c90a flake.lock: Update (#1292)
  • 88eca6b fix debian conflicts with ncurses-term (#1287)
  • 7fb3971 update releases.md
  • 6c6931e docs: Update releases.md with bell support feature
  • 1967b19 Add audible & visual bell support (#1284)
  • 7f387a9 flake.lock: Update
  • 6cb8ab7 fix lint
  • 92950bb update frontends/rioterm/src/context/mod.rs
  • e049107 add calculate_selection_damage_impl
  • 1ebcd1b Update sugarloaf/src/font/mod.rs
  • 3300a50 Merge branch 'main' into pr-1282
  • 3b12c2d fix characters become invisible at very large sizes (closes #1268)
  • 37cd0ef fix lint
  • 644983a Improve font cache implementation with DashMap
  • 6632a44 fix Accidental inversion of bool
  • 37fb0b1 Don't copy data as much; use more SharedData
  • a7be7cb Clear FONT_DATA_CACHE when fonts are changed
  • c202394 Update to rust 1.89
  • 07b4a5a update com.rioterm.Rio.metainfo.xml

v0.2.29

17 Aug 22:49

Choose a tag to compare

Changelog

  • 126cd31 update deps
  • ec583cb docs: update releases.md with recent fixes
  • b962da8 flake.lock: Update
  • 2c03db9 fix blinking cursor (closes #1269)
  • 1e1acbd fix Rio uses UNC (?) path as working directory, breaking Neovim subprocesses
  • 6557e7e add NSCameraUseContinuityCameraDeviceType to plist
  • eb9fe5f update com.rioterm.Rio.metainfo.xml