Zurück zum Ranking

orhun/ratty

Rustratty-term.org

A GPU-rendered terminal emulator with inline 3D graphics 🐀🧀

3d3d-graphicscommandgpugpu-renderinggraphicsratatuirusttempleosterminalterminal-emulatorterminal-emulators
Sterne-Wachstum
Sterne
3.1k
Forks
87
Wochenwachstum
Issues
35
1k2k3k
Apr. 26Mai 26Juni 26Juli 26
Artefaktecrates.iocargo add ratty
README



Ratty: A GPU-rendered terminal emulator with inline 3D graphics 🧀
Inspired by TempleOS | Built with Rust & Ratatui
Built with Ratatui badge

"Rodent-obsessed developer creates Ratty to bring 3D graphics to the command line" - The Register
"This New Terminal is Absurd (But Totally Fun)" - It's FOSS
"10 weird OSS projects you need right now... " - Fireship
"Your terminal can render in 3D now, and Rust made it surprisingly usable" - MakeUseOf

Features

▶️ Watch the demo video here!
📚 Read the behind the scenes blog post here!

3D mode

Ever wondered what's behind the terminal? Press Ctrl+Alt+Enter!

Installation

Packaging status

Requirements:

  • A GPU / graphics stack supported by Bevy and wgpu
  • Melted cheese (optional but recommended)

crates.io

cargo install ratty

Arch Linux

sudo pacman -S ratty

Nix

See the Nix packaging docs for flake, NixOS, and Home Manager usage.

nix run github:orhun/ratty

Binary releases

Prebuilt binaries are available on the GitHub releases page for direct download.

From Git

Requirements:

  • Rust toolchain with Cargo
  • on Bazzite / Bluefin: sudo rpm-ostree install gcc fontconfig-devel wayland-devel (then reboot)
  • on Debian / Ubuntu: sudo apt-get update ; sudo apt-get install gcc pkgconf libfontconfig-dev libwayland-dev
  • on Fedora: sudo dnf install gcc fontconfig-devel wayland-devel
cargo install --git https://github.com/orhun/ratty

Configuration

The default configuration file is available in config/ratty.toml.

You can copy this file to $HOME/.config/ratty/ratty.toml and customize it.

Changing the cursor

[cursor.model]
path = "CairoSpinyMouse.obj"
scale_factor = 6.0
brightness = 0.5
x_offset = 0.5
plane_offset = 18.0
visible = true

[cursor.animation]
spin_speed = 1.4
bob_speed = 2.2
bob_amplitude = 0.08

For cursor.model.path, Ratty supports both .obj, .glb, and .stl assets.

Other useful cursor fields are:

  • scale_factor: scales the model relative to the terminal cell size
  • brightness: adjusts the cursor material brightness
  • x_offset: shifts the cursor model horizontally inside the cell
  • plane_offset: pushes the cursor away from the warped terminal surface in 3D mode
  • visible: show the custom 3D cursor model instead of only the terminal cursor

Key Bindings

Key Action
Ctrl+Alt+C Copy selection
Ctrl+Alt+V Paste clipboard
Ctrl+Alt+Enter Toggle 2D / 3D mode
Ctrl+Alt+M Toggle Mobius mode
Ctrl+Alt+Up Increase warp
Ctrl+Alt+Down Decrease warp
Alt+PageUp Scroll one page up
Alt+PageDown Scroll one page down
Alt+Up Scroll one line up
Alt+Down Scroll one line down
Ctrl+= Increase font size
Ctrl+- Decrease font size
Ctrl+Alt+0 Reset font size

Inline 3D objects

Ratty uses its own protocol, the Ratty Graphics Protocol, to place inline 3D objects in terminal space.

RGP supports:

  • registering .obj, .glb, and .stl assets by path
  • placing them at terminal cell anchors
  • animation, scale, color, depth and other attributes

There is a Ratatui widget called ratatui-rgp available in widget/ if you want to build your own terminal applications that involve inline 3D objects.

Examples

Big rat

Places a single oversized rat directly in your terminal:

Document

TempleOS-inspired document demo with editable text and embedded inline 3D objects:

Draw

Split-pane drawing demo with a 2D canvas on the left and a live 3D preview on the right:

Rubik's cube

Interactive 3D Rubik's cube demo:

