kitty is a terminal emulator: the app that gives you a window to type commands into. It replaces the terminal that came with your system, leaves your shell and every command as they are, and adds tabs, split panes, fast drawing and a config file you edit as text.
What a terminal emulator is
A terminal used to be hardware: a screen and a keyboard wired to a computer shared by many people. Programs were written to talk to those machines. They sent characters to show, plus short codes called escape sequences to move the cursor or change colour, and they received a character back for each key pressed.
The hardware is gone, but programs such as shells, git and vim still talk that way. A terminal emulator is an app that plays the old terminal's part in a window. It turns your key presses into characters, and it turns the program's output into text on the screen.
That makes the terminal a separate layer from the shell, the program (zsh, bash or fish) that reads your commands and runs them. Here is one command passing through those layers, from key press to output:
What happens when you run ls in kitty
Step 1 of 6: You type ls and press Enter. kitty turns each key press into characters.
kitty never works out what ls means. It passes your characters to the shell and draws whatever comes back, which is why changing terminal leaves your commands alone.
Same shell, same commands
kitty starts the shell you already use. Your .zshrc or .bashrc, your aliases, your history and every program you have installed behave as before.
What changes is everything around the text: how fast it is drawn, how windows are arranged, which fonts and colours are used and what the keyboard shortcuts do. A nicer prompt and smarter completion come from the shell and from the command-line tools you run inside it, so changing terminal won't add them.
Install it on macOS with Homebrew, or on Linux with your package manager:
brew install --cask kitty # macOS
sudo apt install kitty # Debian or Ubuntukitty runs on Linux, macOS and the BSDs. There is no Windows version, and the similarly named KiTTY for Windows is an unrelated program.
Tabs, windows and layouts
kitty has its own names for things. The window on your desktop is an 'OS window'. It holds tabs, and each tab holds one or more 'windows', which most apps would call panes or splits. Every one of them runs its own shell, with its own folder and scrollback, so a long-running job in one carries on when you move to another.
This tab is split three ways, with a shell, an editor and a log on screen together:
You can do all of this from the keyboard:
| Action | Linux | macOS |
|---|---|---|
| New tab | ctrl+shift+t | cmd+t |
| Next tab | ctrl+shift+right | ctrl+tab |
| New window | ctrl+shift+enter | cmd+enter |
| Next window | ctrl+shift+] | ctrl+shift+] |
| Next layout | ctrl+shift+l | ctrl+shift+l |
A layout decides how the windows in a tab are arranged, and kitty has seven. 'Tall' keeps one full-height window on the left and stacks the rest on the right. 'Grid' gives every window the same size. 'Stack' shows one window at full size with the others hidden behind it. 'Next layout' cycles through them, so the same windows rearrange without closing.
The 'splits' layout lets you choose where each new window goes. It needs two shortcuts of your own, which are in the config file below.
Why it feels fast
Drawing text is the terminal's job, and a slow terminal shows when a build or a log prints thousands of lines. kitty hands the drawing to the GPU, the graphics chip that also draws video and games, which lowers the load on the CPU.
For everyday commands, any modern terminal is fast enough. The difference shows with heavy output, long scrollback and full-screen programs such as vim or htop.
Configuring kitty
All settings live in one text file, ~/.config/kitty/kitty.conf. Press ctrl+shift+f2 (cmd+, on macOS) to open it and ctrl+shift+f5 (ctrl+cmd+, on macOS) to reload it. Each line is an option and its value:
# ~/.config/kitty/kitty.conf
font_family JetBrains Mono
font_size 14.0
tab_bar_style powerline
scrollback_lines 10000
# Split windows, keeping the folder
enabled_layouts splits,stack
map f5 launch --location=hsplit --cwd=current
map f6 launch --location=vsplit --cwd=currentWith this file, F5 opens a new window below the current one and F6 opens one beside it, both in the folder you were in. The font has to be installed and monospace, meaning every character has the same width, because a terminal draws text on a grid.
Two built-in helpers, which kitty calls kittens, save editing by hand. kitten themes lists colour themes with a preview and saves your choice to the config. kitten choose-fonts does the same for fonts.
Because the config is a plain file, you can keep it in a Git repository and copy it to another machine.
Common mistakes
- Expecting kitty to change your prompt or your commands. That is the shell's job, and kitty only draws what the shell sends.
- Errors after connecting to a server over SSH, such as an 'unknown terminal type' message or arrow keys that stop working. kitty identifies itself as
xterm-kitty, and the server has no description of that terminal. Connect withkitten ssh myserver, which copies the description across. - Editing
kitty.confand seeing no change. Reload the config with the shortcut above. - Expecting tabs to survive after kitty closes. They live in the app on your machine. To keep a session running on a remote server after you disconnect, use a terminal multiplexer such as tmux, which runs inside any terminal.
When to use it
kitty pays off if you spend hours a day at the command line and want tabs, splits and settings you control from the keyboard and a text file. If you open a terminal now and then to run a single command, the one built into your system or your editor already does the job.
It is one of several terminals that draw with the GPU, alongside Alacritty, WezTerm and Ghostty. They differ in features and configuration. Since the shell is separate, your commands and shell setup move between them unchanged.
Key takeaways
- kitty is a terminal emulator: an app that plays the part of the old hardware terminal in a window.
- The terminal draws text and passes on key presses. The shell runs the commands, so switching to kitty changes neither.
- Each tab holds windows arranged by a layout, and every window runs its own shell.
- kitty draws with the GPU, which helps most with heavy output.
- One text file,
kitty.conf, holds the fonts, colours and shortcuts.