Public
Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md



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

KeyAction
Ctrl+Alt+CCopy selection
Ctrl+Alt+VPaste clipboard
Ctrl+Alt+EnterToggle 2D / 3D mode
Ctrl+Alt+MToggle Mobius mode
Ctrl+Alt+UpIncrease warp
Ctrl+Alt+DownDecrease warp
Alt+PageUpScroll one page up
Alt+PageDownScroll one page down
Alt+UpScroll one line up
Alt+DownScroll one line down
Ctrl+=Increase font size
Ctrl+-Decrease font size
Ctrl+Alt+0Reset 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

Copyright © 2026, Orhun Parmaksız

The author does not have a rat under the hat!

关于 About

A GPU-rendered terminal emulator with inline 3D graphics 🐀🧀
3d3d-graphicscommandgpugpu-renderinggraphicsratatuirattyrusttempleosterminalterminal-emulatorterminal-emulatorsterminal-graphics

语言 Languages

Rust92.5%
Nix2.7%
CSS1.6%
HTML1.5%
JavaScript1.2%
WGSL0.5%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
192
Total Commits
峰值: 44次/周
Less
More

核心贡献者 Contributors