kitty(1)
๐ธ Name
Okay bestie, welcome to the kitty(1) page โ aka the fast, feature rich terminal emulator. This is the manual, but make it group-chat. ๐
kitty [options] [program-to-run ...]
Run the kitty terminal emulator. You can also pass the program to run inside kitty as normal arguments after the options. For example:
kitty --hold sh -c "echo hello, world"
For the full comprehensive documentation for kitty, please see: https://sw.kovidgoyal.net/kitty/
โจ Options โจ
--app-id <CLS>,--class <CLS>โ On Wayland this sets the application id. On X11 it sets the class part of theWM_CLASSwindow property. Default:kitty--name <NAME>,--os-window-tag <NAME>โ On Wayland this sets the window tag, when specified. On X11 this sets the name part of theWM_CLASSproperty; when unset, it defaults to using the value fromkitty --class.--title <TITLE>,-T <TITLE>โ Sets the OS window title. This will override any title set by the program running inside kitty, permanently fixing the OS windowโs title. So only use this if youโre running a program that does not set titles.--config <CONFIG>,-c <CONFIG>โ Specify a path to the configuration file(s) to use. All configuration files are merged onto the builtinkitty.conf, overriding the builtin values. This option can be specified multiple times to read multiple configuration files in sequence, which are merged. Use the special valueNONEto not load any config file.
If this option is not specified, config files are searched for in the order: $XDG_CONFIG_HOME/kitty/kitty.conf, ~/.config/kitty/kitty.conf, $XDG_CONFIG_DIRS/kitty/kitty.conf. The first one that exists is used as the config file.
If the environment variable KITTY_CONFIG_DIRECTORY is specified, that directory is always used and the above searching does not happen.
If /etc/xdg/kitty/kitty.conf exists, it is merged before (i.e. with lower priority) than any user config files. It can be used to specify system-wide defaults for all users. You can use either - or /dev/stdin to read the config from STDIN.
--override <OVERRIDE>,-o <OVERRIDE>โ Override individual configuration options. Can be specified multiple times. Syntax:name=value. For example:kitty -o font_size=20--directory <DIRECTORY>,--working-directory <DIRECTORY>,-d <DIRECTORY>โ Change to the specified directory when launching. Default:.--detach [=no]โ Detach from the controlling terminal, if any. On macOS useopen -a kitty.app -ninstead.--detached-log <DETACHED_LOG>โ Path to a log file to storeSTDOUT/STDERRwhen using--detach--session <SESSION>โ Path to a file containing the startup session (tabs, windows, layout, programs). Use-to read from STDIN. See Sessions for details and an example. Environment variables in the file name are expanded, relative paths are resolved relative to the kitty configuration directory. The special valuenonemeans no session will be used, even if thestartup_sessionoption has been specified inkitty.conf. Note that using this option means the command line arguments to kitty specifying a program to run are ignored.--hold [=no]โ Remain open, at a shell prompt, after child process exits. Note that this only affects the first window. You can quit by either using the close window shortcut or running theexitcommand.--single-instance [=no],-1 [=no]โ If specified only a single instance of kitty will run. New invocations will instead create a new top-level window in the existing kitty instance. This allows kitty to share a single sprite cache on the GPU and also reduces startup time. You can also have separate groups of kitty instances by using thekitty --instance-groupoption. You can use thekitty --start-as=hiddenflag to start a background kitty instance that acts as a server.--instance-group <INSTANCE_GROUP>โ Used in combination with thekitty --single-instanceoption. All kitty invocations with the samekitty --instance-groupwill result in new windows being created in the first kitty instance within that group.--wait-for-single-instance-window-close [=no]โ Normally, when usingkitty --single-instance, kitty will open a new window in an existing instance and quit immediately. With this option, it will not quit till the newly opened window is closed. Note that if no previous instance is found, then kitty will wait anyway, regardless of this option.--listen-on <LISTEN_ON>โ Listen on the specified socket address for control messages. For example,kitty --listen-on=unix:/tmp/mykittyorkitty --listen-on=tcp:localhost:12345. On Linux systems, you can also use abstract UNIX sockets, not associated with a file, like this:kitty --listen-on=unix:@mykitty. Environment variables are expanded and relative paths are resolved with respect to the temporary directory. To control kitty, you can send commands to it withkitten @using thekitten @ --tooption to specify this address. Note that if you runkitten @within a kitty window, there is no need to specify thekitten @ --tooption as it will automatically read from the environment. Note that this will be ignored unlessallow_remote_controlis set to either:yes,socketorsocket-only. This can also be specified inkitty.conf. To start in headless mode, without an actual window, usekitty --start-as=hidden.--start-as <START_AS>โ Control how the initial kitty OS window is created. Note that this applies to all OS Windows if you use thekitty --sessionoption to create multiple OS Windows. Any OS Windows state specified in the session file gets overridden. Default:normalChoices:fullscreen,hidden,maximized,minimized,normal--position <POSITION>โ The position, for example10x20, on screen at which to place the first kitty OS Window created by this invocation. This may or may not work depending on the policies of the desktop environment/window manager. It never works on Wayland. See alsoremember_window_positionto have kitty automatically try to restore the previous window position.--grab-keyboard [=no]โ Grab the keyboard. This means global shortcuts defined in the OS will be passed to kitty instead. Useful if you want to create an OS modal window. How well this works depends on the OS/window manager/desktop environment. On Wayland it works only if the compositor implements the inhibit-keyboard-shortcuts protocolhttps://wayland.app/protocols/keyboard-shortcuts-inhibit-unstable-v1. On macOS Apple doesnโt allow applications to grab the keyboard without special permissions, so it doesnโt work.
๐ Debugging options
--version [=no],-v [=no]โ The current kitty version.--dump-commands [=no]โ Output commands received from child process toSTDOUT.--replay-commands <REPLAY_COMMANDS>โ Replay previously dumped commands. Specify the path to a dump file previously created bykitty --dump-commands. You can open a new kitty window to replay the commands with:
kitty sh -c "kitty --replay-commands /path/to/dump/file; read"
--dump-bytes <DUMP_BYTES>โ Path to file in which to store the raw bytes received from the child process.--debug-gl [=no],--debug-rendering [=no]โ Debug rendering commands. This will cause all OpenGL calls to check for errors instead of ignoring them. Also prints out miscellaneous debug information. Useful when debugging rendering problems.--debug-input [=no],--debug-keyboard [=no]โ Print out key and mouse events as they are received.--debug-font-fallback [=no]โ Print out information about the selection of fallback fonts for characters not present in the main font.--watcher <WATCHER>โ This option is deprecated in favor of thewatcheroption inkitty.confand should not be used.
๐ช Tabs and windows
kitty is capable of running multiple programs organized into tabs and windows. The top level of organization is the OS window. Each OS window consists of one or more tabs. Each tab consists of one or more kitty windows. The kitty windows can be arranged in multiple different layouts, like windows are organized in a tiling window manager. The keyboard controls (which are all customizable) for tabs and windows are:
๐ธ Scrolling ๐ธ
okay so scrollback is literally a whole main character, and these are the key combos that let you move around it like you own the place. โจ
- Line up โ
ctrl+shift+up <#shortcut-kitty.Scroll-line-up> (also โฅ+โ+โ and โ+โ on macOS) - Line down โ
ctrl+shift+down <#shortcut-kitty.Scroll-line-down> (also โฅ+โ+โ and โ+โ on macOS) - Page up โ
ctrl+shift+page_up <#shortcut-kitty.Scroll-page-up> (also โ+โ on macOS) - Page down โ
ctrl+shift+page_down <#shortcut-kitty.Scroll-page-down> (also โ+โ on macOS) - Top โ
ctrl+shift+home <#shortcut-kitty.Scroll-to-top> (also โ+โ on macOS) - Bottom โ
ctrl+shift+end <#shortcut-kitty.Scroll-to-bottom> (also โ+โ on macOS) - Previous shell prompt โ
ctrl+shift+z <#shortcut-kitty.Scroll-to-previous-shell-prompt> (see Shell integration <#shell-integration>) - Next shell prompt โ
ctrl+shift+x <#shortcut-kitty.Scroll-to-next-shell-prompt> (see Shell integration <#shell-integration>) - Browse scrollback in
lessโctrl+shift+h <#shortcut-kitty.Browse-scrollback-buffer-in-pager> - Browse last cmd output โ
ctrl+shift+g <#shortcut-kitty.Browse-output-of-the-last-shell-command-in-pager> (see Shell integration <#shell-integration>) - Search scrollback in
lessโctrl+shift+/ <#shortcut-kitty.Search-the-scrollback-within-a-pager> (also โ+F on macOS)
heads up bestie: these scroll actions only take effect when the terminal is in the main screen. when the alternate screen is active (for example when using a full screen program like an editor) the key events are instead passed to the program running in the terminal. ๐
๐ Tabs ๐
tabs are lowkey self-care, no cap. hereโs the whole tab situation so you can shuffle them around with main character energy. ๐ฆ
- New tab โ
ctrl+shift+t <#shortcut-kitty.New-tab> (also โ+t on macOS) - Close tab โ
ctrl+shift+q <#shortcut-kitty.Close-tab> (also โ+w on macOS) - Next tab โ
ctrl+shift+right <#shortcut-kitty.Next-tab> (also โ+โฅ and โง+โ+] on macOS) - Previous tab โ
ctrl+shift+left <#shortcut-kitty.Previous-tab> (also โง+โ+โฅ and โง+โ+[ on macOS) - Next layout โ
ctrl+shift+l <#shortcut-kitty.Next-layout> - Move tab forward โ
ctrl+shift+. <#shortcut-kitty.Move-tab-forward> - Move tab backward โ
ctrl+shift+, <#shortcut-kitty.Move-tab-backward> - Set tab title โ
ctrl+shift+alt+t <#shortcut-kitty.Set-tab-title> (also โง+โ+i on macOS)
tab management is literally a vibe, periodt. ๐
๐ช windows, but make it window management ๐
okay so here's the whole window situation, shortcut by shortcut. each one also has a named action you can bind to whatever you want โ the #shortcut-kitty. thing is the action's name, iykyk.
- new window โ
ctrl+shift+enter(#shortcut-kitty.New-window), and it's alsoโ+โฉon macOS โจ - new OS window โ
ctrl+shift+n(#shortcut-kitty.New-OS-window), plusโ+non macOS ๐ฆ - close window โ
ctrl+shift+w(#shortcut-kitty.Close-window), plusโง+โ+don macOS ๐ - resize window โ
ctrl+shift+r(#shortcut-kitty.Start-resizing-window), plusโ+ron macOS - next window โ
ctrl+shift+](#shortcut-kitty.Next-window) - previous window โ
ctrl+shift+[(#shortcut-kitty.Previous-window) - move window forward โ
ctrl+shift+f(#shortcut-kitty.Move-window-forward) - move window backward โ
ctrl+shift+b(#shortcut-kitty.Move-window-backward) - move window to top โ
ctrl+shift+`(#shortcut-kitty.Move-window-to-top) - visually focus window โ
ctrl+shift+f7(#shortcut-kitty.Visually-select-and-focus-window) - visually swap window โ
ctrl+shift+f8(#shortcut-kitty.Visually-swap-window-with-another) - focus specific window โ
ctrl+shift+1(#shortcut-kitty.First-window),ctrl+shift+2(#shortcut-kitty.Second-window) ...ctrl+shift+0(#shortcut-kitty.Tenth-window), alsoโ+1,โ+2...โ+9on macOS ๐ (they go clockwise from the top-left, cute right?)
and bestie, there's MORE ๐ you can define your own shortcuts in kitty.conf to focus neighbouring windows and move windows around โ literally vim window movement vibes, obsessed:
map ctrl+left neighboring_window left
map shift+left move_window right
map ctrl+down neighboring_window down
map shift+down move_window up
...
want to hop back to the window you were just in? yes queen, there's a shortcut for that too:
map ctrl+p nth_window -1
so nth_window (#action-nth_window) focuses the nth window when you give it a positive number (counting starts from zero, no cap) and the previously active window when the number is negative. time travel but make it terminal ๐
and for the OS-window girlies, define nth_os_window (#action-nth_os_window). heads up though: only positive numbers are accepted here, and it starts from one ๐ซถ
you can also make shortcuts that detach the current window and yeet it into another tab or another OS window:
# moves the window into a new OS window
map ctrl+f2 detach_window
# moves the window into a new tab
map ctrl+f3 detach_window new-tab
# moves the window into the previously active tab
map ctrl+f3 detach_window tab-prev
# moves the window into the tab at the left of the active tab
map ctrl+f3 detach_window tab-left
# moves the window into a new tab created to the left of the active tab
map ctrl+f3 detach_window new-tab-left
# asks which tab to move the window into
map ctrl+f4 detach_window ask
same energy for tabs, you can detach the whole current tab:
# moves the tab into a new OS window
map ctrl+f2 detach_tab
# asks which OS Window to move the tab into
map ctrl+f4 detach_tab ask
โจ pro tip from the manpage: tabs can be re-arranged, detached and moved to another OS Window in the same kitty instance using drag and drop. drag and drop!! main character behaviour ๐
finally, if you want a shortcut that closes every window in the tab except the one you're on (iconic, slightly savage):
map f9 close_other_windows_in_tab
โจ๏ธ Other keyboard shortcuts โจ๏ธ
okay bestie, so there are so many more key combos than the ones we already covered, and the full list of actions you can map to key presses is available here <>. and if you wanna learn how to do more sophisticated keyboard mappings โ modal mappings, per-application mappings, all that spicy stuff โ go read Making your keyboard dance <>. โจ
here's the iconic shortcut cheat sheet, fr fr:
- Show this help โ
ctrl+shift+f1<#> (that'sshortcut-kitty.Show-documentation) - Copy to clipboard โ
ctrl+shift+c<#> (shortcut-kitty.Copy-to-clipboard) โ alsoโ+con macOS ๐ - Paste from clipboard โ
ctrl+shift+v<#> (shortcut-kitty.Paste-from-clipboard) โ alsoโ+von macOS ๐ - Paste from selection โ
ctrl+shift+s<#> (shortcut-kitty.Paste-from-selection) - Pass selection to program โ
ctrl+shift+o<#> (shortcut-kitty.Pass-selection-to-program) - Increase font size โ
ctrl+shift+equal<#> (shortcut-kitty.Increase-font-size) โ alsoโ++on macOS ๐ - Decrease font size โ
ctrl+shift+minus<#> (shortcut-kitty.Decrease-font-size) โ alsoโ+-on macOS ๐ - Restore font size โ
ctrl+shift+backspace<#> (shortcut-kitty.Reset-font-size) โ alsoโ+0on macOS ๐ - Toggle fullscreen โ
ctrl+shift+f11<#> (shortcut-kitty.Toggle-fullscreen) โ alsoโ+โ+fon macOS ๐ - Toggle maximized โ
ctrl+shift+f10<#> (shortcut-kitty.Toggle-maximized) - Input Unicode character โ
ctrl+shift+u<#> (shortcut-kitty.Unicode-input) โ alsoโ+โ+spaceon macOS ๐ - Open URL in web browser โ
ctrl+shift+e<#> (shortcut-kitty.Open-URL) - Reset the terminal โ
ctrl+shift+delete<#> (shortcut-kitty.Reset-the-terminal) โ alsoโฅ+โ+ron macOS ๐ - Edit kitty.conf โ
ctrl+shift+f2<#> (shortcut-kitty.Edit-config-file) โ alsoโ+,on macOS ๐ - Reload kitty.conf โ
ctrl+shift+f5<#> (shortcut-kitty.Reload-kitty.conf) โ alsoโ+โ+,on macOS ๐ - Debug kitty.conf โ
ctrl+shift+f6<#> (shortcut-kitty.Debug-kitty-configuration) โ alsoโฅ+โ+,on macOS ๐ - Open a kitty shell โ
ctrl+shift+escape<#> (shortcut-kitty.Open-the-kitty-command-shell) - Increase background opacity โ
ctrl+shift+a>m<#> (shortcut-kitty.Increase-background-opacity) - Decrease background opacity โ
ctrl+shift+a>l<#> (shortcut-kitty.Decrease-background-opacity) - Full background opacity โ
ctrl+shift+a>1<#> (shortcut-kitty.Make-background-fully-opaque) - Reset background opacity โ
ctrl+shift+a>d<#> (shortcut-kitty.Reset-background-opacity)
the way that background-opacity chord is giving two-step combo energy, iykyk ๐
๐ See also
- See
kitty.conf(5)๐ซถ
โ๏ธ Author
Kovid Goyal ๐
ยฉ๏ธ Copyright
2026, Kovid Goyal
and that's the whole page, bestie!! ๐ this was kitty version 0.49.2, dated Oct 01, 2026 โ go forth and slay your terminal, no cap ๐โจ๐ฆ
๐ฆ where this page comes from
- arch rolling: kitty 0.49.2-1 ยท GPL-3.0-only
- nixpkgs unstable: kitty-bin 0.49.2
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms