What is kitty?
kitty is a GPU based terminal emulator for people who spend their day in one. It renders with OpenGL, so a build log or a wall of coloured output scrolls smoothly, and it treats the terminal as a platform rather than a text box: windows and tabs arranged by tiling layouts, a graphics protocol that draws real images inline, a keyboard protocol that lets programs tell shift+enter from enter, clickable hyperlinks, ligatures, and shell integration that knows where every prompt and every command's output begins and ends. Next to the terminal comes kitten, a single companion executable holding the small tools the terminal is built around: kitten icat shows an image, kitten ssh carries your terminfo and shell integration to a remote host, kitten diff is a side-by-side diff that handles images too, kitten clipboard, kitten themes, and kitten @ drives the terminal itself from a script. It is written by Kovid Goyal, the author of calibre, and everything is configured in one kitty.conf.
kitten executable altogether, so the kitten ssh and kitten icat commands in the current documentation do not exist there. An old kitty also quietly ignores the kitty.conf options the current docs tell you to set, and every newer kitten (choose-fonts, notify, quick-access-terminal, panel) is simply missing. The terminal is the one program you run all day; it should be the current one.
⚡ Key Features of kitty
🎮 GPU Rendering
kitty draws with OpenGL, handing the glyph work to the GPU and keeping the CPU for the program you are actually running. Big outputs scroll at the display's refresh rate and the terminal stays responsive under a flood of text.
🪟 Windows, Tabs and Layouts
Split a tab into windows and let a layout (tall, fat, grid, splits, stack) arrange them: ctrl+shift+enter opens a window, ctrl+shift+t a tab. A session file recreates a whole workspace, each window with its directory and its command.
🖼️ The Graphics Protocol
Real images, not block characters. kitten icat shows a picture inline, and the same protocol is what yazi, viu, Neovim image plugins and matplotlib backends use when they draw in your terminal.
🐈 Kittens
kitten is one static executable full of small tools: icat, ssh, diff, clipboard, themes, hints to pick URLs, paths or hashes off the screen by keyboard, unicode_input, transfer to copy files over an ssh session, and more.
🎛️ Remote Control
With allow_remote_control on, kitten @ drives the terminal from any script: open windows, send text to them, change colours, resize, list what is running. Scripted layouts without a multiplexer in between.
🐚 Shell Integration
kitty knows where each prompt starts: jump between prompts with ctrl+shift+z, open the last command's output in a pager, click to move the cursor inside the current line, and have new windows open in the current directory. bash, zsh and fish, shipped by kitty-shell-integration.
apt upgrade keeps you on the latest version.
📦 Installation from deb.griffo.io
Step 1: Add Repository
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 There is an always-free mirror. deb-free.griffo.io serves packages free forever, no account, no subscription, at most 2 months behind upstream, security fixes immediately. It currently carries cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud and Zed; kitty is not one of them, so the repository above is the only way to get it today, ask and it can be enrolled.
🧩 About the extrepo option. extrepo is Debian's own tool for external repositories: it writes the sources file and installs the signing key for you, checking the key against signed metadata first. This repository is registered with it as griffo, and the always-free mirror as griffo-free, so on Debian (bookworm, trixie, forky and sid) the commands above are the whole setup.
extrepo sets up the sources file and the key only, so a subscription's credentials still go in /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu is not covered, because extrepo publishes metadata for Debian suites only: there, use the sudo or root commands.
Step 2: Install kitty
# Install latest kitty; kitty-terminfo and kitty-shell-integration come with it
sudo apt install kitty
# Optional, the HTML documentation under /usr/share/doc/kitty/html
sudo apt install kitty-doc
# Verify installation, both the terminal and the companion CLI
kitty --version
kitten --version# Install latest kitty; kitty-terminfo and kitty-shell-integration come with it
apt install kitty
# Optional, the HTML documentation under /usr/share/doc/kitty/html
apt install kitty-doc
# Verify installation, both the terminal and the companion CLI
kitty --version
kitten --versionStep 3: First run
# Open a kitty window
kitty
# Make kitty the default terminal for x-terminal-emulator
sudo update-alternatives --config x-terminal-emulator
# The config is ~/.config/kitty/kitty.conf: ctrl+shift+f2 opens it
# inside kitty, ctrl+shift+f5 reloads it. This prints the effective one
kitty --debug-config
# Browse the bundled colour themes and apply one
kitten themes# Open a kitty window
kitty
# Make kitty the default terminal for x-terminal-emulator
update-alternatives --config x-terminal-emulator
# The config is ~/.config/kitty/kitty.conf: ctrl+shift+f2 opens it
# inside kitty, ctrl+shift+f5 reloads it. This prints the effective one
kitty --debug-config
# Browse the bundled colour themes and apply one
kitten themes🎯 Basic Usage Examples
Starting it:
# A terminal
kitty
# Run a command in a new kitty window and keep it open afterwards
kitty --hold htop
# Override any kitty.conf option on the command line
kitty -o font_size=14 -o background_opacity=0.9
# Start in a directory
kitty --directory ~/src
# Restore a whole workspace from a session file
kitty --session ~/.config/kitty/work.session
# What is installed?
kitty --versionThe kittens:
# Show an image right in the terminal
kitten icat photo.png
# ssh with your terminfo and shell integration carried along
kitten ssh user@server
# Side-by-side diff, images included
kitten diff old.txt new.txt
# Copy to and read from the system clipboard
echo hello | kitten clipboard
kitten clipboard --get-clipboard
# Apply a theme to every running kitty window
kitten themes --reload-in=all Catppuccin-Mocha
# Pick a font interactively
kitten choose-fontsRemote control:
# Put allow_remote_control yes in kitty.conf, then from any shell
# running inside kitty: open a new window to the right of this one
kitten @ launch --location=vsplit --cwd=current
# Type a command into another window, matched by its title
kitten @ send-text --match title:logs "tail -f /var/log/syslog\n"
# Change colours on the fly
kitten @ set-colors background=#1e1e2e
# What is open right now
kitten @ ls🔧 Tool Integrations
kitty is the terminal under everything else, so most of the integration is about what runs inside it:
- Remote servers: kitty sets
TERM=xterm-kitty, and a host without that terminfo gives you a broken backspace and complaints fromlessandclear.kitten sshcopies it across for you; for the hosts you reach with plainssh, installkitty-terminfothere, an arch-independent package that carries nothing but the terminfo entry and pulls in nothing else - Your shell:
kitty-shell-integrationships the bash, zsh and fish hooks under/usr/share/kitty/shell-integration, andshell_integration enabledinkitty.conf, the default, turns them on without touching your rc files - yazi, viu and Neovim: all three draw images through the kitty graphics protocol, and Neovim speaks the kitty keyboard protocol natively, so this is the terminal they were tested in
- Zellij and tmux: kitty's own windows, tabs and layouts cover most of what a local multiplexer does; reach for Zellij when a session must outlive the window, and give tmux
extended-keysand passthrough so the kitty protocols survive the trip - Your desktop: the package installs the desktop entry, icons and man pages and registers the
x-terminal-emulatoralternative, so kitty shows up in your launcher and oneupdate-alternativescall makes it the system default
🚀 Why Choose deb.griffo.io?
- Official Debian: ships kitty 0.41.1 in trixie and 0.26.5 in Bookworm, each frozen for the life of its release
- The upstream installer: one
curl | shinto~/.local/kitty.app, current, but per user, with no desktop entry, man pages orx-terminal-emulatorunless you wire them yourself, and updated by running the installer again - Building from source: Python, Go, a long list of
-devpackages and a good while, for a binary apt knows nothing about - deb.griffo.io: latest version with automatic updates
- ✅ Same Package Names as Debian:
kitty,kitty-terminfo,kitty-shell-integrationandkitty-doc, exactly what the Debian archive calls them, so this repository upgrades the stock kitty in place and a laterapt removeleaves nothing behind - ✅ The Official Build: the upstream prebuilt bundle, the same bits as kitty's own installer, placed under
/opt/kittywith/usr/bin/kittyand/usr/bin/kittensymlinks; no source build, no patches - ✅ Properly Integrated: desktop entry, icons, man pages, terminfo and shell integration at the standard Debian paths, and the
x-terminal-emulatoralternative registered - ✅ kitty-terminfo Travels Alone: an architecture-independent package with nothing but the
xterm-kittyterminfo, for the servers you ssh into - ✅ Automatic Updates: packages updated within hours of upstream releases
- ✅ Two Architectures: amd64 and arm64, the two upstream publishes bundles for; there is no i386, armhf or riscv64 build
- ✅ Multi-Distribution: works on Bookworm, Trixie, Forky and Sid
- ✅ Easy Maintenance: standard apt commands for updates
📦 Package Build Repository
The Debian packages are automatically built and maintained in this GitHub repository:
- 🐱 kitty-debian - Latest release builds
🔗 Related Packages
Also available from deb.griffo.io:
- Ghostty - The other GPU terminal here, with a native GTK interface and a different set of trade-offs
- Zellij - A workspace multiplexer for the sessions that should outlive a window
- Yazi File Manager - Draws its previews through kitty's graphics protocol
- viu Image Viewer - A terminal image viewer that speaks the kitty graphics protocol too
- Neovim - Image plugins and the kitty keyboard protocol work out of the box in this terminal
💝 Support This Project
If this repository saves you time and effort, please consider supporting it!