Skip to main content

Kitty Key Concepts

Before you can use kitty fluently, you need to internalize five core concepts: GPU rendering, the server/client model, windows, tabs, and kittens.

Core Idea

Kitty is both a terminal emulator (the GUI window you see) and a rendering engine (GPU pipeline). Everything else — windows, tabs, kittens — is built on top of this architecture.

The Five Core Concepts​

1. GPU Rendering​

Kitty uses the GPU for all text rendering. The font atlas and glyph cache live in GPU memory, and the compositor runs as a graphics shader.

# check if GPU rendering is active
kitty @ ls | grep -i render
Rendering Pipeline:
┌──────────┐ ┌─────────────┐ ┌──────────────┐
│ Text │ → │ Font Atlas │ → │ GPU Shader │
│ Input │ │ (VRAM) │ │ Compositor │
└──────────┘ └─────────────┘ └──────┬───────┘
▼
┌──────────────┐
│ Framebuffer │
│ → Display │
└──────────────┘
note

If no GPU is available, kitty falls back to a CPU renderer. Performance degrades but functionality is preserved.

2. Server / Client Model​

Kitty runs a background server process that manages all windows and tabs. The OS window is just a client view into that server.

# list all kitty instances (server processes)
kitty @ ls

# send a command to a specific kitty instance
kitty @ --to unix:/tmp/kitty-XXXX new-window
ComponentRole
Kitty serverBackground daemon, owns GPU state, manages windows/tabs
OS windowFront-end viewer, receives input, renders frames
kitty @Remote control interface, sends commands to server

3. Windows​

A window is a terminal shell inside kitty — like a tmux pane. Windows fill the available space inside a tab or are split with other windows.

ShortcutAction
Ctrl+Shift+EnterNew window (vertical split)
Ctrl+Shift+Alt+EnterNew window (horizontal split)
Ctrl+Shift+arrowsMove focus between windows
Ctrl+Shift+Alt+arrowsResize current window
Ctrl+Shift+qClose current window
# from the command line
kitty @ new-window --cwd /var/log
kitty @ close-window

4. Tabs​

A tab is a container for one or more windows — like a browser tab. Each tab has its own set of window splits.

ShortcutAction
Ctrl+Shift+tNew tab
Ctrl+Shift+Alt+tName current tab
Ctrl+Shift+left/rightPrevious/next tab
Ctrl+Shift+1-9Switch to tab by number
Ctrl+Shift+qClose current tab (when only one window)
# from the command line
kitty @ new-tab --tab-title "monitoring"
kitty @ set-tab-title "logs"

5. Kittens​

A kitten is a small kitty-specific program that extends functionality. Kittens are invoked with kitty +kitten <name>.

# display an image in the terminal
kitty +kitten icat screenshot.png

# diff two files with syntax highlighting
kitty +kitten diff file1.txt file2.txt

# clipboard access
kitty +kitten clipboard --text "hello"

# interactive help
kitty +kitten help
KittenPurpose
icatDisplay images inline in terminal
diffSide-by-side diff with syntax highlighting
clipboardRead/write system clipboard
remote-controlEnable kitty @ commands
update-extensionsUpdate kitty extensions

The Prefix Key​

The default prefix for kitty is Ctrl+Shift. Unlike tmux, kitty uses chorded keybindings — you hold all keys simultaneously:

Ctrl+Shift+Enter (hold all three at once)
Ctrl+Shift+t (hold all three at once)
warning

Kitty keybindings are chords, not sequences. Hold Ctrl and Shift together while pressing the action key. This is different from tmux where you press-and-release the prefix.

Command Palette​

Press Ctrl+Shift+p to open the command palette — a searchable list of all available actions:

Ctrl+Shift+p → Opens command palette
Type to filter → "new tab", "close", "resize"...
Enter to execute

The Config File​

Kitty loads its configuration from ~/.config/kitty/kitty.conf:

# check if you have one
cat ~/.config/kitty/kitty.conf 2>/dev/null || echo "no config yet"

# create default config
kitty +runpy 'from kitty.config import *; print(commented_out_default_config())' > ~/.config/kitty/kitty.conf

# reload config without restarting
kitty @ load-config
# or inside kitty: Ctrl+Shift+F5

Concept Map at a Glance​

┌──────────────────────────────────────────────────────────┐
│ Kitty Terminal │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Tab 1: "editor" Tab 2: "monitoring" │ │
│ │ ┌──────────┬──────────┐ ┌──────────────────┐ │ │
│ │ │ Window 0 │ Window 1 │ │ Window 0: htop │ │ │
│ │ │ (vim) │ (shell) │ │ │ │ │
│ │ ├──────────┼──────────┤ ├──────────────────┤ │ │
│ │ │ Window 2 │ Window 3 │ │ Window 1: logs │ │ │
│ │ │ (git) │ (server) │ │ │ │ │
│ │ └──────────┴──────────┘ └──────────────────┘ │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Kitten: icat │ Kitten: diff │ kitty @ │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ GPU Pipeline (OpenGL → Shader → Framebuffer) │ │
│ └──────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘

Quick Reference Summary​

ConceptWhat it isManaged with
GPU renderingHardware-accelerated text outputAuto (configurable via kitty.conf)
ServerBackground kitty daemonAuto-started with first window
WindowTerminal shell inside a tabCtrl+Shift+Enter, kitty @ new-window
TabContainer for windowsCtrl+Shift+t, kitty @ new-tab
KittenExtensions invoked via kitty +kittenkitty +kitten <name>
PrefixModifier for shortcutsCtrl+Shift (default)

What's Next​