Skip to content
CAI
Software that uses CAICheck a score

raphamorim/rio

68.5

Adequate · 29 September 2026

179.6k

lines of production code

Rust

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Rio is a cross-platform terminal emulator built in Rust that provides a high-performance, GPU-accelerated rendering engine with support for Metal, Vulkan, and WebGPU. It features a modular architecture with a standalone terminal core for VT parsing and grid management, a custom event loop library for PTY I/O, and a dedicated windowing abstraction layer for macOS, Windows, and Linux (X11/Wayland). The system supports advanced features such as inline images, custom glyph protocols, touch gestures, and cross-platform desktop notifications, while also exposing its core logic via C APIs for embedding in other applications.

How it got here

2022–2023 — Multi-platform rendering and PTY abstraction

29 changes.

The project established a cross-platform foundation by extracting the Sugarloaf GPU rendering engine and the Teletypewriter PTY abstraction as standalone libraries, enabling support for Windows, macOS, and Linux. This period focused on implementing native backends for GPU acceleration and pseudo-terminals, while restructuring the codebase to support WebAssembly and comprehensive desktop integration.

2024 — Rio windowing and rioterm frontend

33 changes.

The project established a new cross-platform windowing library, rio-window, with native implementations for macOS, Windows, Linux (X11/Wayland), and Web, replacing previous platform-specific code. Concurrently, the rioterm frontend was developed with a centralized router, advanced input handling via the Kitty protocol, and enhanced UI components like a command palette and touch gesture support.

2025–2026 — embeddable terminal core and GPU rendering

20 changes.

This period focused on extracting Rio's terminal logic into a standalone, embeddable core via the librio C API and rio-vt crate, enabling integration into non-Rust hosts and web environments. Simultaneously, the Sugarloaf rendering backend underwent a major rewrite to support a persistent GPU grid, cross-platform shader backends, and advanced features like color fonts and VR presets.

Features

Add Rioterm frontend and WASM build infrastructure

This change introduces the Rioterm terminal frontend to the project, including its build script (build.rs) which handles Windows icon resource compilation and macOS CoreGraphics weak-linking to prevent launch failures on older systems. It also adds the necessary LICENSE files for both the rioterm and wasm frontend crates, and establishes the WebAssembly build tooling (Makefile, index.html) for compiling and running the terminal in a browser environment.

frontends · high confidence

Add built-in CRT and VR shader presets

The application now ships with two built-in shader presets: a 'newpixie-crt' filter that emulates retro CRT aesthetics (curvature, scanlines, vignette, ghosting) and a 'fubax\_vr' suite that enables VR headset usage for any game, featuring stereo vision, lens distortion correction, chromatic aberration adjustment, sharpening, and a virtual nose overlay to reduce motion sickness. These presets are embedded in the binary and loaded at runtime via the \builtin\ module, which writes the shader sources and configuration files to temporary directories before parsing them as \ShaderPreset\ objects.

sugarloaf/src/components/filters/builtin · high confidence

Add glyph protocol support with outline decoding and registry

The rio-graphics crate now includes a new glyph protocol implementation, gated behind the \glyph\ feature. This adds a TrueType \glyf\ outline decoder that parses simple-glyph records into neutral outlines and path commands, enforcing a 64 KiB decoded-size budget per outline to prevent excessive memory usage. It also introduces a per-terminal \GlyphRegistry\ that stores client-registered glyphs (including monochrome \Glyf\ and color \ColrV0\/\ColrV1\ payloads) in a FIFO-limited glossary (1024 entries), allowing the renderer to resolve codepoints to custom glyph outlines without re-transmitting data. This change enables the terminal to render custom glyphs defined via the Glyph Protocol, expanding the range of supported character representations beyond standard system fonts.

rio-graphics · high confidence

Add man pages for Rio terminal, configuration, and key bindings

Users can now access manual pages for the Rio terminal emulator, its TOML configuration file format, and its default key bindings. This change introduces new source files in the \extra/man\ directory (written in scdoc format) and a Makefile to build and install them to the system man directory, allowing users to view documentation via standard commands like \man rio\ and \man 5 rio\.

extra · high confidence

Add rio-window examples demonstrating window management and event loop control

The rio-window crate now includes a suite of examples in the rio-window/examples directory that demonstrate core windowing capabilities. These include child window creation (child\_window.rs), various event loop control flow modes such as Wait, WaitUntil, and Poll (control\_flow.rs), manual event pumping (pump\_events.rs), and on-demand event loop execution (run\_on\_demand.rs). Additional examples showcase platform-specific features like X11 window embedding (x11\_embed.rs) and comprehensive window state management with custom cursors and icons (window.rs). Utility modules for window filling and tracing are also provided to support these demonstrations.

rio-window/examples · high confidence

Add touch gesture support and hint matching logic

The terminal now supports touch gestures on compatible devices, including tap-to-select, tap-to-scroll, and two-finger pinch-to-zoom for adjusting font size. Additionally, a new hint system has been introduced, allowing users to interact with terminal content via regex-based hints that can be triggered and clicked.

frontends/rioterm/src/screen · high confidence

Added Wayland protocol type implementations for cursor, scaling, and activation

The Wayland platform implementation now includes type definitions and dispatch handlers for several Wayland protocols. This adds support for custom cursor rendering via \wl\_shm\, fractional scaling via \wp-fractional-scaling-v1\, window viewporting via \wp-viewporter\, and user attention requests via \xdg-activation-v1\. It also introduces bindings for the \ext-background-effect-v1\ protocol (for background blur) and the KDE-specific \org\_kde\_kwin\_blur\ protocol, enabling compositor-specific blur effects on Linux.

_rio-window/src/platform\impl/linux/wayland/types · high confidence

Added Windows IOCP backend for mio

This change introduces the Windows-specific implementation for the mio event library, located in \corcovado/src/sys/windows\. It adds the \Awakener\, \Selector\, and \Binding\ components necessary to map mio's readiness-based API onto Windows' completion-based IOCP model, enabling the library to function on Windows platforms.

