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