$ man odytty — overview
OdyTTY is a terminal emulator we're building from scratch, in Rust. It's
GPU-backed (wgpu/Vulkan) and meant to be quick, sturdy, and pleasant enough to live
in all day.
The unusual part is what's underneath: we wrote the whole stack ourselves. Every byte — from
the pseudo-terminal all the way to the pixel on your screen — runs through our own code instead
of someone else's library.
Full byte-path ownership
The PTY layer uses rustix directly for openpt/grantpt/unlockpt
and session-leader spawn. The VT parser is a clean-room two-layer pipeline built from primary
specifications (vt100.net, ECMA-48, xterm ctlseqs) — not derived from vte
or any other terminal's source. vte, portable-pty, and crossterm
are not in the dependency tree. External crates handle only font rasterization, the GPU API,
windowing, and clipboard transport — the same boundary mature independent terminals draw.
- written inRust
- renderersingle-pass forward, wgpu / Vulkan
- platformLinux today · macOS & Windows on the way
- licenseGPL-3.0-only
- built-in themes53
Where it runs
We're building on Linux first, but OdyTTY isn't meant to stay there.
$ odytty --features
A few things most terminals don't do — or at least, not all at once, and not on top of their own code.
🎨 Live color emoji
Full cluster rendering via swash: ZWJ family sequences, flag pairs,
skin-tone modifiers, keycap sequences, and VS15/VS16 variation-selector policy.
Noto Color Emoji CBDT/CBLC bitmaps in a dedicated premultiplied-RGBA atlas. Emoji pixels
are never SGR-tinted.
🖼 Kitty graphics + Sixel
The full Kitty APC graphics surface (actions t/T/p/d/q, RGB/RGBA + PNG,
direct / file / shared-memory transports, placements, z-index, crop, cell scaling) plus a
complete Sixel data language with the VT340 palette and DECSDM.
⌨ Kitty keyboard protocol
Progressive enhancement as a negotiated overlay: disambiguation, event types
(press/repeat/release), alternate keys, report-all, associated text. Bounded stack;
RIS/DECSTR resets it. At flags 0 the output is byte-identical to
legacy key encoding.
🖱 SGR-pixel mouse (1016)
End-to-end pixel mouse reporting: DECSET/DECRST/DECRQM
wired, native pixel-to-cell seam closed, reports emitted as
CSI < Cb ; Px ; Py M|m with true physical pixel coordinates.
🌈 Theme-driven palette
A full 16-color ANSI palette plus semantic roles (cursor, selection, search, border).
53 contrast-validated built-ins, OSC-4 / OSC-10/11/12 dynamic
overrides with correct precedence, and a dependency-free .theme file format for
your own.
✨ Optional ambient layer
An off-by-default visual treatment — minimum-contrast lift, stem darkening, focus dimming,
bloom, and a CRT pass (scanlines + vignette) — all gated behind explicit settings. Readability
first; atmosphere on request.
Compatibility, in brief
Comprehensive VT coverage: SGR (256-color + truecolor, colon and semicolon forms), cursor
movement and position reports, scroll regions (DECSTBM/DECOM), alternate screen (47/1047/1048/1049),
mouse modes 9/1000/1002/1003 with encodings 1005/1006/1015/1016, focus reporting (1004),
DECSCUSR, OSC 0/2 titles, wide-character handling, rectangle ops (DECCRA/DECFRA/DECERA/DECCARA),
XTGETTCAP, DECRQSS, and bracketed paste. See protocols.