corcovado/src/sys/windows · high confidence

Added example programs for non-blocking I/O and PTY spawning

The teletypewriter examples directory now includes two new Rust programs: \non\_blocking.rs\, which demonstrates how to read from stdin in a non-blocking manner using a separate thread and a channel, and \spawn.rs\, which shows how to create a pseudo-terminal (PTY) with a fork, write commands to it, and read the output byte-by-byte. These examples serve as practical guides for integrating teletypewriter's core PTY and I/O capabilities into applications.

teletypewriter/examples · high confidence

Added terminal visualization and testing scripts

New utility scripts have been added to misc/scripts to help users and developers verify terminal capabilities. These include scripts for displaying ANSI color palettes (all-styles, background-colors, primary-colors), testing text formatting and various underline styles (text, underlines), and inspecting Unicode drawable characters like box-drawing and braille (drawable-chars). Additionally, test scripts for the iTerm2 image protocol (test-iterm2-image-protocol.sh) and OSC 9;4 progress bar handling (test-progress-bar.sh) are now available, along with the imgcat utility for inline image display.

misc/scripts · high confidence

Comprehensive configuration schema overhaul with new visual and platform options

The configuration system has been completely restructured into modular components, introducing several new user-facing capabilities. Users can now customize visual effects including a configurable cursor trail (with color, opacity, and decay settings) and window blur styles (including macOS liquid glass). The tab navigation system offers new controls such as hiding the strip for a single tab, setting maximum tab width, and adjusting unfocused split opacity. Platform-specific settings allow distinct configurations for Linux, Windows, and macOS, including per-platform shell and window properties. Additional features include configurable bell behavior (audio and tab indicators), enhanced hint system rules with custom regex and actions, and renderer options like CPU fallback and occluded render disabling. The layout system now supports granular margin and padding controls for panels and the main window.

rio-backend/src/config · high confidence

Corcovado introduced as a trimmed, maintained fork of mio 0.6.x

A new component named Corcovado has been added, serving as a maintained fork of mio 0.6.x (including mio-signal-hook and mio-extras) specifically tailored for Rio's PTY event loop. This fork retains core readiness polling capabilities via epoll, kqueue, and IOCP, along with cross-thread channels, user-space readiness, and Unix-domain sockets for signal handling. To reduce complexity, it removes networking types (TCP/UDP), timers, and the Fuchsia backend, while adopting the Rust 2021 edition and the standard library for network and I/O operations.

corcovado · high confidence

Initial Wayland platform implementation for Rio Window

This change introduces the foundational Wayland backend for the Rio Window crate on Linux, replacing or supplementing the previous X11-only approach. It implements core window management via the XDG shell, including monitor enumeration, video mode handling, and input processing (pointer, keyboard, text input). The implementation also adds support for fractional scaling, custom cursors, and adaptive system themes (light/dark mode) by monitoring system color schemes. Additionally, it includes experimental support for background blur effects via the ext-background-effect-v1 and KWin blur protocols, and implements an input rate tracker to optimize presentation windows during high-frequency input events.

_rio-window/src/platform\impl/linux/wayland · high confidence

Initial Windows pseudoconsole (ConPTY) support

Teletypewriter now supports Windows by introducing a new ConPTY backend. This change adds Windows-specific modules (\child\, \conpty\, \pipes\, \spsc\) that handle pseudoconsole creation, asynchronous pipe I/O, and child process exit monitoring, enabling the terminal to run native shells on Windows.

teletypewriter/src/windows · high confidence

Inline IME composition rendering in rio-grid

The rio-grid module now supports rendering IME (Input Method Editor) composition strings inline at the cursor position. This change introduces a \PreeditRow\ structure and associated logic to handle composition text layout, ensuring it stays on a single row by sliding left or dropping leading clusters if it exceeds the grid width. It correctly segments text into grapheme clusters, handles wide characters, and renders the IME caret (either as an underline on a composition cell or a beam on the following cell) while suppressing underlying cell ink to prevent visual artifacts. This allows users to see their IME input directly within the terminal grid before final submission.

rio-grid · high confidence

Introduce CPU rendering backend for Sugarloaf

The rendering context now supports a CPU-based backend (via \softbuffer\) in addition to the existing GPU paths (Metal, Vulkan, WebGPU). This allows the terminal to render on systems where hardware acceleration is unavailable or disabled, ensuring basic functionality across all environments.

sugarloaf/src/context · high confidence

Introduce Wayland event loop implementation for Linux

Added the core event loop infrastructure for Wayland on Linux, including the main \EventLoop\ struct, an \EventLoopProxy\ for cross-thread event sending, and an \EventSink\ for buffering and delivering window and device events to the application.

_rio-window/src/platform\_impl/linux/wayland/event\loop · high confidence

Introduce librio C API for terminal embedding

The librio crate now exposes a C-compatible API (capi.rs) that allows external hosts to embed and control a terminal instance. This interface provides functions to configure the terminal shell and working directory, handle key events with support for modern protocols like Kitty keyboard and modifyOtherKeys, manage selections, and retrieve render state including cell colors, cursor position, and Kitty image placements. It also exposes terminal actions such as title changes, bell rings, and progress updates, enabling embedders to integrate a fully featured terminal into their applications.

librio/src · high confidence

Introduce librio-wasm JS bindings for rioterm

Adds a new \librio-wasm\ crate that compiles the \librio\ terminal engine (without PTY support) to WebAssembly and exposes a JavaScript API via \wasm-bindgen\ for the \rioterm\ npm package. This enables browser-based terminal embedders to drive the terminal by feeding output via \feed\ and receiving host events (key presses, mouse reports, clipboard, title changes) through JS callbacks, effectively bridging the Rust terminal core to web environments.

librio-wasm · high confidence

Introduce libsugarloaf C ABI for GPU terminal rendering

