Shitty Terminal: Fast, But at What Cost?
Shitty, a new terminal emulator from developer pg83, promises blazing performance with a no-apologies attitude: "Memory-unsafe and faster than yours." It's a hard fork and complete rewrite of Zutty, and it leverages native GPU compute backends—Vulkan on Linux and Metal on macOS—to render cells directly on the CPU and GPU.
The headline numbers come from a benchmark script (dev/compare.py) that equalizes terminals (Menlo 12pt, 14x28px cell, 80x24 grid, 500 lines of scrollback) and measures wall time for 100MB of data. In printable ASCII (the common case), Shitty clocks 0.81s wall, 0.50s user, ~118 MiB/s throughput. Alacritty 0.17.0 trails at 0.96s/0.78s/~99 MiB/s, Kitty 0.48.2 at 1.28s/0.95s/~75 MiB/s, and Ghostty 1.3.1 at 1.49s/1.60s/~64 MiB/s.
In the worst-case random bytes test (invalid UTF-8 throughout), Shitty still wins: 1.88s wall, 1.79s user, ~51 MiB/s. Alacritty: 3.07s/2.92s/~31 MiB/s. Ghostty: 4.63s/~7.0s/~21 MiB/s. Kitty abstained because it reacts to escape junk with title changes and bells instead of drawing.
But speed isn't free. Shitty is written in C++23, and the README openly states it's memory-unsafe. It also uses a custom third_party/libstd revision, which could complicate builds. The project is currently dual-licensed under GPLv3-or-later and MIT, but the goal is to move to MIT-only. That means if you're shipping a proprietary product, you might want to wait until the license settles.
Feature Set: More Than Just Speed
Shitty isn't a stripped-down toy. It supports a broad range of terminal features:
- Terminal emulation: VT52 through VT5xx, plus common xterm extensions.
- Screens & scrollback: Primary/alternate screens, scrollback, margins, tabs, rectangular operations, protected cells, synchronized output, and reflow on width change.
- Text rendering: Unicode grapheme clusters, combining characters, emoji, double-width, and DEC double-width/height lines.
- Colors: 16, 256, and 24-bit, with underline color and styles.
- Keyboard protocols: Legacy, modifyOtherKeys, and Kitty.
- Mouse protocols: X10, VT200, UTF-8, SGR, SGR-pixel, and urxvt.
- Selection & clipboard: Linear/rectangular selection, primary selection, clipboard integration, OSC 52 policy, OSC 8 hyperlinks.
- Shell integration: Notifications, progress reports, in-band resize reporting.
- Rendering: Lazy glyph rasterization, persistent GPU glyph cache, damage-driven compute rendering.
It uses UTF-8 internally and exports TERM=xterm-256color to child processes, so you'll need the matching terminfo entry.
Build & Run: Nix-Friendly
The build system is straightforward if you have the dependencies: Python 3, glslangValidator, librsvg (for the icon), pkg-config, Brotli, utf8proc, and POSIX threads/PTY. Linux additionally needs FreeType, HarfBuzz, Wayland client headers, xkbcommon, Wayland-scanner, and Vulkan headers/loader. macOS needs SPIRV-Cross and uses CoreText, Cocoa, Metal, and IOSurface.
There's an optional dependency on simdutf 6.5+ to accelerate Base64 encoding, and Fontconfig for font-family lookup (otherwise you use explicit font file paths).
Build with ./build -j 8. For a debug build: ./build -B .build-debug. Nix users get a flake with nix build, nix run, and nix develop.
Run it with ./st -geometry 120x36 -saveLines 5000 or choose fonts with -font and -dwfont. The -v flag prints the version, -help lists options, and -listres shows advanced settings. Font size adjusts at runtime with Ctrl+Shift++ / Ctrl+- / Ctrl+0.
Security and Licensing: Read the Fine Print
The README is clear about the license transition: "Shitty is moving from the imported GPL baseline to an MIT-only codebase." Until then, the combined work is GPL. If you're planning to embed this in a proprietary product, you'll need to track the license status.
Also, the terminal doesn't implement bidirectional text or sixel graphics. If you depend on those, this isn't for you.
Testing: Robust but Not Perfect
Shitty includes a native black-box test suite that drives a dedicated headless st_test binary through a real PTY. It also runs a full imported conformance suite. Nix users can run ASan/UBSan builds and generate coverage reports. That's a solid testing story for a project this young.
Should You Switch?
If you're a performance junkie and you're on Linux or macOS with a Vulkan/Metal-capable GPU, Shitty is worth a try. The benchmarks are compelling, and the feature set is surprisingly complete. But the memory-unsafe label and the GPL license are real concerns. And the name—well, you'll have to explain that to your team.
Clone it, run ./build -j 8, and see if it beats your current terminal. The dev/compare.py script is there to prove it. Just don't blame me if your coworkers raise an eyebrow when you say you're using Shitty.

