Building kitty from source

Build status

kitty is designed to run from source, for easy hackability. Make sure the following dependencies are installed first.


Run-time dependencies:

  • python >= 3.5
  • harfbuzz >= 1.5.0
  • zlib
  • libpng
  • freetype (not needed on macOS)
  • fontconfig (not needed on macOS)
  • ImageMagick (optional, needed to use the kitty icat tool to display images in the terminal)
  • pygments (optional, need for syntax highlighting in kitty +kitten diff)

Build-time dependencies:

  • gcc or clang
  • pkg-config
  • For building on Linux in addition to the above dependencies you might also need to install the -dev packages for: libdbus-1-dev, libxcursor-dev, libxrandr-dev, libxi-dev, libxinerama-dev, libgl1-mesa-dev, libxkbcommon-x11-dev, libfontconfig-dev and libpython-dev. if they are not already installed by your distro.

Install and run from source

git clone && cd kitty

Now build the native code parts of kitty with the following command:


You can run kitty, as:

python3 .

If that works, you can create a script to launch kitty:

#!/usr/bin/env python3
import runpy
runpy.run_path('/path/to/kitty/dir', run_name='__main__')

And place it in ~/bin or /usr/bin so that you can run kitty using just kitty.

Building on macOS from source

Install imagemagick, optipng and librsvg using brew or similar (needed for the logo generation step). And run:

make app

This unlike the released one does not include its own copy of python and the other dependencies. So if you ever un-install/upgrade those dependencies you might have to rebuild the app.

Note that the released kitty.dmg includes all dependencies, unlike the built above and is built automatically by using the kitty branch of build-calibre however, that is designed to run on Linux and is not for the faint of heart.

Note for Linux/macOS packagers

The released kitty source code is available as a tarball from the GitHub releases page.

While kitty does use python, it is not a traditional python package, so please do not install it in site-packages. Instead run:

python3 linux-package

This will install kitty into the directory linux-package. You can run kitty with linux-package/bin/kitty. All the files needed to run kitty will be in linux-package/lib/kitty. The terminfo file will be installed into linux-package/share/terminfo. Simply copy these files into /usr to install kitty. In other words, linux-package is the staging area into which kitty is installed. You can choose a different staging area, by passing the --prefix argument to

You should probably split kitty into two packages, kitty-terminfo that installs the terminfo file and kitty that installs the main program. This allows users to install the terminfo file on servers into which they ssh, without needing to install all of kitty.


You need a couple of extra dependencies to build linux-package. tic to compile terminfo files, usually found in the development package of ncurses. Also, if you are building from a git checkout instead of the released source code tarball, you will need sphinx-build from the Sphinx documentation generator.

This applies to creating packages for kitty for macOS package managers such as brew or MacPorts as well.