Adds libsugarloaf, a new C ABI library that exposes Rio's sugarloaf GPU renderer to host applications. It allows a host (such as a Swift/AppKit app) to provide an NSView, after which the library manages the CAMetalLayer, glyph atlas, and GPU compositing. The API requires the host to handle glyph rasterization and cell data preparation, passing them via plain pointers for efficient per-frame rendering.

libsugarloaf · high confidence

Introduce rio-window crate as a cross-platform windowing library

The new \rio-window\ crate provides a cross-platform API for window creation and event loop management, exposing core components such as \EventLoop\, \Window\, and \ApplicationHandler\ for handling user input and system events. This library supports multiple platforms including macOS, Windows, and Linux (via X11/Wayland), and includes features like custom cursors, keyboard input handling, monitor management, and platform-specific hooks (e.g., macOS quit confirmation, quake mode). It replaces or supplements previous windowing logic by offering a unified interface for building GUI applications with consistent behavior across operating systems.

rio-window/src · high confidence

Introduce rio-window crate with Redox and Web platform backends

The new rio-window crate provides platform-specific windowing implementations for Redox (orbital) and Web (Wasm). The Redox backend implements window creation, event handling, and socket-based communication with the orbital compositor. The Web backend provides a complete async event loop, window management, custom cursor support, and thread-safe dispatching mechanisms tailored for single-threaded Wasm environments.

_rio-window/src/platform\_impl/orbital, rio-window/src/platform\impl/web · high confidence

Introduce rio-window platform abstraction with native extensions

This change introduces the \rio-window\ crate, establishing a new platform abstraction layer that exposes native capabilities for macOS, Linux (X11/Wayland), Windows, and Web. On macOS, users gain access to wide color gamut support (Display P3), unified title bars, background color customization, and liquid-glass opacity effects. Linux users can now follow the system dark/light theme via the XDG Desktop Portal and utilize startup activation tokens for proper window focus. Windows users receive native backdrop materials (Mica, Acrylic), rounded corner preferences, and direct access to window handles. Additionally, the library provides cross-platform utilities for integrating with external event loops, handling raw scancodes, and managing modifier keys.

rio-window/src/platform · high confidence

Introduction of cross-platform PTY abstraction layer

The \teletypewriter\ library now provides a unified interface for managing pseudo-terminals (PTYs) across Unix and Windows platforms. This change introduces platform-specific modules (\unix\ and \windows\) that implement common traits like \ProcessReadWrite\ and \EventedPty\, allowing applications to handle terminal I/O, window resizing, and child process events (such as exit status) through a consistent API regardless of the underlying operating system.

teletypewriter/src · high confidence

Introduction of rio-window crate with platform configuration and macOS bindings

The rio-window crate has been introduced as a fork of Winit, maintained specifically for the Rio terminal. This change adds the foundational build infrastructure, including a build script that configures platform-specific configuration aliases (such as x11, wayland, and macOS) and generates native dispatch bindings for macOS to support low-level display operations.

rio-window · high confidence

Linux platform implementation for keyboard handling and adaptive theme support

The Linux backend now includes a new common platform implementation module that provides XKB-based keyboard input handling and monitors for system-wide dark/light theme changes. The keyboard subsystem (in \xkb/\) maps raw scancodes to physical keys, manages XKB keymaps and compose states for input method support, and exposes modifier states, aligning scancode conversions with Firefox. Additionally, a background theme monitor (\theme\_monitor.rs\) listens to the XDG Desktop Portal for \color-scheme\ updates and emits \WindowEvent::ThemeChanged\ to keep the application's UI in sync with the system appearance.

_rio-window/src/platform\impl/linux/common · high confidence

Native desktop notifications for macOS, Linux, and Windows

The rio-notifier module now provides cross-platform desktop notifications. On macOS, it uses UNUserNotificationCenter to request permission and display alerts; on Linux, it sends notifications via D-Bus; and on Windows, it renders toast notifications. The send\_notification function operates on a background thread to avoid blocking the caller, and defaults the app name to 'Rio' if none is provided.

rio-notifier · high confidence

New UI overlays and renderer enhancements

The renderer now includes several new UI components: an assistant overlay for displaying errors and warnings with actionable buttons, a command palette for executing terminal commands and navigation, a confirm-quit dialog, a custom pixel-art cursor, and a trail cursor with configurable easing and fade-out. Additionally, a font cache with a two-tier strategy (hot cache for ASCII and LRU for others) has been added to prevent unbounded memory growth and improve performance, and a shared scrollbar module with fade-in/out logic and geometry computation is now available for use across UI elements.

frontends/rioterm/src/renderer · high confidence

New Unix system-level I/O primitives and selectors

This change introduces the core Unix implementation components for the \corcovado\ event loop, including \epoll\ (Linux/Android) and \kqueue\ (BSD/macOS) selectors, a pipe-based \Awakener\ for cross-thread wakeup, and support for Unix domain sockets (\UnixSocket\) with file descriptor passing. It also adds \EventedFd\ to allow registering arbitrary file descriptors with the poller, \dlsym\ for dynamic loading of system calls like \epoll\_create1\ and \pipe2\, and \UnixReady\ to expose platform-specific readiness events like HUP and error states.

corcovado/src/sys/unix · high confidence

New WGPU-based shader filter runtime

The filter rendering engine has been replaced with a new runtime built on the WGPU graphics API, ported from the librashader library. This change introduces a complete set of components for managing shader presets, including a filter chain loader, graphics pipeline creation, texture and sampler management, and mipmap generation. Users will now benefit from hardware-accelerated shader execution via WGPU, with support for features like pipeline caching and configurable filter options.

sugarloaf/src/components/filters/runtime · high confidence

New Wayland seat input handling implementation

