
Kitty Terminal: A Fast, GPU-Powered Terminal for Daily Developer Work
A practical guide to the Kitty terminal emulator: what makes it fast, how to install and configure it, and how to use its layouts, kittens, and remote control to build a keyboard-driven workflow for SSH, cloud, and local development.
Why look at your terminal again?
Most developers spend hours a day in a terminal but rarely question which one they use. Kitty is worth a look. It's a cross-platform (Linux and macOS) terminal emulator created by Kovid Goyal, who also wrote Calibre. It renders text on the GPU, has tabs and split windows built in, and you can script it from outside the terminal.
This article covers what makes Kitty different, how to set it up, and the features that will save you the most time.
What makes Kitty different
- GPU rendering: Kitty draws text with OpenGL. Scrolling large logs, running
tail -f, or dumping big JSON responses stays smooth and responsive. - Built-in tabs and splits: You don't need tmux to work in multiple panes locally. Kitty has its own windows, tabs, and layouts.
- Kittens: These are small add-on programs that ship with Kitty. They can show images in the terminal, compare files side by side, pick themes, and improve SSH sessions.
- Remote control: You can control a running Kitty instance with
kitty @commands, so it's easy to automate. - Modern protocols: Kitty introduced a terminal graphics protocol and an extended keyboard protocol that other terminals and tools now support.
- Plain-text configuration: Everything lives in one well-commented file that's easy to keep under version control.
Installation
Official installer (Linux and macOS):
1
curl -L https://sw.kovidgoyal.net/kitty/installer.sh | sh /dev/stdinPackage managers:
1
2
3
4
5
6
7
8
9
10
11
# Fedora
sudo dnf install kitty
# Ubuntu / Debian
sudo apt install kitty
# Arch
sudo pacman -S kitty
# macOS (Homebrew)
brew install --cask kittyDistribution packages can lag behind upstream. Use the official installer if you want the latest features.
Configuration basics
Kitty reads its configuration from
~/.config/kitty/kitty.conf. Press Ctrl+Shift+F2 to open it in your editor and Ctrl+Shift+F5 to reload it without restarting.Here's a small starting configuration:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Fonts
font_family JetBrains Mono
font_size 12.0
# Window and tab appearance
window_padding_width 6
tab_bar_style powerline
tab_bar_edge bottom
# Behaviour
enable_audio_bell no
scrollback_lines 10000
copy_on_select yes
# Layouts to cycle through
enabled_layouts tall,fat,grid,splits,stack
# Allow scripting via `kitty @`
allow_remote_control yesTo pick a color scheme interactively with a live preview, run:
1
kitten themesEssential keyboard shortcuts
Kitty's modifier key (
kitty_mod) defaults to Ctrl+Shift.| Action | Shortcut |
|---|---|
| New window (split) | Ctrl+Shift+Enter |
| New tab | Ctrl+Shift+T |
| Next / previous tab | Ctrl+Shift+Right / Ctrl+Shift+Left |
| Cycle layouts | Ctrl+Shift+L |
| Close window | Ctrl+Shift+W |
| Browse scrollback in a pager | Ctrl+Shift+H |
| Open URLs with hints | Ctrl+Shift+E |
| Increase / decrease font size | Ctrl+Shift+= / Ctrl+Shift+- |
| Edit config | Ctrl+Shift+F2 |
| Reload config | Ctrl+Shift+F5 |
You can remap any of these in
kitty.conf, for example:1
2
map ctrl+shift+backslash launch --location=vsplit --cwd=current
map ctrl+shift+minus launch --location=hsplit --cwd=currentLayouts: splits without tmux
Kitty arranges windows inside a tab according to the active layout:
- tall / fat: one large main window with the others stacked beside or below it
- grid: all windows in an even grid
- splits: freeform horizontal and vertical splits, similar to tmux
- stack: one window at a time, full screen (useful for zooming in on a pane)
A common setup is the
splits layout with an editor on the left, a test watcher on the right, and a shell underneath. Switch to stack when you need to focus on one pane.Kittens worth knowing
SSH with Kitty features on the remote host:
1
kitten ssh ec2-user@my-instancekitten ssh copies Kitty's terminfo and shell integration to the remote host automatically. That avoids the common 'xterm-kitty': unknown terminal type error you can get on fresh EC2 instances or containers.Show images in the terminal:
1
kitten icat architecture-diagram.pngCompare files side by side with syntax highlighting:
1
kitten diff old-template.yaml new-template.yamlYou can also set it as your Git difftool:
1
2
3
git config --global diff.tool kitty
git config --global difftool.kitty.cmd 'kitten diff $LOCAL $REMOTE'
git difftoolOther useful kittens:
kitten unicode_inputto search for and insert any Unicode characterkitten clipboardto read and write the system clipboard, even over SSHkitten hintsto select URLs, paths, or hashes on screen using only the keyboard
Automating Kitty with remote control
With
allow_remote_control yes set, you can control Kitty from scripts:1
2
3
4
5
6
7
8
# Open a new tab titled "logs" that tails a file
kitty @ launch --type=tab --tab-title logs tail -f /var/log/app.log
# Send text to a specific window
kitty @ send-text --match title:logs "clear\n"
# Change colors on the fly (handy for flagging production shells)
kitty @ set-colors background=#3b0000One practical example: add a wrapper or shell hook that turns the background red whenever you connect to a production account or host. It's a simple visual guardrail against running commands in the wrong environment.
Sessions: start your workspace with one command
A session file describes the tabs, layouts, and commands to open at startup:
1
2
3
4
5
6
7
8
9
10
11
12
13
# ~/.config/kitty/dev.session
new_tab editor
layout splits
cd ~/projects/my-service
launch nvim
new_tab infra
cd ~/projects/my-service/infra
launch zsh
launch --location=vsplit zsh
new_tab logs
launch zshStart it with:
1
kitty --session ~/.config/kitty/dev.sessionKitty compared with alternatives
| Kitty | Alacritty | WezTerm | iTerm2 | |
|---|---|---|---|---|
| GPU rendering | Yes | Yes | Yes | Partial |
| Built-in tabs and splits | Yes | No | Yes | Yes |
| Inline images | Yes (own protocol) | No | Yes | Yes |
| Scripting | kitty @ | Limited | Lua | AppleScript / Python |
| Platforms | Linux, macOS | Linux, macOS, Windows | Linux, macOS, Windows | macOS |
If you need Windows support, WezTerm or Alacritty are better choices. On Linux and macOS, Kitty combines speed, built-in features, and scripting better than any of the others.
Tips and gotchas
- Use
kitten sshinstead ofssh. It avoids most terminfo problems on remote hosts. You can addalias ssh="kitten ssh". - Keep tmux for persistence. Kitty splits are local. If you need sessions that survive a disconnect on a remote server, keep using tmux or screen there.
- Store your config in your dotfiles repo.
kitty.confis plain text and works on every machine. - Read the generated default config. Every option is documented inline, and it's the fastest way to learn what Kitty can do.
Wrapping up
Kitty is fast, scriptable, and has the features you'd otherwise get by combining a terminal, tmux, and a few CLI utilities. Install it, run
kitten themes, learn five shortcuts, and switch your ssh to kitten ssh. Within a week you'll probably have a session file that opens your whole development environment with one command.Resources
- Official documentation: https://sw.kovidgoyal.net/kitty/
- Source code: https://github.com/kovidgoyal/kitty
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article