Skip to main content

Looking ahead to 0.1.0

· 2 min read

Hey there folks!

The Rio Terminal is a side project based on my free time (low this year due to being a new parent), when I started to work on Rio my goal was to learn mostly and eventually, I ended up using Rio in my daily life. However, the terminal wasn't designed to fit people's usage more than myself and would be quite hard to scale the source code to fit some of the feature requests, considering I never expected Rio to be used besides myself.

As I open-sourced Rio, many people started to use and eventually requests came in, making me realize that parts of the terminal would have to evolve to comprehend such requests and would eventually mean a rewrite of core parts along with incremental changes in other parts.

I have been working on 0.1.0 release since last December and still have a lot to be done (Github backlog for 0.1.0). It is hard to give an estimation because there's no regular promised cadence and, I am not in a rush because it will require a lot of further testing and writing a lot of tests as well. Releases are likely to be made in small versions, is very likely that 0.1.0 will start with MacOS with Windows (I hope so at least).

Summary of 0.1.0 goals:

  • Split screens.
  • Stabilization of different fonts besides the default one.
  • New windowing, migration from Winit to a project created for Rio purposes, called WA. WA uses gaming directives and is a mix of windowing architecture from not-fl3/miniquad and makepad/makepad along with winit.
  • Sixel support.
  • Font ligatures.
  • Auto-Italicize and Auto-Bolding fonts.
  • Addition of SIMD support for a few critical/repetitive operations.
  • Emoji support.
  • Give some love to Linux X11/Wayland to bring the native experience closer.

Note: Finally got a second computer with Windows/Linux, and it will make it insanely easier to work on Rio than I was doing before.

Settings UI, Welcome UI, Adaptive theme, and more

· 5 min read

This post also includes changes of v0.0.19.

Highlight #1: New window API (breaking change)

Configuration properties: window_height, window_width and window_opacity has been moved to a new window/background API:

# Window configuration
# • width - define the initial window width.
# Default: 600
# • height - define the initial window height.
# Default: 400
# • mode - define how the window will be created
# - "Windowed" (default) is based on width and height
# - "Maximized" window is created with maximized
# - "Fullscreen" window is created with fullscreen
width = 600
height = 400
mode = "Windowed"

From now and on you can also set image as background.

# Background configuration
# • opacity - changes the background transparency state
# Default: 1.0
# • mode - defines background mode between "Color" and "Image"
# Default: Color
# • image - Set an image as background
# Default: None
mode = "Image"
opacity = 1.0
path = "/Users/rapha/Desktop/eastward.jpg"
width = 200.0
height = 200.0
x = 0.0

Although you can define opacity though the new configuration API it does not work either for the image neither for the window. This something will be fixed in upcoming releases. An example below using the configuration we just saw.

Example background

note: The image above is from the Eastward game

Highlight #2:

Rio terminal is now also available in .

cargo install rioterm

Highlight #3: Alpine Linux, openSUSE and Nix home manager.

• Rio has landed in Nix home manager: nix-community/home-manager/pull/4118 and huge props to @otaviosalvador for making it possible.

• Rio has landed in Alpine Linux: and huge props to @androw for making it possible.

• Rio has landed in openSUSE: and huge props to @androw for making it possible.

Highlight #4: Welcome screen and default creation of configuration file

Now Rio terminal does create the configuration file per first initialization.

Welcome message

Highlight #5: Settings UI

After v0.0.19, Rio will start to provide a custom internal settings UI, where you can manage your configuration without edit the file.

Settings UI

Note: Not all the configuration options has been ported, so you would still need to use the config file for specific configuration updates.

Highlight #6: Error handling

Configuration errors, command errors, font not found and etecetera are not silent anymore. This version introduces an UI for error handling.

Error handling

Highlight #7: Adaptive theme

Rio support theme based on the system theme (light and dark). This configuration only works for Web, MacOS and Windows.

light = "belafonte-day"
dark = "belafonte-night"

Example of usage with MacOS:

Settings UI

Highlight #8: Blinking cursor

Rio now supports blinking cursor.

# Blinking Cursor
# Default is false
blinking-cursor = true

Highlight #9: Navigation mode called "Plain"

Navigation mode "Plain" is perfect if you use tmux/zellij or anything similar.