The Wayland platform implementation for the rio-window crate now includes a complete seat input subsystem. This adds support for keyboard events (including keymap handling, focus changes, and key repeat timers), pointer events (mouse movement, clicks, and cursor shape management), touch input (multi-touch points with start, move, end, and cancel phases), relative pointer motion, and text input (IME preedit, commit, and enable/disable states). These changes provide the foundational input event routing for Wayland windows within the application.

_rio-window/src/platform\impl/linux/wayland/seat · high confidence

New Windows platform implementation for rio-window

The rio-window crate now includes a complete native implementation for Windows, replacing previous platform-specific code. This new backend provides full support for high-DPI scaling across Windows versions, native dark mode integration that respects system settings, and proper handling of file drag-and-drop operations. It also features improved keyboard input processing with accurate scancode conversion, inline IME composition support for CJK input methods, and robust window management including taskbar integration and proper icon handling.

_rio-window/src/platform\_impl/linux/x11/ime, rio-window/src/platform\impl/windows · high confidence

New X11 platform utility module for rio-window

The \rio-window\ crate on Linux now includes a new \platform\_impl/linux/x11/util\ module that provides core X11 integration utilities. This addition introduces helpers for managing X11 client messages, generic event cookies, and cursor handling (including custom cursor creation and caching). It also adds geometry utilities for calculating frame extents and coordinate translations, as well as support for EWMH and Motif window manager hints. Input handling is enhanced with XInput and XKB event selection, UTF-8 key lookup, and modifier key mapping. Additional utilities cover mouse delta filtering, RandR-based DPI calculation and screen configuration, window property retrieval, and window manager information caching.

_rio-window/src/platform\impl/linux/x11/util · high confidence

New core rendering primitives and image handling

The core component module now includes foundational types for rendering, including a \Buffer\ wrapper for wgpu memory management, \Uniforms\ for shader data, and geometric primitives like \Rectangle\ and \Size\. It also introduces a new \image\ module that provides an \Handle\ and \Data\ enum for managing raster image assets via file paths, raw bytes, or decoded RGBA pixels, enabling the rendering of image backgrounds.

sugarloaf/src/components/core · high confidence

New embeddable C ABI for terminal core via librio

The librio/include directory now provides a curated C header (librio.h) and module map for RioKit, exposing an embeddable terminal core API. This allows non-Rust consumers (such as Swift or C hosts) to manage PTY spawning, VT parsing, and terminal state, and to pull render state (including cell colors, styles, cursor shape, and selection) via a host-pulled API with per-row dirty tracking. The header defines the C ABI structures and constants for actions, colors, keys, and styles that embedders use to integrate the terminal logic.

librio/include · high confidence

New grid rendering shaders for Metal, Vulkan, and WebGPU

This change introduces the initial shader implementations for the grid renderer, adding \grid.metal\ and \grid.wgsl\ for Metal and WebGPU backends, and \grid\_bg.frag.glsl\, \grid\_bg.vert.glsl\, \grid\_text.frag.glsl\, \grid\_text.vert.glsl\, and \ui\_text.vert.glsl\ for the Vulkan backend. These files implement the background pass (cell colors, padding, and cursor overlay) and the text pass (glyph rendering with atlas sampling), ensuring consistent color space handling (sRGB, DisplayP3, Rec2020) and visual parity across all three graphics APIs.

sugarloaf/src/grid/shaders · high confidence

New macOS AppKit bindings in rio-window

The \rio-window\ crate on macOS now includes a comprehensive set of safe bindings for the AppKit framework, replacing the previous legacy menu implementation. This change introduces modules for core application management (NSApplication), windowing (NSWindow), user interface elements (NSView, NSButton, NSControl), input handling (NSEvent, NSCursor), and system services (NSPasteboard, NSScreen). It also provides bindings for text input (NSTextInputContext), appearance management (NSAppearance), and version detection, enabling the application to interact directly with macOS native features.

_rio-window/src/platform\impl/macos/appkit · high confidence

New rioterm frontend with shell integration and quake mode

The application now uses the new rioterm frontend, which introduces automatic shell integration for zsh, fish, and PowerShell to report the working directory and enable opening new tabs in the current directory. It also adds a Quake-style window that can be toggled via a system-wide global hotkey, and supports writing the configuration file via the new \--write-config\ CLI flag.

frontends/rioterm/src · high confidence

New sugarloaf rendering backend with multi-platform GPU support and image filters

The terminal now uses the new sugarloaf rendering engine, which replaces the previous renderer. This change introduces native GPU backends for macOS (Metal) and Linux (Vulkan), with a unified wgpu backend for Windows and WebAssembly, alongside a CPU fallback. The new engine supports configurable input colorspace (sRGB, Display P3, Rec2020) for accurate color rendering, adds support for retroarch-style image filters (ported from librashader) via the wgpu backend, and implements the Kitty graphics protocol for inline images. It also includes a new font caching system using swash for cross-platform font resolution and improved text layout with proper line-height and scaling support.

sugarloaf/src · high confidence

New welcome screen and assistant error route

The application now displays a welcome screen on startup, featuring an animated logo and configuration path, accessible via the new Welcome route. Additionally, a dedicated Assistant route has been added to display error reports from the backend.

frontends/rioterm/src/router/routes · high confidence

Project initialization and build system setup

The repository has been initialized with the core project structure, including a Rust toolchain configuration (channel 1.96.1) and formatting rules. A Nix flake has been added to provide reproducible development environments and package definitions for Linux and macOS, supporting both X11 and Wayland backends. The release pipeline is configured via GoReleaser to build and distribute binaries for Windows, macOS, and Linux (deb/rpm), while the Makefile provides local build, test, and packaging targets.

(repo-wide) · high confidence

Rio gains Linux desktop integration and terminfo support

Rio now includes the necessary metadata and configuration files for Linux distribution packaging and improved terminal compatibility. A new AppStream metainfo file (\com.rioterm.Rio.metainfo.xml\) provides release history, branding colors, and screenshots for software centers, while a desktop entry file (\rio.desktop\) enables proper application launching. Additionally, terminfo and termcap definitions (\rio.terminfo\, \rio.termcap\) are added to support 256-color and truecolor modes, and a release preparation script (\prepare-release.sh\) automates version bumping and metainfo updates.

