Skip to main content

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.

Learning Focus

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.

Core Idea

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

FeatureKittyAlacrittyxtermGNOME Terminal
GPU rendering✅ Cross-platform✅ Cross-platform❌ CPU only❌ CPU only
Tabs built-in❌ (needs multiplexer)
Window splitting
Image display✅ (icat kitten)
Ligature supportPartial
Remote control✅ (kitty @)
True color✅ (config)
Config reload live✅ Ctrl+Shift+F5
Plugin/kitten system
GPU acceleration libCustom OpenGLOpenGL
Scrollback kitten✅ (with search)❌ (native)LimitedNative

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
warning

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

NeedKitty capabilityPractical effect
PerformanceGPU renderingSmooth scrolling even with thousands of lines
Multi-taskingTabs + splitsEditor, logs, shell — all visible
Remote workSSH + local kittyFull GPU-accelerated term on remote sessions
Image viewingicat kittenInspect screenshots, diagrams in terminal
AutomationRemote control APIScript-driven window/tab management

Common Mistakes (Beginners)

MistakeWhat happensFix
Closing terminal instead of detachingSession killedKitty is a terminal emulator, not a multiplexer — use tmux for session persistence
Expecting tmux prefix styleKeys don't workKitty uses simultaneous Ctrl+Shift+key, not release-then-press
Editing config without reloadingChanges not appliedPress 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"

What's Next