What is Kitty
Kitty is a GPU-accelerated terminal emulator. It uses your graphics card to render text, giving you smooth scrolling, fast performance, and modern features like tabs, window splitting, and image rendering.
Use this lesson to understand kitty's architecture and mental model — GPU rendering, server/client design, windows, tabs, and kittens — so you can leverage its full power in server work.
Kitty offloads text rendering to the GPU, freeing the CPU for your applications. This makes it significantly faster than CPU-bound terminals for scrollback, large outputs, and high-refresh workflows.
The Problem Kitty Solves
Traditional terminals rely on CPU-side text rendering — every character is rasterized and composited by the CPU. This gets slow with:
- Large scrollback buffers (thousands of lines)
- Frequent redraws (live log tailing, animations)
- High-resolution or HiDPI displays
- Complex Unicode and ligature rendering
Without kitty:
Application → PTY → Terminal Emulator → CPU rasterizer → Display
(xterm, GNOME Terminal, etc.)
↓
Bottleneck here:
Single-thread CPU
With kitty:
Application → PTY → Kitty Server → GPU Pipeline → Display
↓
Parallel GPU shaders
Smooth 240+ fps
Ligatures, images,
Unicode, scrollback
Kitty Architecture Overview
┌──────────────────────────────────────────┐
│ Kitty Process Tree │
│ │
│ ┌──────────────────────────────────┐ │
│ │ Kitty Server (background) │ │
│ │ - Manages windows and tabs │ │
│ │ - Controls the GPU pipeline │ │
│ │ - Handles input processing │ │
│ └──────────┬───────────────────────┘ │
│ │ │
│ ┌──────────▼───────────────────────┐ │
│ │ OS Window (client viewer) │ │
│ │ - Renders to screen │ │
│ │ - Receives keyboard/mouse │ │
│ └──────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────┐ │
│ │ Kittens (aux processes) │ │
│ │ - icat (image display) │ │
│ │ - diff, remote-control, etc. │ │
│ └──────────────────────────────────┘ │
└──────────────────────────────────────────┘
Kitty vs Alternatives
| Feature | Kitty | Alacritty | xterm | GNOME Terminal |
|---|---|---|---|---|
| GPU rendering | ✅ Cross-platform | ✅ Cross-platform | ❌ CPU only | ❌ CPU only |
| Tabs built-in | ✅ | ❌ (needs multiplexer) | ❌ | ✅ |
| Window splitting | ✅ | ❌ | ❌ | ❌ |
| Image display | ✅ (icat kitten) | ❌ | ❌ | ❌ |
| Ligature support | ✅ | ✅ | ❌ | Partial |
| Remote control | ✅ (kitty @) | ❌ | ❌ | ❌ |
| True color | ✅ | ✅ | ✅ (config) | ✅ |
| Config reload live | ✅ Ctrl+Shift+F5 | ✅ | ❌ | ❌ |
| Plugin/kitten system | ✅ | ❌ | ❌ | ❌ |
| GPU acceleration lib | Custom OpenGL | OpenGL | — | — |
| Scrollback kitten | ✅ (with search) | ❌ (native) | Limited | Native |
The Prefix Key
Every kitty keyboard shortcut starts with a prefix combination (default: Ctrl+Shift), then another key.
Ctrl+Shift, then Enter → New window (vertical split)
Ctrl+Shift, then t → New tab
Ctrl+Shift, then q → Close window
The default prefix for kitty is Ctrl+Shift. Unlike tmux where you press and release, kitty bindings use simultaneous modifier+key combos. For example, Ctrl+Shift+Enter means hold all three at once.
Basic Commands Overview
# launch kitty from a terminal
kitty
# open a specific directory
kitty --directory /var/log
# list running kitty instances
kitty @ ls
# send command to a running kitty instance
kitty @ new-window --cwd /etc
Why Operators Use Kitty
| Need | Kitty capability | Practical effect |
|---|---|---|
| Performance | GPU rendering | Smooth scrolling even with thousands of lines |
| Multi-tasking | Tabs + splits | Editor, logs, shell — all visible |
| Remote work | SSH + local kitty | Full GPU-accelerated term on remote sessions |
| Image viewing | icat kitten | Inspect screenshots, diagrams in terminal |
| Automation | Remote control API | Script-driven window/tab management |
Common Mistakes (Beginners)
| Mistake | What happens | Fix |
|---|---|---|
| Closing terminal instead of detaching | Session killed | Kitty is a terminal emulator, not a multiplexer — use tmux for session persistence |
| Expecting tmux prefix style | Keys don't work | Kitty uses simultaneous Ctrl+Shift+key, not release-then-press |
| Editing config without reloading | Changes not applied | Press Ctrl+Shift+F5 or run kitty @ load-config |
Hands-On Practice
Try this on any Linux machine with kitty installed:
# launch kitty
kitty &
# inside kitty, try the basic shortcuts:
# Ctrl+Shift+Enter → new window (vertical split)
# Ctrl+Shift+Alt+Enter → new window (horizontal split)
# Ctrl+Shift+arrows → navigate between windows
# Ctrl+Shift+t → new tab
# Ctrl+Shift+q → close window or tab
# from a shell inside kitty, check version
kitty --version
# open the config file to explore
cat ~/.config/kitty/kitty.conf 2>/dev/null || echo "no config yet"