Mobius Chess

A Mobius-strip chess demo:

Apps

Here are some applications explicitly built around Ratty's Graphics Protocol:

Ratscad

Terminal CAD:

Ratty-runner

Endless runner built for Ratty:

ComChan

A blazingly fast serial monitor with plotter TUI and 3D telemetry

Architecture

Rendering pipeline

The terminal surface currently uses ratatui for the UI buffer, parley_ratatui for text shaping/rendering and Bevy for scene presentation.

Current workflow:

  1. PTY output is parsed by vt100 and drawn into a Ratatui buffer on CPU
  2. parley_ratatui shapes the buffer with Parley and records it as a Vello scene
  3. The scene is handed to Bevy's render world through a double-buffered exchange (scenes are recycled between frames, never cloned or re-recorded)
  4. Vello renders the scene on Bevy's render-world device into a plain Rgba8Unorm storage texture, with no CPU readback in between
  5. That storage texture is copied into an Rgba8UnormSrgb present texture (sampled through an sRGB view, so Vello's sRGB-encoded output is decoded on sample instead of re-encoded), which Bevy presents in the 2D and 3D scenes

The terminal image is fully GPU-resident: the only data crossing from the main world to the render world each frame is the recorded scene, not pixels.

Endorsements

  • "This is like a legitimately cool project but also I just spent like 20 minutes adjusting the config for the rat spinning to see him spin faster and more erratically and it cracked me up" - @vimlena.com
  • "These kinds of experiments are where creativity is born." - @Coko7

  • "No comments. Just support." - @Raphamorim (creator of Rio terminal)

  • "tetro-tui running in Ratty" - @Strophox

License

All code is licensed under The MIT License.

🦀 ノ( º \_ º ノ) - respect crables!

Credits

Ratty logo designed by @Strophox & @Harunocaksiz

Copyright © 2026, Orhun Parmaksız

The author does not have a rat under the hat!
Ähnliche Repositories
mrdoob/three.js

JavaScript 3D Library.

JavaScriptnpmMIT Licensejavascript3d
threejs.org
113.9k36.4k
DavidHDev/react-bits

An open source collection of animated, interactive & fully customizable React components for building memorable websites.

JavaScriptnpmOtheranimationscomponents
reactbits.dev
43.9k2.1k
FreeCAD/FreeCAD

Official source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.

C++GNU Lesser General Public License v2.1freecadengineering
freecad.org
32.3k5.8k
pmndrs/react-three-fiber

🇨🇭 A React renderer for Three.js

TypeScriptnpmMIT Licensereactthreejs
docs.pmnd.rs/react-three-fiber
31.5k1.9k
BabylonJS/Babylon.js

Babylon.js is a powerful, beautiful, simple, and open game and rendering engine packed into a friendly JavaScript framework.

TypeScriptnpmApache License 2.0webglwebgl2
babylonjs.com
25.8k3.7k
libgdx/libgdx

Desktop/Android/HTML5/iOS Java game development framework

JavaMavenApache License 2.0libgdxjava
libgdx.com
25.2k6.5k
4ian/GDevelop

🎮 Open-source, cross-platform 2D/3D/multiplayer game engine designed for everyone.

JavaScriptnpmOthergamejavascript
gdevelop.io
25k1.5k
ssloy/tinyrenderer

A brief computer graphics / rendering course

C++Otheropenglc-plus-plus
haqr.eu/tinyrenderer/
23.9k2.3k
lettier/3d-game-shaders-for-beginners

🎮 A step-by-step guide to implementing SSAO, depth of field, lighting, normal mapping, and more for your 3D game.

C++shaders3d
lettier.github.io/3d-game-shaders-for-beginners/index.html
19.8k1.5k
blender/blender

Official mirror of Blender

C++Otherb3danimation
developer.blender.org/docs/handbook/contributing/using_git/
19.3k3.1k
aframevr/aframe

:a: Web framework for building virtual reality experiences.

JavaScriptnpmMIT Licensevrwebvr
aframe.io
17.6k4.4k
CesiumGS/cesium

An open-source JavaScript library for world-class 3D globes and maps :earth_americas:

JavaScriptnpmApache License 2.03dgeospatial
cesium.com/cesiumjs/
15.5k3.9k