misc · high confidence

Sugarloaf rendering engine extracted as standalone multiplatform library

The Sugarloaf rendering engine, previously part of the Rio source code, is now available as a separate, standalone library. It supports Linux (via a Vulkan backend that compiles GLSL shaders to SPIR-V at build time using system tools like glslc or glslangValidator), Desktop, and WebAssembly targets. The extraction includes a new MIT license, a Makefile for building and testing (including WASM tests via wasm-bindgen), and documentation detailing build dependencies and test setup.

sugarloaf · high confidence

Support for builtin and custom RetroArch filters via WGPU

The filters component now supports applying RetroArch-style shader filters using the WGPU backend. Users can load custom filters from file paths or use built-in presets like 'newpixiecrt' and 'fubax\_vr'. The implementation manages a chain of filter passes, allocating intermediate textures for multi-filter rendering and handling source/destination texture copying to ensure compatibility with various shader requirements.

sugarloaf/src/components/filters · high confidence

Wasm frontend now includes an in-page event log for debugging

The new \frontends/wasm/src/lib.rs\ file introduces a WASM-specific entry point that initializes \console\_tracing\ and sets up a web canvas. Crucially, it adds an in-page UI element (an unordered list) that displays a timestamped log of window events (such as keyboard input and redraw requests). This provides developers with a visible, browser-based alternative to console logs for debugging interactions in the WASM build.

frontends/wasm · high confidence

Wayland window background blur support

The Wayland window implementation now supports background blur effects on Linux. This is achieved by integrating with the \ext-background-effect-v1\ protocol and the KDE KWin blur protocol, allowing applications to request a blurred background for their windows when the compositor supports it.

_rio-window/src/platform\impl/linux/wayland/window · high confidence

macOS app bundle configuration and permissions

The macOS application bundle (Info.plist) is now configured to declare support for opening URLs via the 'rio' scheme and provides Finder services for opening new tabs in the current directory. The bundle also includes usage descriptions for various system permissions (camera, microphone, local network, etc.) and sets the minimum system version to macOS 10.15.7.

misc/osx · high confidence

rio-vt: standalone embeddable terminal core with VT parsing, grid, and image support

rio-vt is a new, standalone Rust crate that extracts Rio's terminal core (VT state machine, ANSI/escape parser, grid with scrollback, selection, search, and PTY-facing event model) into a dependency-light library. It carries no rendering, GPU, or font-shaping dependencies, allowing embedders to pair it with their own renderer or drive it purely from the pulled grid state. The crate includes a C ABI wrapper (librio) for non-Rust embedders, feature flags for optional capabilities like windowing and graphics, and example programs demonstrating headless usage, Sixel and Kitty image protocols, selection, and resizing.

rio-vt · high confidence

Architecture

Introduce centralized router and window management for Rioterm

The application now uses a dedicated router module (\frontends/rioterm/src/router\) to manage navigation states, modal overlays (such as the command palette, assistant, and quit confirmation), and window lifecycle events. This change centralizes window creation and configuration logic, including platform-specific handling for macOS (unified titlebars, traffic light positioning), Windows (startup flash prevention via cloaking), and Linux (X11/Wayland application IDs). Users benefit from more stable window behavior, consistent title bar rendering, and improved input handling for modal UI elements.

frontends/rioterm/src/router · high confidence

Behavioural changes

Added VS15/VS16 emoji variation selector width handling

The \rio-grapheme-width\ crate has been introduced to correctly handle Unicode emoji variation selectors (VS15 and VS16) at the terminal grid level. By integrating data tables from WezTerm's \wezterm-char-props\ (specifically \emoji\_presentation\ and \emoji\_variation\), Rio now determines whether a variation selector should promote or narrow the width of the preceding character. This ensures that emoji rendered with explicit text (VS15) or emoji (VS16) modifiers are sized correctly, preventing display inconsistencies in the terminal grid.

rio-grapheme-width · high confidence

Adoption of Kitty Keyboard Protocol and new binding infrastructure

The terminal now uses the Kitty keyboard protocol by default to encode key events, providing more precise key reporting (including event types and associated text) and fixing issues with modifier keys like Shift+Tab. This change introduces a new binding module (\frontends/rioterm/src/bindings\) that defines the key binding structures, modes (such as VI and SEARCH), and actions (including search navigation and font size adjustments), replacing the previous implementation to support these advanced input features.

frontends/rioterm/src/bindings · high confidence

Corcovado: new fork of mio with async channels and benchmarking

The library has been renamed to Corcovado and is now a trimmed-down fork of mio 0.6.x, removing networking types, the timer, and the Fuchsia backend in favor of using std types. This location introduces a new asynchronous, thread-safe channel implementation (\channel.rs\) that integrates with the event loop, a benchmark suite using Criterion (\bench\_poll.rs\), and internal support for lazy initialization (\lazycell.rs\). The core polling logic (\poll.rs\) has been updated to use \Rc\ instead of \Arc\ for readiness tracking to satisfy \Sync\ trait requirements, and Unix socket handling (\socket.rs\, \stream.rs\) now includes \SO\_NOSIGPIPE\ configuration to prevent process termination on write errors.

corcovado/src · high confidence

Harden Unix PTY lifecycle and child termination

The Unix terminal backend now uses a robust state machine to manage child process lifecycle, ensuring reliable termination and preventing zombie processes. It implements a graceful escalation sequence (SIGHUP followed by SIGKILL) with configurable grace periods, correctly handles process groups to signal child shells and their descendants, and fixes signal handling on macOS and BSD systems where \killpg\ may report EPERM even when signals are delivered. Additionally, it resets ignored signals before shell execution to ensure the shell inherits standard signal dispositions.

