shitty
A serious terminal emulator with a stupid name
What is it?
What it is
Shitty is a low-latency, fast-startup terminal emulator built for predictable resource use, rendering cells with native compute backends (Vulkan on Linux, Metal on macOS) and sharing code with its polite-brand counterpart Pretty (pt).
Why it exists
To provide a blazingly fast, correct, flicker-free, indestructible terminal with Unicode grapheme cluster support, self-contained operation, and locked-down-by-default security, while offering a polite alternative (Pretty) for users who prefer a non-offensive name.
Who should use it
Developers needing high-performance terminal emulationPower users prioritizing speed and low latencySystem administrators optimizing terminal resources
Who should avoid it
Security-focused users due to memory-unsafetyBeginners lacking technical expertise for setupUsers requiring strict security guarantees
How it works
A quick walkthrough in plain English
How shitty works
Step 1 of 3
You interact with it
Open shitty, send a request, or connect it to your stack.
Features
Advantages
- Extremely fast performance with high throughput and low latency
- Comprehensive correctness: 5,000+ tests, fuzzed parser, no crashes on random data
- Flicker‑free rendering with damage‑driven updates
- Indestructible parser state machine, total and fuzzed with corpora
- Robust Unicode support: grapheme clusters, emoji, combining marks, wide CJK
- Self‑contained: single binary, embedded fonts, no external dependencies
- Locked‑down security: default restrictions on selection and window control
Disadvantages
- Does not support bidirectional text layout
- No inline graphics protocols such as sixel
- Requires a Vulkan driver and Wayland compositor on Linux (may limit use on some systems)
- Some historical DEC and xterm extensions are intentionally unsupported
- Memory‑unsafe implementation (may be a concern for safety‑critical environments)
Installation
FAQ
How do I install Shitty on macOS using Homebrew?
Run `brew install pg83/tap/shitty` for the Shitty brand and `brew install pg83/tap/pretty` for the Pretty brand. The tap automatically tracks the latest release and installs the portable binaries `st-darwin-arm64.tar.gz` and `pt-darwin-arm64.tar.gz`.
How can I start a terminal with a specific size and scrollback capacity?
Use the `-geometry` and `-saveLines` options. For example: `./st -geometry 120x36 -saveLines 5000` starts a 120‑column by 36‑row terminal with 5,000 lines of scrollback.
How do I configure multiple fonts and fallbacks?
Pass `-font` multiple times or use a comma‑separated list. Later fonts act as fallbacks. Example: `./st -font 'DejaVu Sans Mono' -font 'Noto Sans Mono CJK JP'`. The terminal will automatically resolve regular, bold, italic, and bold‑italic faces and fall back to the embedded monospace‑emoji trio if no system font is available.
How can I remap a key combination to another or disable it?
Use the `-remap` flag or add a `remap` entry in the config file. Syntax: `-remap from=to`. Example: `./st -remap ctrl+b=ctrl+d -remap super+t=ctrl+shift+t -remap ctrl+l=none`. The remap applies to the application, kitty protocol, and terminal shortcuts.
How do I enable OSC 52 clipboard access or allow applications to read selections?
By default OSC 52 is disabled. Add `allowClipboard = true` or `allowOSC52 = true` in `~/.config/shitty/shitty.toml` (or the equivalent Pretty config) to grant trusted applications access to the clipboard and OSC 52 operations.
Featured in Videos
YouTube tutorials and walkthroughs for shitty
Alternatives
Similar projects ranked by category, topics, and text overlap.