Plain navigation mode will simply turn off any platform key binding, will not add any key binding (like creation of tabs, windows, panels and other platform key bindings). Note it also get rid of platform key bingins such as shift+control+c for example, to re-add it you would need to map yourself.

This mode is great if you want configure every single bit of how Rio key bindings will work.


mode = "Plain"

Full changelog of v0.0.19

  • Fix for retrieving shell environment variable when running inside of Flatpak sandbox (Ref:
  • Rio terminal is now also available in .
  • Added "navigation.mode = "Plain"", it basically disables all platform key bindings for tabs, windows and panels creation (Ref
  • Support for blinking cursor (Ref: (this option is not enabled by default).
  • Migrated font-kit to a custom font loader.
  • Support to MacOS tile window positioning feature (left or right).
  • Added support to MacOS display native top bar items.
  • Support to adaptive theme (theme selection based on user system theme variant "dark" or "light").
  • Implemented "ScrollPageUp", "ScrollPageDown", "ScrollHalfPageUp", "ScrollHalfPageDown", "ScrollToTop", "ScrollToBottom", "ScrollLineUp", "ScrollLineDown" (Ref:
  • Support to "" (it overwrites regular, bold, bold-italic and italic font families).
  • Added a welcome screen UI.
  • Added a settings UI.
  • Exposes "RIO_CONFIG" environment variable that contains the path of the configuration.
  • Rio creates a configuration file with all defaults if does not exist.
  • Added "OpenConfigEditor" key binding for all platforms.
  • Configuration property "editor" was removed.
  • Created Assistant, Rio terminal UI for display error (Ref:
  • Fix 'Backspace' keypress triggers Ctrl+h keybinding in Zellij instead of deleting character. (Ref:
  • Implemented "TERM_PROGRAM" and "TERM_PROGRAM_VERSION" (Ref:
  • Whenever native tabs is on disable macos deadzone logic.

New font configuration API and native tabs

· 2 min read

This post also includes changes from v0.0.16 and v0.0.17.


  • New font configuration API.
  • Native Tabs for MacOS.

Breaking change: New font API

If you don't use Rio default font configuration you will be affected by this change.

A new API has been introduced to select fonts, now you can configure even different font families for "regular", "bold", "italic" and "bold-italic".

size = 18

family = "cascadiamono"
style = "normal"
weight = 400

family = "cascadiamono"
style = "normal"
weight = 800

family = "cascadiamono"
style = "italic"
weight = 400

family = "cascadiamono"
style = "italic"
weight = 800

Native Tabs (macOs only)

Native tabs have arrived for MacOS users.

native tab example

To configure it you will need to update the configuration file and set navigation mode as "NativeTab":

mode = "NativeTab"

Changelog of v0.0.17 along with v0.0.16

  • Configuration "font" does not work anymore, a new configuration API of font selection has been introduced.
  • Action "TabSwitchNext" and "TabSwitchPrev" has been renamed to "SelectNextTab" and "SelectPrevTab".
  • Support to "NativeTab" (MacOS only).
  • Support for kitty's keyboard protocol ("CSI u"). Ref:
  • Added new actions for tab selection: "SelectTab1", "SelectTab2", "SelectTab3", "SelectTab4", "SelectTab5", "SelectTab6", "SelectTab7", "SelectTab8", "SelectTab9", "SelectLastTab".
  • Support lowercased action and fix overwrite for actions in custom key bindings.
  • Added action "Minimize" for minimize Rio terminal window.
  • Added action "ClearHistory" for clear terminal saved history.
  • Added action "ReceiveChar" for custom key bindings.
  • New default key bindings for Linux and Windows so that conflicts with readline key bindings are removed.
  • Winit Version 0.29.1-beta.
  • Allow paste with the middle mouse of the button (fixes
  • Support startup notify protocol to raise initial window on Wayland/X11.
  • Fix Double-tap by touchpad on the titlebar doesn't maximize/unmaximize the window in GNOME 44, Wayland.
  • Fix tab/breadcrumb bug introduced in 0.0.15
  • Introduce new configuration property: "navigation.macos-hide-window-button".

Support to tabs, custom key bindings, performance improvements and other updates

· 4 min read

This post also includes changes from v0.0.13 and v0.0.12.


  • Navigation.
  • Custom key bindings.
  • Performance updates.
  • Color automation for tabs.

Rio allows to choose navigation between the following options:

  • CollapsedTab
  • BottomTab
  • TopTab
  • Breadcrumb

You can set the navigation mode in the configuration file. An example of configuration:

mode = "BottomTab"
use-current-path = true
clickable = false

Note: BottomTab and TopTab does not support click mode yet.

Below some images with different navigation setups:

  • First image: BottomTab navigation x11.
  • Second image: TopTav navigation wayland.

example navigation x11

second example navigation Wayland

  • First image: Breadcrumb navigation macos.
  • Second image: BottomTab navigation macos.

example breadcrumb navigation macos

example BottomTab navigation macos

More info about navigation in docs/navigation.

Sugarloaf performance improvements

Performance improvements with Sugarloaf de-duplication of input data.

Before an average sugarloaf.stack call would cost around "~253.5µs" and now it does cost an average of "~51.5µs".

The algorithm is effective whenever the terminal has a lot of repetition like empty spaces. The benchmark test below was made rendering 100.000 characters that had repetition:

second example navigation Wayland

The de-duplication algorithm in the renderer considerably reduced the initial rendering time from avg 6ms to 2ms and using Rio in a large screen (>=136 columns) has dropped from 36ms to 8ms.

Tweet reference:

Color automation for navigation

Rio allows to specify color overwrites for tabs based on program context.

The example below sets #FFFF00 as color background whenever nvim is running.

example navigation with color automation second example navigation with color automation

The configuration would be like:

color-automation = [
{ program = "nvim", color = "#FFFF00" }

Custom key bindings

Now you can configure custom key bindings for Rio terminal.

Below an example of two custom key bindings:

keys = [
{ key = "q", with = "super", action = "Quit" }
# Bytes[27, 91, 53, 126] is equivalent to "\x1b[5~"
{ key = "home", with = "super | shift", bytes = [27, 91, 53, 126] }

For example, in the first binding will tell Rio to close the terminal every time that "q" key is pressed along with "super" (in MacOS the "super" key is "command").

More info about custom key bindings in docs/key-bindings.

Changelog of v0.0.15 along with 0.0.13 and 0.0.12

  • Introduce configurable navigation with the following options: "CollapsedTab" (default), "Breadcrumb", "TopTab" and "BottomTab".
  • Performance improvements with Sugarloaf de-duplication of input data. Before: "~253.5µs" and now "~51.5µs".
  • Introduce "navigation.use-current-path" which sets if a tab/breacrumb should be open from the current context path.
  • Fix rendering unicode with 1 width glyphs (fix #160).
  • Increased max tabs from 9 to 72.
  • Default colors "selection-foreground" and "selection-background" has changed.
  • Default colors "tab" and "tab-active" has changed.
  • Implementation of custom key bindings (#117).
  • Fix .deb packing in GH Actions.
  • Fix key binding for switch tab next (MacOS only).
  • Fix scroll when copying text outside of offset.
  • Fix copy key bindings.
  • Fix Fuzzy Finder issue (#132).
  • Introduce Copa (Alacritty's VTE forked version to introduce new sequences/instructions in next versions).
  • Upgraded Winit to 0.29.0-beta.0
  • Support for keybindings with dead keys.
  • "Back"/"Forward" mouse buttons support in bindings.
  • Fix unconditional query of xdg-portal settings on Wayland
  • Fix "Maximized" startup mode not filling the screen properly on GNOME Wayland.
  • Fix Default Vi key bindings for "Last"/"First" actions not working on X11/Wayland.
  • Set "padding-x" to 0 for non-macos.
  • Set "app_id"/"WM_CLASS" property on Wayland/X11.
  • Strip binary is on for release builds.
  • Each paste or key binding that has writing leads to clear selection and scroll bottom.
  • Fixed over-rendering when scrolling.
  • Fix selection.
  • Support to copy using VIM.
  • Fix for MacOS deadzone changing cursor to draggable on window buttons.
  • Fix for scroll using tmux.

Rio 0.0.11

· One min read

Example of Rio v0.0.11 using the new sugarloaf:

v0.0.11 includes v0.0.10 with a bug fix of CachedSugar for font styles.

  • Major rewrote of sugarloaf.
  • Sugarloaf: Performance improvements around 80-110%.
  • Sugarloaf: Introduced CachedSugar.
  • Sugarloaf: Usage of PixelScale.
  • Sugarloaf: Line-height support.
  • Open new tab using the current tab directory.
  • Fix some symbols break the horizontal and vertical alignment of lines (ref #148).
  • Fix font size configuration is confusing (ref #139).
  • Fix Glyph not rendered in prompt (ref: #135).
  • Use fork by default in test context.
  • Updated terminfo.
  • Increased default font size to 18.
  • Move to next and prev tab using keybindings.
  • Setting editor by keybindings and new property called "editor" in configuration file.
  • Rio creates ".deb" packages (canary and release).
  • Binary size optimization (ref: #152) by @OlshaMB
  • A huge thanks to @ralgozino for all bug reporting and testing through this version development.

Rio 0.0.9

· 4 min read
  • Multi window support.
  • Support to older MacOS versions (older or equal to Big Sur).
  • Possibility of choose between Spawn and Fork.
  • Inverse instruction.
  • Introduced "rio" terminfo.
  • Multi byte rendering fixes.
  • Select shell and working-dir in configuration file.
  • FreeBSD support and added to FreeBSD ports.


Rio release 0.0.9 is finally here, there's a lot of updates to cover so let's get started. I also would like to remind you that Rio is still unstable. This release adds a lot of bug fixes and feature additions in order to make Rio terminal stable.

Multi window support

Rio terminal has added the support to multi window feature.


  • MacOS: Command + N
  • Windows: Alt + N
  • Linux: Control + N

Support to older MacOS versions (older or equal to Big Sur).

Now it is available for versions below Ventura (Rome).

Choose between fork or spawn

Decide which one to use in the configuration file by the usage of property "use-fork":

use-fork = false

Defaults for POSIX-based systems:

  • MacOS: spawn processes
  • Linux/BSD: fork processes

Inverse instructions

Before the v0.0.9, programs were not correctly rendered in the terminal due to the lack of inverse instruction in Rio.

For example, ranger uses inverse to show the active path.


Rio before 0.0.9


Rio now

Introduced "rio" terminfo

Terminfo (formerly Termcap) is a database of terminal capabilities and more. For every (well almost) model of terminal it tells application programs what the terminal is capable of doing.

It tells what escape sequences (or control characters) to send to the terminal in order to do things such as move the cursor to a new location, erase part of the screen, scroll the screen, change modes, change appearance (colors, brightness, blinking, underlining, reverse video etc.).

After about 1980, many terminals supported over a hundred different commands (some of which take numeric parameters).

Rio terminal has now it's own terminfo:

$ echo $TERM

More info here.

Fixes for multi-byte rendering

Before the v0.0.9, multi-byte characters were not correctly rendered in the terminal.

Before: As reported in the issue #127



Configuration file addition: shell

Now you can set "shell.program" to the path of your favorite shell, e.g. "/bin/fish".

Entries in "shell.args" are passed unmodified as arguments to the shell.

shell = { program = "/bin/zsh", args = ["--login"] }


  • MacOS: /bin/zsh --login
  • Linux/BSD: user login shell
  • Windows: powershell

Configuration file addition: working_dir

Directory the shell is started in. If this is unset the working directory of the parent process will be used.

This configuration only has effect if use-fork is disabled

working_dir = "/Users/raphael/Documents/"

Configuration file removal: Advanced

Breaking changes for configuration file regarding "Advanced". The configuration "Advanced" has moved to root level and "disable-render-when-unfocused" renamed to "disable-unfocused-render".

theme = "dracula"

disable-render-when-unfocused = true


theme = "dracula"
disable-unfocused-render = true

Changelog of v0.0.9

  • The configuration "Advanced" has moved to root level and "disable-render-when-unfocused" renamed to "disable-unfocused-render".
  • Support to spawn and fork processes, spawn has became default. Spawn increases Rio compatibility in a broad range, like old MacOS versions (older or equal to Big Sur). However, If you want to use Rio terminal to fork processes instead of spawning processes, enable "use-fork" in the configuration file.
  • Introduced "RIO_LOG_LEVEL" variable usage.
  • Increased max tabs from 6 to 9.
  • Fix Incorrect cursor position when using multi-byte characters (Ref: #127)
  • Fix bug "black screen with nearly zero interactivity" and new tab hanging.
  • Fix cursor disappearing after resize.
  • Introduction of "shell" and "working_dir" in configuration file.
  • Multi window support #97.
  • Corrections on select and scroll experience (it was using wrongly font-bound for line calculation).
  • Add selection color to the theme config (closed #125).
  • Implemented Inverse (fix #92).
  • Proper choose formats that matches Rio requirements (related #122).
  • Corcovado: Filter windows crate dependency to only Windows targets (related: #119).
  • Teletypewriter: Fixes for musl as target_env (related: #119).
  • FreeBSD support, implementation by yurivict (Commit, Ref: #115)

Rio 0.0.7

· 3 min read

v0.0.7: Highlights

  • Support to custom fonts
  • Configuration reload
  • x11 and wayland stabilization
  • Sugarloaf ported to WebAssembly
  • Addition to NIX OS packages (kudos to @otavio, PR: NixOS/nixpkgs/pull/237664)
  • Styles properties have been moved to root level


Rio release 0.0.7 is finally here, there's a lot of updates to cover so let's get started. I also would like to remind you that Rio is still unstable. This release adds a lot of bug fixes and feature additions in order to make Rio terminal stable.

Breaking change: Styles properties have been moved to root level

The only breaking change of v0.0.7 is that styles properties such as "font", "theme" and "font-size" moved to the root level.


cursor = '|'
font-size = 18
theme = "lucario"


cursor = '|'
theme = "lucario"
font-size = 18

Reload automatically when the configuration file has changed.

Any file update in the configuration file will trigger a render operation in Rio terminal with the new configuration.

If you have any suggestion of configuration ideas to Rio, please feel free to open an issue.

width and height is not longer available in the configuration file.

The property width and height doesn't work anymore after the 0.0.7 release.

Before you could set the initial width and height of the screen, this configuration is not longer possible. It was removed due to compatibility with different targets.

Stabilization of Linux x11 and Wayland

In older versions of Rio terminal it was possible to actually use Rio but it was slow and buggy for many users. Many fixes has been done in the v0.0.7 to bring the experience of Linux users close to what MacOS have right now.

The tweet below have a video demo that shows Rio running with X11:

Custom font rendering

Now you can actually use different installed fonts by changing the property "font".

The example below considers that you have "Fira code" font installed in your machine.

font = "Fira code"

A quick look of how font updates looks like in v0.0.7:

Sugarloaf ported to WebAssembly

The Rio support to WASM has moved one step ahead by introduction of Sugarloaf (Rio renderer) to WebAssembly.

In the image below you can see it in action:

Changelog of v0.0.7

  • Breaking changes for configuration file regarding "Style" property.
  • Fix Background color not entirely set on vim #88
  • Scroll now works for x11 and wayland.
  • No longer renders to macos and x11 windows that are fully occluded / not directly visible.
  • Introduced "window-opacity" config property for WebAssembly and Wayland builds.
  • Add permissions instructions to Rio macos builds (Fix #99).
  • Fixes for x11 and wayland rendering (Related: #98 and #100).
  • Performance fixes (Related: #101).
  • Sugarloaf WebAssembly support.
  • Fixed resize for all contexts: removed the glitch when resizing and switching between tabs.
  • Fixed cursor inconsistencies #95.
  • Added command line interface support ("--help", "--version", "-e" and "--command").
  • Added a fallback for WPGU request device operation: downlevel limits, which will allow the code to run on all possible hardware.
  • Added "padding-x" to configuration.
  • Reload automatically when the configuration file is changed (#69).
  • Fix "Ctrl+D" and "exit" command not closing the app (#87).
  • Changed default "light-black" color.

Rio 0.0.8

· 3 min read

v0.0.8: Highlights


Rio release 0.0.8 is finally here, there's a lot of updates to cover so let's get started. I also would like to remind you that Rio is still unstable. This release adds a lot of bug fixes and feature additions in order to make Rio terminal stable.

Microsoft Windows

Added support to Microsoft Windows.

Windows 10: Demo windows in use

Windows 11: Demo windows in search

Homebrew as Cask

Homebrew is a free and open-source software package management system that simplifies the installation of software on Apple's operating system, macOS.

Rio has been added as a cask to their package source. To install Rio with homebrew you need to run the command below:

brew update && brew install --cask rio

Github reference:

Homebrew as Formula

Rio has been added as a formula to their package source. To install Rio with homebrew you need to run the command below:

brew update && brew install rio

Github reference:

Selection improvements and increase/decrease font-size in a session

The version v0.0.8 has added the following missing functionalities: Scroll and select, Semantic and line selection and the ability to increase, decrease and reset font size using keyboard shortcut during session coming for Rio terminal.

Below you can see a demo with all those functionalities:

Migration to Corcovado

Rio terminal migrated from Mio to Corcovado. Corcovado is a maintained fork of mio 0.6.x along mio-signal-hook, mio-extras and using Windows API that works in Windows 11. It uses Rust edition 2021 instead of 2018.

Corcovado also uses Rust standard library for net and io instead of Mio 0.6.x.

Changelog of v0.0.8

  • Added generation of ".msi" and ".exe" files to the release pipeline (stable and canary).
  • Support to Microsoft Windows 11.
  • Ability to in/decrease font size using keyboard shortcut during session (ref: #109)
  • Inverted Canary and Stable icons.
  • ANSI mouse reports (e.g: scroll and click working on VIM).
  • Scroll and apply selection.
  • Semantic and line selection.
  • Rio is available in Homebrew casks and formulas.
  • Rio stable versions are notarized now.
  • Migration of mio, mio-extras, mio-signal-hook to Corcovado.
  • Changed default black color to "#4c4345".
  • Fix mouse position for when selecting text.

Release 0.0.6

· 2 min read

Rio release 0.0.6 is finally here, there's a lot of updates to cover so let's get started. I also would like to remind you that Rio is still unstable. This release adds a lot of bug fixes and feature additions in order to make Rio terminal stable.

Underline and strikethrough style

Support to text styling as such "Underline" and "Strikethrough".

Tabs support

Tabs has been added to Rio terminal for macos and linux platform.

The shortcuts:

  • Create tab: Logo key (Command in macos) + T.
  • Close tab: Logo key (Command in macos) + W.
  • Switch tab: Control key + Tab key.

Below you can see an example of usage:

Note: There's a limit of maximum of 6 tabs for now.

Support to Beam and Underline cursors

Beam and underline cursor support has been added to Rio terminal. Also, block cursor and IME state allow a character to be visible.


  • Fix: support to clipboard in linux by @joseemds.
  • Font style for custom fonts by @OlshaMB (closed #80 and #81)
  • Text styles Underline and Strikethrough (closed #79).
  • Update default colors for tabs/tabs-active.
  • Tabs support.
  • Fix rendering tab and hidden chars by replacing to space by @niuez, (closed #56).
  • Block cursor hover a character and still allow it to be visible.
  • Support to caret Beam and Underline cursor #67 by @niuez.
  • Fix panics if custom font is not found #68.
  • MacOs ignore alt key in cntrlseq (same behavior as, Hyper, iTerm and etecetera).

Release 0.0.5

· 2 min read

Rio release 0.0.5 is finally here, there's a lot of updates to cover so let's get started. I also would like to remind you that Rio is still unstable. This release adds a lot of bug fixes and feature additions in order to make Rio terminal stable.

New configuration path

Configuration path has changed from {$HOME}/.rio/ to {$HOME}/.config/rio.

Changes were applied for macOS and Linux.

Linux Support

Rio is now available to Linux, build information was added in the install page.

Linux support

Linux builds are considered less stable than macOs, due to macOs features availability comparison.

Themes Support

A new property was added to Rio configuration file called "theme". You can set the theme that you want to use and Rio will look in the folder "themes" in the configuration path.

Themes support

Dracula theme example:

Example dracula

Bold and italic style

Support to text styling as such "bold" and "italic".

Themes support


  • Fix to render specific 24bit colors #66 by @niuez.
  • Cross build for arm64 and x86
  • Bold and Italic support #33.
  • Add RioEvent::ColorRequest events to write color updates on pty.
  • Theme support #42.
  • Fix font-size dependency for serialization
  • Fix cursor visibility on VI mode and scroll #51
  • Performance fixes for rendering from teletypewriter updates.
  • Fix scale issues for 1.0 scale factor or using monitor with different scale factor. #50
  • Improved release process to only contain file. #54