teletypewriter/src/unix · high confidence

Improved locale detection on macOS

The macOS platform module now implements a more robust locale detection mechanism. It attempts to use the system's language and country codes (available on macOS 10.12+) to construct a valid UTF-8 locale identifier, falling back to the full locale identifier or a hardcoded UTF-8 default if necessary. This ensures that environment variables like LC\_ALL and LC\_CTYPE are set correctly for proper text rendering and input handling.

frontends/rioterm/src/platform/macos · high confidence

Improved mouse selection precision and hint-click reliability

The terminal now uses a 60% threshold for cell-side detection instead of the previous 50% midpoint, which reduces accidental half-cell snapping during selection. Additionally, a new 'hint click latch' mechanism ensures that opening links via modifier-clicks is robust: the system remembers the hint under the press, preventing drag leaks or stale highlights, and guarantees that the link opens only if the mouse release lands on the same hint.

frontends/rioterm/src/mouse · high confidence

Introduces new layout and span styling types for text rendering

The layout module now defines \CellMetrics\ as the canonical source of truth for cell dimensions, baseline, and face metrics, replacing previous ad-hoc calculations. \TextLayout\ and \RootStyle\ manage font size, line height, and scale factors, while \SpanStyle\ in the span module handles rich text attributes including colors, decorations (underline/strikethrough with shape support), and cursor styles. This refactoring establishes a more robust foundation for text layout and rendering consistency.

sugarloaf/src/layout · high confidence

Introduction of component module structure with optional shader filters

The sugarloaf library now exposes a \components\ module that organizes core functionality and optional visual effects. This change introduces a \filters\ submodule, which integrates librashader for shader-based image processing. To ensure clean dependency management on Linux and macOS builds that do not enable the \wgpu\ feature, the filters module is conditionally compiled, allowing the dependency tree to drop cleanly when hardware-accelerated rendering is not required.

sugarloaf/src/components · medium confidence

Linux windowing backend refactored to support X11 and Wayland

The Linux platform implementation for window management has been restructured to support both X11 and Wayland backends via feature flags. This change introduces a unified \Backend\ enum to select between X11 and Wayland, adds specific window attributes for X11 (such as visual ID, screen ID, and override redirect), and implements error handling for both platforms. It also establishes the core types for window and device IDs, and sets up the necessary module structure for platform-specific event loops and window creation.

_rio-window/src/platform\impl/linux · high confidence

Major rewrite of the Sugarloaf rendering backend

The \sugarloaf/src/renderer\ module has been completely replaced with a new rendering architecture. This change introduces a new batching and compositing system (\batch.rs\, \compositor.rs\) that supports instanced rendering for quads and non-quad geometry. It adds a new CPU rasterization pipeline (\cpu.rs\) for software rendering, and implements a new image handling system with dedicated shaders for Vulkan (\\.frag.glsl\, \\.vert.glsl\), Metal (\image.metal\), and WebGPU (\image.wgsl\). The new renderer also includes a CPU-based image cache and supports advanced visual features like SDF rounded corners, various underline styles (dashed, dotted, curly), and clipping rectangles.

sugarloaf/src/renderer · high confidence

New X11 platform implementation with adaptive theming and input-rate optimization

The X11 backend for Rio Window has been rewritten from scratch, introducing support for system theme detection via XSettings, proper drag-and-drop handling, and startup notifications. To improve performance on high-refresh-rate displays, a new input-rate tracker replaces the previous single-timestamp logic, ensuring that the presentation window is only sustained during high-frequency input bursts rather than after every single keystroke.

_rio-window/src/platform\impl/linux/x11 · high confidence

New image cache with shelf-based atlas allocator and CPU rasterization support

The image cache module has been replaced with a new implementation that uses a shelf-based atlas allocator to improve texture space utilization for glyphs and images. This change introduces a CPU rasterization path for OpenType COLR v0/v1 color fonts using tiny-skia, allowing color glyphs to be rendered consistently across all backend targets (Wgpu, Metal, and CPU). The new cache manages separate mask and color atlases, handling both monochrome glyf outlines and complex color paint graphs, which ensures that rich text and grid renderer glyphs are cached and displayed correctly regardless of the underlying graphics API.

_sugarloaf/src/renderer/image\cache · high confidence

New layout engine with resizable panels and scaled margins

The terminal frontend now uses a new layout system in \frontends/rioterm/src/layout\ that supports resizing panels by dragging borders and applies margins scaled to the display scale factor. This change ensures that grid dimensions and cell calculations remain consistent with the renderer, fixing issues with stale terminal sizes, screen resolution bugs, and incorrect row counts during window resizes or margin changes.

frontends/rioterm/src/layout · high confidence

New macOS platform implementation with VSync, glass effects, and improved input handling

The macOS backend has been replaced with a new implementation that introduces hardware VSync synchronization via CVDisplayLink and Grand Central Dispatch for smoother rendering, adds support for the macOS 26 'Liquid Glass' visual effect, and fixes several input issues including proper handling of undocumented cursors, IME commit events, and key events when the Command modifier is held.

_rio-window/src/platform\impl/macos · high confidence

New persistent GPU grid renderer for terminal cells

The terminal grid rendering path has been rewritten to use a persistent, row-indexed GPU cell buffer system, replacing the previous rich-text-based approach. This new architecture introduces dedicated backends for Metal, wgpu, Vulkan, and CPU (software) rendering, all sharing a common data layout defined by \CellBg\ and \CellText\ structs. The system manages glyph atlases for efficient texture sampling, supports per-row dirty updates to minimize GPU memory transfers, and handles cursor rendering and color spaces (including DisplayP3 and sRGB) consistently across all platforms.

sugarloaf/src/grid · high confidence

Refactor graphics and state management with new primitives

The sugarloaf rendering layer has been refactored to decouple graphic value types from the renderer by moving them to the rio-graphics crate, while introducing new primitives like Corners, Quad, and ImageProperties (with opacity support) and restructuring global state into SugarState to hold font libraries and root styles.

