Appearance
Kitty
App Terminal + Parser Backend
Kitty's VT parser via Python subprocess bridge (kitty +runpy).
See also: Kitty Extensions standard
Kitty was created by Kovid Goyal and first released in 2017. Written in C and Python with OpenGL GPU rendering, it was one of the first terminals to use the GPU for text rendering, achieving smooth scrolling and low latency that traditional CPU-rendered terminals couldn't match.
Kitty's most lasting contribution to the terminal ecosystem is the Kitty keyboard protocol (CSI u), which solves decades-old ambiguity in how terminals encode keypresses. The protocol has since been adopted by Ghostty, WezTerm, foot, and others. Kitty also pioneered the Kitty graphics protocol for inline image display and introduced extended underline styles (curly, dotted, dashed) with independent underline colors — features now standard in modern terminals.
Kitty supports a rich extension ecosystem through "kittens" — small Python programs that run inside the terminal. Notable kittens include an image viewer, SSH integration, and a diff viewer. The terminal also features native tab and window management, remote control via IPC, and extensive Unicode support.
Backend: Kitty's VT parser via Python subprocess bridge (kitty +runpy). (native) · v0.40.0
64%
150 passed · 52 partial · 31 failed of 233 features
Tested: April 10, 2026
Analysis2026-04-06
Kitty scores 87% (219/251) on the terminfo.dev feature matrix, with gaps in the Core TUI, Modern TUI, Rich TUI, Unicode baselines. Ranks #7 of 12 tested terminals. Missing 32 features.
Character Sets
| Feature | Support | Notes |
|---|---|---|
| DEC line drawing character set | ✓ yes | |
| DEC Special Graphics | ✓ yes | |
| G0/G1 character set switching | ✓ yes | |
| UTF-8 mode | ✓ yes |
Cursor
| Feature | Support | Notes |
|---|---|---|
| ANSI restore cursor (CSI u) | ✓ yes | |
| ANSI save cursor (CSI s) | ✓ yes | |
| CPL cursor preceding line (CSI F) | ✓ yes | |
| CUD stops at bottom | ✓ yes | |
| CUP at screen boundaries | ✓ yes | |
| CUP with DECOM | ✓ yes | |
| CUU stops at top | ✓ yes | |
| Hide cursor (DECTCEM) | ✓ yes | |
| Cursor horizontal absolute (CHA) | ✓ yes | |
| HPA horizontal position absolute (CSI `) | ✓ yes | |
| Cursor position (CUP) | ✓ yes | |
| Cursor back (CUB) | ✓ yes | |
| Cursor down (CUD) | ✓ yes | |
| Cursor forward (CUF) | ✓ yes | |
| Cursor home | ✓ yes | |
| Cursor up (CUU) | ✓ yes | |
| Cursor next line (CNL) | ✓ yes | |
| Cursor position report (DSR 6) | ~ partial | Headless mode has no output stream for DSR responses |
| Reverse Wrap (Mode 45) | ✓ yes | |
| Save/restore cursor (DECSC) | ✓ yes | |
| Cursor shape (DECSCUSR) | ✓ yes | |
| VPA vertical position absolute (CSI d) | ✓ yes |
Device Status
| Feature | Support | Notes |
|---|---|---|
| Mode Report (DECRPM) | ~ partial | Headless mode has no output stream for DECRPM responses |
| Request Setting (DECRQSS) | ~ partial | Headless mode has no output stream for DECRQSS responses |
| DSR ?996 — color scheme query | ? unknown | |
| COLORTERM env variable | ? unknown | |
| KITTY_* env variables | ? unknown | |
| LC_TERMINAL env variable | ? unknown | |
| NO_COLOR env variable | ? unknown | |
| TERM env variable | ? unknown | |
| TERM_PROGRAM env variable | ? unknown | |
| VTE_VERSION env variable | ? unknown | |
| WEZTERM_* env variables | ? unknown | |
| WT_SESSION env variable | ? unknown | |
| Primary device attributes (DA1) | ~ partial | Headless mode has no output stream for DA1 responses |
| Secondary Device Attributes (DA2) | ~ partial | Headless mode has no output stream for DA2 responses |
| Device status report (DSR 5) | ~ partial | Headless mode has no output stream for DSR responses |
| Feature Reporting (TERM_FEATURES) | ? unknown | |
| Tertiary Device Attributes (DA3) | ~ partial | Headless mode has no output stream for DA3 responses |
| Query Terminfo (XTGETTCAP) | ~ partial | Headless mode has no output stream for XTGETTCAP responses |
| XTGETXRES — query resource value (DCS + Q) | ✗ no | XTGETXRES resource query — xterm-specific |
| XTREPORTCOLORS — report color capabilities (CSI # R) | ✗ no | XTREPORTCOLORS (xterm patch 401+) not yet adopted outside xterm |
| Terminal Version (XTVERSION) | ~ partial | Headless mode has no output stream for XTVERSION responses |
| Report window size in pixels (CSI 14 t) | ~ partial | Window operations not exposed via Python batch bridge |
| Report cell size in pixels (CSI 16 t) | ~ partial | Window operations not exposed via Python batch bridge |
| Report text area size in chars (CSI 18 t) | ~ partial | Window operations not exposed via Python batch bridge |
| Report icon label (CSI 20 t) | ~ partial | Window operations not exposed via Python batch bridge |
| Report window title (CSI 21 t) | ~ partial | Window operations not exposed via Python batch bridge |
| Push title/icon stack (CSI 22 ; 0 t) | ~ partial | Title stack not exposed via Python batch bridge |
| Pop title/icon stack (CSI 23 ; 0 t) | ~ partial | Title stack not exposed via Python batch bridge |
Editing
| Feature | Support | Notes |
|---|---|---|
| DECCARA — change attrs in rectangle | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| DECCRA — copy rectangular area | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| DECDC — delete columns (CSI Ps ' ~) | ✗ no | Column editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps |
| DECERA — erase rectangular area | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| DECFRA — fill rectangular area | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| DECIC — insert columns (CSI Ps ' }) | ✗ no | Column editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps |
| DECRARA — reverse attrs in rectangle | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| DECRQCRA — checksum rectangular area | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| DECSACE — select attribute-change extent | ✓ yes | |
| DECSERA — selective erase rectangular area | ✗ no | VT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals |
| Delete characters (DCH) | ✓ yes | |
| Delete lines (DL) | ✓ yes | |
| Insert characters (ICH) | ✓ yes | |
| Insert lines (IL) | ✓ yes | |
| Repeat character (REP) | ✓ yes | |
| SL — shift left (CSI Ps SP @) | ✗ no | Column editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps |
| SR — shift right (CSI Ps SP A) | ✗ no | Column editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps |
Erase
| Feature | Support | Notes |
|---|---|---|
| Erase character (ECH) | ✓ yes | |
| ED at scroll region boundary | ✓ yes | |
| EL erases with bg color | ✓ yes | |
| Erase line (EL 2) | ✓ yes | |
| Erase to BOL (EL 1) | ✓ yes | |
| Erase to EOL (EL 0) | ✓ yes | |
| Erase above (ED 1) | ✓ yes | |
| Erase screen (ED 2) | ✓ yes | |
| Erase below (ED 0) | ✓ yes | |
| Erase scrollback (ED 3) | ✓ yes | |
| Selective Erase (DECSED) | ✓ yes |
Extensions
| Feature | Support | Notes |
|---|---|---|
| System clipboard paste | ? unknown | |
| Font ligatures | ? unknown | |
| iTerm2 Inline Images (OSC 1337) | ✗ no | iTerm2 inline images not supported — Kitty uses its own graphics protocol |
| Kitty graphics protocol | ✓ yes | |
| Kitty graphics: animation | ✓ yes | |
| Kitty graphics: display | ✓ yes | |
| Kitty graphics: transmit | ✓ yes | |
| Kitty graphics: Unicode placeholders | ✓ yes | |
| Kitty keyboard protocol | ✓ yes | |
| Kitty keyboard: DISAMBIGUATE (flag 1) | ✓ yes | |
| Kitty keyboard: REPORT_ALL_KEYS (flag 8) | ✓ yes | |
| Kitty keyboard: REPORT_ALTERNATE (flag 4) | ✓ yes | |
| Kitty keyboard: REPORT_EVENTS (flag 2) | ✓ yes | |
| Kitty keyboard: REPORT_TEXT (flag 16) | ✓ yes | |
| Desktop Notifications (OSC 9/777) | ~ partial | OSC 9 notifications not exposed via Python batch bridge |
| VS Code Shell Integration (OSC 633) | ~ partial | OSC 633 not exposed via Python batch bridge |
| Icon and title (OSC 0) | ✓ yes | |
| Icon name (OSC 1) | ✓ yes | |
| Foreground color query (OSC 10) | ~ partial | OSC 10 color query not exposed via Python batch bridge |
| Reset color palette (OSC 104) | ✗ no | OSC 104 color reset requires a real display — headless backends have no color palette to reset |
| Background color query (OSC 11) | ~ partial | OSC 11 color query not exposed via Python batch bridge |
| Reset foreground color (OSC 110) | ✗ no | OSC 110 foreground reset requires a real display — headless backends have no color palette to reset |
| Reset background color (OSC 111) | ✗ no | OSC 111 background reset requires a real display — headless backends have no color palette to reset |
| Reset cursor color (OSC 112) | ✗ no | OSC 112 cursor color reset requires a real display — headless backends have no color palette to reset |
| Reset pointer fg color (OSC 113) | ? unknown | |
| Reset pointer bg color (OSC 114) | ? unknown | |
| Reset highlight background (OSC 117) | ✓ yes | |
| Reset highlight foreground (OSC 119) | ✓ yes | |
| Cursor color (OSC 12) | ✗ no | OSC 12 cursor color query requires a real display — headless backends have no color palette to query |
| OSC 133;A prompt start (FTCS_PROMPT) | ✓ yes | |
| OSC 133;B command start (FTCS_COMMAND_START) | ✓ yes | |
| OSC 133;C command executed (FTCS_COMMAND_EXECUTED) | ✓ yes | |
| OSC 133;D command finished (FTCS_COMMAND_FINISHED) | ✓ yes | |
| OSC 133;P properties | ✓ yes | |
| iTerm2 Capability Reporting (OSC 1337) | ✗ no | iTerm2-specific protocol not supported by kitty |
| iTerm2 Cell Size Reporting (OSC 1337) | ✗ no | iTerm2-specific protocol not supported by kitty |
| Highlight background (OSC 17) | ✗ no | OSC 17 highlight background query requires a real display — headless backends have no color palette to query |
| Set Wayland app-id (OSC 176) | ? unknown | |
| Highlight foreground (OSC 19) | ✗ no | OSC 19 highlight foreground query requires a real display — headless backends have no color palette to query |
| Window title (OSC 2) | ✓ yes | |
| Kitty color protocol (OSC 21) | ~ partial | OSC 21 query responses not exposed via Python batch bridge |
| Pointer shape (OSC 22) | ? unknown | |
| Kitty color stack push (OSC 30001) | ? unknown | |
| Systemd context (OSC 3008) | ? unknown | |
| Kitty color stack pop (OSC 30101) | ? unknown | |
| Color palette (OSC 4) | ✗ no | OSC 4 color query requires a real display — headless backends have no color palette to query |
| Audio sound (OSC 440) | ? unknown | |
| Special color (OSC 5) | ✗ no | OSC 5 special color query requires a real display — headless backends have no color palette to query |
| Clipboard access (OSC 52) | ~ partial | OSC 52 clipboard not exposed via Python batch bridge |
| OSC 52 clipboard read | ~ partial | OSC 52 clipboard read not exposed via Python batch bridge |
| OSC 52 clipboard write | ✓ yes | |
| OSC 5522 advanced clipboard | ~ partial | OSC 5522 not exposed via Python batch bridge |
| Screen flash (OSC 555) | ? unknown | |
| OSC 633;A prompt start | ✓ yes | |
| OSC 633;B prompt end | ✓ yes | |
| OSC 633;C pre-execution | ✓ yes | |
| OSC 633;D command finished | ✓ yes | |
| OSC 633;E set commandline | ✓ yes | |
| OSC 633;P properties | ✓ yes | |
| OSC 66 text sizing | ~ partial | OSC 66 not exposed via Python batch bridge — kitty supports it natively |
| VTE termprop (OSC 666) | ? unknown | |
| Current directory (OSC 7) | ~ partial | OSC 7 CWD reporting not exposed via Python batch bridge |
| Locale query/set (OSC 701) | ? unknown | |
| Version query (OSC 702) | ? unknown | |
| Set normal font (OSC 710) | ? unknown | |
| Scroll view up (OSC 720) | ? unknown | |
| Cell size report (OSC 776) | ? unknown | |
| Notifications (OSC 777) | ? unknown | |
| Font size query/set (OSC 7770) | ? unknown | |
| Font + window size (OSC 7777) | ? unknown | |
| Hyperlinks (OSC 8) | ✓ yes | |
| OSC 9;4 progress bar | ? unknown | |
| Desktop notifications (OSC 99) | ? unknown | |
| Text reflow on resize | ✓ yes | |
| Semantic prompts (OSC 133) | ~ partial | OSC 133 not exposed via Python batch bridge |
| Sixel graphics | ✗ no | Declined by maintainer — kitty uses its own graphics protocol instead of sixel |
| Sixel support in DA1 | ✗ no | Sixel not supported by kitty — uses its own graphics protocol |
| Sixel geometry report (CSI ? Pi;Pa;Pv S) | ✗ no | Sixel geometry report not supported |
| 24-bit truecolor | ✓ yes |
Input Protocols
| Feature | Support | Notes |
|---|---|---|
| Button-Event Mouse (1002) | ~ partial | Button-event mouse tracking not exposed via headless API |
| CSI u Key Encoding | ✓ yes | |
| Kitty click events | ? unknown | |
| modifyOtherKeys | ~ partial | modifyOtherKeys not exposed via Python batch bridge |
| modifyOtherKeys mode 3 | ~ partial | modifyOtherKeys mode 3 not exposed via Python batch bridge |
| Pixel Mouse Reporting (1016) | ~ partial | SGR pixel mouse mode not exposed via Python batch bridge |
| urxvt Mouse Reporting (1015) | ✗ no | urxvt mouse mode (?1015) not implemented in kitty |
| X10 Mouse Tracking (9) | ✗ no | X10 mouse mode (?9) not implemented in kitty |
Modes
| Feature | Support | Notes |
|---|---|---|
| Enter alt screen (DECSET 1049) | ✓ yes | |
| Exit alt screen (DECRST 1049) | ✓ yes | |
| Alt-scroll mouse wheel (?1007) | ✓ yes | |
| Alt screen clear-on-enter (?1047) | ✓ yes | |
| Save/restore cursor (?1048) | ~ partial | ?1048 save/restore cursor not exposed via Python batch bridge |
| Alt screen legacy (?47) | ✓ yes | |
| App cursor keys (DECCKM) | ✓ yes | |
| Application keypad (DECKPAM) | ~ partial | Not exposed via Python batch bridge |
| Auto-wrap (DECAWM) | ✓ yes | |
| Bracketed paste (DECSET 2004) | ✓ yes | |
| Mode 2031 color scheme reporting | ~ partial | Mode 2031 not exposed via Python batch bridge |
| DECCOLM 80/132 column switch (?3) | ✓ yes | |
| DECSCLM — smooth scroll mode | ? unknown | |
| DECSSCLS — set scroll speed | ? unknown | |
| Focus tracking (DECSET 1004) | ✓ yes | |
| Insert/replace mode (IRM) | ~ partial | Not exposed via Python batch bridge |
| Left/Right Margins (DECLRMM, Mode 69) | ~ partial | DECLRMM not exposed via Python batch bridge |
| All motion mouse (DECSET 1003) | ~ partial | All-motion mouse tracking not exposed via Python batch bridge |
| SGR mouse mode (DECSET 1006) | ~ partial | SGR mouse encoding not exposed via Python batch bridge |
| Mouse tracking (DECSET 1000) | ~ partial | Not exposed via Python batch bridge |
| Origin mode (DECOM) | ~ partial | Not exposed via Python batch bridge |
| Reverse video (DECSCNM) | ~ partial | Not exposed via Python batch bridge |
| Synchronized output (DECSET 2026) | ✓ yes | |
| UTF-8 mouse mode (?1005) | ✓ yes | |
| Pop color palette (CSI # Q) | ~ partial | Color palette stack not exposed via Python batch bridge |
| XTPOPSGR — pop SGR stack (CSI # }) | ~ partial | SGR stack not exposed via Python batch bridge |
| Push color palette (CSI # P) | ~ partial | Color palette stack not exposed via Python batch bridge |
| XTPUSHSGR — push SGR stack (CSI # {) | ~ partial | SGR stack not exposed via Python batch bridge |
| XTRESTORE — restore DEC private modes (CSI ? Pm r) | ~ partial | XTRESTORE private mode restore not exposed via Python batch bridge |
| XTSAVE — save DEC private modes (CSI ? Pm s) | ~ partial | XTSAVE private mode save not exposed via Python batch bridge |
Reset
| Feature | Support | Notes |
|---|---|---|
| DECALN screen alignment (ESC # 8) | ✓ yes | |
| Backend reset() method | ✓ yes | |
| Full reset (RIS) | ✓ yes | |
| SGR reset clears attributes | ✓ yes | |
| Soft reset (DECSTR) | ~ partial | DECSTR resets modes but headless probe reads stale state |
Scrollback
| Feature | Support | Notes |
|---|---|---|
| Scrollback accumulates | ✓ yes | |
| Alt screen separate scrollback | ✓ yes | |
| DECSTBM constrains scrolling | ✓ yes | |
| DECSTBM reset to full screen | ✓ yes | |
| Reverse index (RI) | ✓ yes | |
| Scroll down (SD) | ✓ yes | |
| Scroll up (SU) | ✓ yes | |
| Scroll region (DECSTBM) | ✓ yes | |
| Total line count | ✓ yes |
SGR (Text Styling)
Text
| Feature | Support | Notes |
|---|---|---|
| Backspace (BS) | ✓ yes | |
| Basic text rendering | ✓ yes | |
| CBT backward tab (CSI Z) | ✓ yes | |
| CHT forward tab (CSI I) | ✓ yes | |
| Combining characters (0 cols) | ✓ yes | |
| Carriage return | ✓ yes | |
| HTS set tab stop (ESC H) | ✓ yes | |
| Index (IND) | ✓ yes | |
| Line feed | ✓ yes | |
| Next line (NEL) | ✓ yes | |
| Overwrite at cursor | ✓ yes | |
| Reverse Index at Scroll Top | ✓ yes | |
| Tab stops | ✓ yes | |
| TBC clear tab stop (CSI g) | ✗ no | Tab stop clear (TBC) not exposed via Python batch bridge |
| CJK wide chars (2 cols) | ✓ yes | |
| Emoji wide chars (2 cols) | ✓ yes | |
| Regional indicator flags (2 cols) | ✓ yes | |
| Variation selector 16 (emoji presentation) | ✓ yes | |
| Emoji ZWJ sequences (2 cols) | ✓ yes | |
| Text wraps at width | ✓ yes |
Unicode
| Feature | Support | Notes |
|---|---|---|
| East Asian Ambiguous Width | ✓ yes | |
| Grapheme Cluster Cursor Movement | ✓ yes | |
| Tab Stops (HT) | ✓ yes | |
| Wide Char at Line Wrap | ✓ yes |