sugarloaf/src/sugarloaf · medium confidence

Refactored terminal context management and title rendering

The terminal context logic has been reorganized into dedicated modules (\mod.rs\, \renderable.rs\, \title.rs\) to improve code structure and maintainability. This change introduces a new \RenderableContent\ struct that encapsulates all visual state required for rendering, including cursor state, selection ranges, hint labels, and damage tracking. Title handling has been updated to support template-based formatting with variables like \{{ title }}\, \{{ program }}\, \{{ absolute\_path }}\, and \{{ relative\_path }}\, allowing for more flexible and consistent tab/window titles. The refactoring also includes improvements to context creation, including support for dead contexts in tests and better handling of shell integration and working directory preservation.

frontends/rioterm/src/context · high confidence

Rio backend re-exports core terminal logic and config

The rio-backend crate now acts as a facade, re-exporting the terminal core (VT state machine, parser, grid, selection, search, PTY event model, colors) from the new rio-vt crate while retaining user-facing configuration and the sugarloaf renderer glue. This change ensures that downstream components like rioterm and tests continue to function without modification by maintaining the original module paths.

rio-backend/src · high confidence

Safe handling of dropped file paths in the terminal

The platform module now includes a \shell\_escape\ function that prefixes shell-sensitive characters (such as spaces, parentheses, and metacharacters) with backslashes. This ensures that file paths dropped into the terminal are safely escaped, preventing unintended command interpretation or errors when handling filenames with special characters.

frontends/rioterm/src/platform · high confidence

Standardized rendering of Nerd Font icons and Powerline separators

Rio now ensures that Powerline separators and icon glyphs (such as those from Font Awesome) render with consistent scaling, alignment, and padding across all renderers. This is achieved by porting the per-glyph constraint rules from Ghostty into a new shared \rio-fonts\ library, which applies specific sizing and positioning logic to match the appearance in Ghostty and Apple Terminal. Additionally, a symbols-only Nerd Font can be embedded directly into Rio via the \symbols-nerd-font\ feature, allowing icon glyphs to be displayed without requiring an external font file to be installed.

rio-fonts · high confidence

Unified font configuration and consistent CJK/Latin metrics

The font subsystem now uses a unified configuration structure (SugarloafFonts) that allows users to specify font family, size, hinting, features, and per-style overrides (regular, bold, italic, bold-italic) via TOML, with Cascadia Code Nerd Font as the new default. A consistent metrics approach ensures that CJK and Latin fonts share the same cell dimensions, preventing vertical misalignment between scripts. The implementation includes platform-specific font discovery (fontconfig on Linux, CoreText on macOS) and a new text run cache for improved rendering performance.

sugarloaf/src/font · high confidence

Updated Unicode support to version 17.0.0 with new grapheme cluster segmentation

The rio-unicode library has been updated to support Unicode 17.0.0, regenerating the character width tables to reflect the latest standard. Additionally, a new grapheme cluster segmentation module has been introduced, implementing UAX \#29 rules to correctly handle complex text boundaries such as emoji ZWJ sequences, regional indicators, and Indic conjuncts, ensuring that text wrapping and cursor movement align with modern Unicode expectations.

rio-unicode · high confidence

Updated examples to use rio\_window and demonstrate new rendering features

The examples in sugarloaf/examples have been migrated to use the rio\_window crate for window management and event handling. New examples demonstrate specific rendering capabilities: draw\_order.rs illustrates the painter's algorithm for layering elements, image.rs shows how to set a background image, simple\_unified.rs demonstrates unified rich text and quad rendering, and transparent.rs shows how to create a transparent window. These changes reflect the underlying shift from winit to rio\_window and showcase the updated Sugarloaf API.

sugarloaf/examples · high confidence

Windows event loop now uses DWM-driven vsync with input-rate throttling

The Windows platform implementation for rio-window has been replaced with a new event loop runner that synchronizes redraws to the display refresh rate using DwmFlush. This change introduces a dedicated vsync worker thread that manages per-window dirty flags, ensuring that repaints occur only when necessary or when the system is ready to compose a new frame. Additionally, an input-rate tracker prevents excessive redraw storms during high-frequency input bursts (such as rapid typing or mouse movement) by gating redraw requests for one second after sustained high-rate input, mirroring behavior found on macOS and Wayland. This results in smoother rendering and reduced CPU/GPU usage during intensive interaction.

_rio-window/src/platform\_impl/windows/event\loop · high confidence

Windows installer adds 'Open Rio here' context menu

The Windows installer (Wix) now registers a context menu entry that allows users to open the terminal in the current directory from the file explorer background. This is achieved by adding a registry key for 'Open Rio here' which launches rio.exe with the --working-dir parameter set to the selected folder path.

misc/windows · high confidence

Test coverage

Added WebAssembly integration tests and WGSL shader validation; Added X11 XSettings test fixture; Added compile-time Send/Sync safety tests for rio-window types; Added ctest to verify bracketed paste and shell-independent paste behavior; Added image comparison test utilities; Added test suite for corcovado polling and readiness mechanisms; Added tests for Kitty graphics protocol handling.

Dependencies

Update workspace to version 0.5.28 and Rust 1.96.1

The Rio terminal project has been updated to version 0.5.28, with the minimum supported Rust version (MSRV) raised to 1.96.1. This release includes a comprehensive update of the dependency lock files and manifests across the workspace, incorporating newer versions of key libraries such as wgpu (30.0.1), image (0.25.10), and winit (via the rio-window fork).

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 61 → 68 (+7.4)
  • Rubric changed (rubric-2026.09.9 → rubric-2026.09.17) — scores are not directly comparable.

Lenses

  • Code Health 82 → 82 (+0.1)
  • Architecture 99 → 92 (-6.6)
  • Maturity 50 → 65 (+15.1)
  • Readiness 62 → 64 (+1.5)
  • Security 65 → 69 (+4.3)
  • Event Sourcing 100 → 100 (+0.0)
  • Performance 100 (new)

Resolved (29)

  • Boundary-crossing change coupling: assistant.rs ↔ sugarloaf.rs (frontends/rioterm/src/router/routes/assistant.rs)
  • Change coupling: atlas.rs ↔ sugarloaf.rs (sugarloaf/src/renderer/image_cache/atlas.rs)
  • Duplicated block (12–14 lines × 3) (frontends/rioterm/src/context/title.rs)
  • Duplicated block (12–15 lines × 2) (frontends/rioterm/src/application.rs)
  • Duplicated block (15–18 lines × 2) (frontends/rioterm/src/context/title.rs)
  • Duplicated block (26 lines × 2) (frontends/rioterm/src/context/mod.rs)
  • Hotspot: corcovado/src/poll.rs (corcovado/src/poll.rs)
  • Hotspot: frontends/rioterm/src/context/title.rs (frontends/rioterm/src/context/title.rs)
  • Hotspot: frontends/rioterm/src/global_hotkey.rs (frontends/rioterm/src/global_hotkey.rs)
  • Hotspot: frontends/rioterm/src/hints.rs (frontends/rioterm/src/hints.rs)
  • Hotspot: frontends/rioterm/src/layout/mod.rs (frontends/rioterm/src/layout/mod.rs)
  • Hotspot: frontends/rioterm/src/renderer/trail_cursor.rs (frontends/rioterm/src/renderer/trail_cursor.rs)
  • Hotspot: librio-wasm/src/lib.rs (librio-wasm/src/lib.rs)
  • Hotspot: rio-graphics/src/lib.rs (rio-graphics/src/lib.rs)
  • Hotspot: rio-unicode/src/grapheme.rs (rio-unicode/src/grapheme.rs)
  • Hotspot: rio-vt/src/ansi/glyph_protocol.rs (rio-vt/src/ansi/glyph_protocol.rs)
  • Hotspot: rio-vt/src/config/colors/mod.rs (rio-vt/src/config/colors/mod.rs)
  • Hotspot: rio-vt/src/crosswords/pos.rs (rio-vt/src/crosswords/pos.rs)
  • Hotspot: rio-vt/src/crosswords/vi_mode.rs (rio-vt/src/crosswords/vi_mode.rs)
  • Hotspot: rio-vt/src/performer/parser/mod.rs (rio-vt/src/performer/parser/mod.rs)
  • …and 9 more

New (39)

  • Ambiguous naming for interruptible behavior. While poll_interruptible is descriptive, the existence of two poll variants with different blocking behaviors (one potentially blocking indefinitely or on signal, one explicitly interruptible) can be confusing. However, this is a common pattern in async I/O.
  • Duplicate accessors for the same property. readiness() and kind() both return the Ready state of an event.
  • Duplicate deregistration logic. Both types expose deregister with identical intent but different parameter structures (one takes the poll, one takes the handle), causing confusion about ownership and lifecycle management.
  • Duplicate method signatures with different return types or overloads? The list shows two entries for to_rio_window_colorspace with identical signatures but potentially different contexts or return types (one returns Colorspace, the other is ambiguous). If they are truly identical, it's a duplicate.
  • Duplicate registration logic across types. Evented is a trait/interface that requires implementing register, while Poll is the concrete implementation that also exposes register. This creates a confusing API surface where users might call poll.register() directly or evented.register(poll, ...) depending on context, with identical signatures.
  • Duplicate registration update logic. Similar to register, both Evented and Poll expose reregister with identical signatures, leading to ambiguity about which method performs the actual I/O or state update.
  • Duplicated block (12–14 lines × 3) (frontends/rioterm/src/context/title.rs)
  • Duplicated block (13–16 lines × 2) (frontends/rioterm/src/application.rs)
  • Duplicated block (27 lines × 2) (frontends/rioterm/src/context/mod.rs)
  • Duplicated block (6 lines × 2) (frontends/rioterm/src/application.rs)
  • End-of-life runtime: Rust 1.96
  • Inconsistent constructor naming. new2 is a non-descriptive name compared to new, suggesting a legacy or overloaded constructor without clear semantic distinction in the name.
  • Inconsistent error handling patterns. load() likely panics or returns a default on error, while try_load() returns a Result. This is a common pattern but can be confusing if the behavior of load() is not explicitly documented as infallible or panic-on-error.
  • Low cohesion: Graphics (LCOM4 4) (rio-vt/src/ansi/graphics.rs)
  • Low cohesion: Poll (LCOM4 4) (corcovado/src/poll.rs)
  • Machine::pty_read (cyclomatic 19) (rio-vt/src/performer/mod.rs)
  • Machine::run (cognitive 50) (rio-vt/src/performer/mod.rs)
  • Machine::run (cyclomatic 23) (rio-vt/src/performer/mod.rs)
  • Members sharing a duplicated core (4 members, 50+ identical tokens) (frontends/rioterm/src/layout/mod.rs)
  • Members sharing a duplicated core (6 members, 50+ identical tokens) (frontends/rioterm/src/renderer/assistant.rs)
  • …and 19 more

Changes since last survey

  • 5 commits — 3 feature/other, 2 fixes

By area

  • frontends/rioterm — 4 commits
  • (root) — 1 commit

Notable commits

  • fix: fix: harden PTY quit delivery and lifecycle locking (#1942)
  • fix: fix: preserve Unix PTY lifecycle and final output (#1930)
  • change: Automatic shell integration for zsh, fish and PowerShell (#1923)
  • change: Surface terminal bells on tabs, with a font-free indicator (#1922)
  • change: prepare v0.5.28

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

raphamorim/rio was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 29 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 37624389e8dde79ba25a8147a5e809c01d16d1c9 — the exact code this score is about.
  • Scored under rubric-2026.09.17 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-705631bb727e.