Skip to content

Kitty

App Terminal + Parser Backend

GPU-accelerated terminal by Kovid Goyal. Pioneer of the Kitty keyboard and graphics protocols. Written in C/Python.

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: GPU-accelerated terminal by Kovid Goyal. Pioneer of the Kitty keyboard and graphics protocols. Written in C/Python. · v0.46.2
86%
218 passed · 36 failed of 254 features
Tested: April 18, 2026
Analysis2026-04-18

Kitty scores 86% (218/254) on the terminfo.dev feature matrix, with gaps in the Core TUI, Modern TUI, Rich TUI, Legacy, Unicode baselines. Ranks #5 of 12 tested terminals. Missing 36 features.

Character Sets

FeatureSupportNotes
DEC line drawing character set✓ yes
DEC Special Graphics✓ yes
G0/G1 character set switching✓ yes
UTF-8 mode✓ yes

Device Status

FeatureSupportNotes
Mode Report (DECRPM)✗ noHeadless mode has no output stream for DECRPM responses
Request Setting (DECRQSS)✗ noHeadless 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)✓ yesHeadless mode has no output stream for DA1 responses
Secondary Device Attributes (DA2)✓ yesHeadless mode has no output stream for DA2 responses
Device status report (DSR 5)✓ yesHeadless mode has no output stream for DSR responses
Feature Reporting (TERM_FEATURES)✗ noTERM_FEATURES env var not set
Tertiary Device Attributes (DA3)✗ noHeadless mode has no output stream for DA3 responses
Query Terminfo (XTGETTCAP)✗ noHeadless mode has no output stream for XTGETTCAP responses
XTGETXRES — query resource value (DCS + Q)✗ noXTGETXRES resource query — xterm-specific
XTREPORTCOLORS — report color capabilities (CSI # R)✗ noXTREPORTCOLORS (xterm patch 401+) not yet adopted outside xterm
Terminal Version (XTVERSION)✗ noHeadless mode has no output stream for XTVERSION responses
Report window size in pixels (CSI 14 t)✓ yesWindow operations not exposed via Python batch bridge
Report cell size in pixels (CSI 16 t)✗ noWindow operations not exposed via Python batch bridge
Report text area size in chars (CSI 18 t)✓ yesWindow operations not exposed via Python batch bridge
Report icon label (CSI 20 t)✗ noWindow operations not exposed via Python batch bridge
Report window title (CSI 21 t)✗ noWindow operations not exposed via Python batch bridge
Push title/icon stack (CSI 22 ; 0 t)✓ yesTitle stack not exposed via Python batch bridge
Pop title/icon stack (CSI 23 ; 0 t)✓ yesTitle stack not exposed via Python batch bridge

Editing

FeatureSupportNotes
DECCARA — change attrs in rectangle✓ yesVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
DECCRA — copy rectangular area✓ yesVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
DECDC — delete columns (CSI Ps ' ~)✓ yesColumn editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps
DECERA — erase rectangular area✓ yesVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
DECFRA — fill rectangular area✓ yesVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
DECIC — insert columns (CSI Ps ' })✓ yesColumn editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps
DECRARA — reverse attrs in rectangle✓ yesVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
DECRQCRA — checksum rectangular area✗ noVT420 rectangular area operations not implemented — legacy DEC features omitted by most modern terminals
DECSACE — select attribute-change extent✓ yessequence consumed
DECSERA — selective erase rectangular area✓ yesVT420 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 @)✓ yesColumn editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps
SR — shift right (CSI Ps SP A)✓ yesColumn editing (SL/SR/DECIC/DECDC) not implemented — rarely needed by modern TUI apps

Extensions

FeatureSupportNotes
System clipboard paste? unknown
Font ligatures? unknown
iTerm2 Inline Images (OSC 1337)✓ yes
Kitty graphics protocol✓ yes
Kitty graphics: animation✓ yes
Kitty graphics: display✓ yes
Kitty graphics: transmit✓ yes
Kitty graphics: Unicode placeholders✓ yes
Kitty keyboard protocol✗ noNo kitty keyboard response
Kitty keyboard: DISAMBIGUATE (flag 1)✗ noNo kitty keyboard response
Kitty keyboard: REPORT_ALL_KEYS (flag 8)✗ noNo kitty keyboard response
Kitty keyboard: REPORT_ALTERNATE (flag 4)✗ noNo kitty keyboard response
Kitty keyboard: REPORT_EVENTS (flag 2)✗ noNo kitty keyboard response
Kitty keyboard: REPORT_TEXT (flag 16)✗ noNo kitty keyboard response
Desktop Notifications (OSC 9/777)✓ yesOSC 9 notifications not exposed via Python batch bridge
VS Code Shell Integration (OSC 633)✓ yesOSC 633 not exposed via Python batch bridge
Icon and title (OSC 0)✓ yes
Icon name (OSC 1)✓ yes
Foreground color query (OSC 10)✓ yesOSC 10 color query not exposed via Python batch bridge
Reset color palette (OSC 104)✓ yesOSC 104 color reset requires a real display — headless backends have no color palette to reset
Background color query (OSC 11)✓ yesOSC 11 color query not exposed via Python batch bridge
Reset foreground color (OSC 110)✓ yesOSC 110 foreground reset requires a real display — headless backends have no color palette to reset
Reset background color (OSC 111)✓ yesOSC 111 background reset requires a real display — headless backends have no color palette to reset
Reset cursor color (OSC 112)✓ yesOSC 112 cursor color reset requires a real display — headless backends have no color palette to reset
Reset pointer fg color (OSC 113)✓ yes
Reset pointer bg color (OSC 114)✓ yes
Reset highlight background (OSC 117)✓ yes
Reset highlight foreground (OSC 119)✓ yes
Cursor color (OSC 12)✓ yesOSC 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)✗ noiTerm2-specific protocol not supported by kitty
iTerm2 Cell Size Reporting (OSC 1337)✗ noiTerm2-specific protocol not supported by kitty
Highlight background (OSC 17)✓ yesOSC 17 highlight background query requires a real display — headless backends have no color palette to query
Set Wayland app-id (OSC 176)✓ yes
Highlight foreground (OSC 19)✓ yesOSC 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)✓ yesOSC 21 query responses not exposed via Python batch bridge
Pointer shape (OSC 22)✓ yes
Kitty color stack push (OSC 30001)✓ yes
Systemd context (OSC 3008)✓ yes
Kitty color stack pop (OSC 30101)✓ yes
Color palette (OSC 4)✓ yesOSC 4 color query requires a real display — headless backends have no color palette to query
Audio sound (OSC 440)✓ yes
Special color (OSC 5)✓ yesOSC 5 special color query requires a real display — headless backends have no color palette to query
Clipboard access (OSC 52)✓ yesOSC 52 clipboard not exposed via Python batch bridge
OSC 52 clipboard read✗ noOSC 52 clipboard read not exposed via Python batch bridge
OSC 52 clipboard write✓ yes
OSC 5522 advanced clipboard✗ noOSC 5522 not exposed via Python batch bridge
Screen flash (OSC 555)✓ yes
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✓ yesOSC 66 not exposed via Python batch bridge — kitty supports it natively
VTE termprop (OSC 666)✓ yes
Current directory (OSC 7)✓ yesOSC 7 CWD reporting not exposed via Python batch bridge
Locale query/set (OSC 701)✓ yes
Version query (OSC 702)✓ yes
Set normal font (OSC 710)✓ yes
Scroll view up (OSC 720)✓ yes
Cell size report (OSC 776)✓ yes
Notifications (OSC 777)✓ yes
Font size query/set (OSC 7770)✓ yes
Font + window size (OSC 7777)✓ yes
Hyperlinks (OSC 8)✓ yes
OSC 9;4 progress bar✓ yes
Desktop notifications (OSC 99)✓ yes
Text reflow on resize✓ yes
Semantic prompts (OSC 133)✓ yesOSC 133 not exposed via Python batch bridge
Sixel graphics✓ yesDeclined by maintainer — kitty uses its own graphics protocol instead of sixel
Sixel support in DA1✗ noSixel not supported by kitty — uses its own graphics protocol
Sixel geometry report (CSI ? Pi;Pa;Pv S)✗ noSixel geometry report not supported
24-bit truecolor✓ yes

Input Protocols

FeatureSupportNotes
Button-Event Mouse (1002)✓ yesButton-event mouse tracking not exposed via headless API
CSI u Key Encoding✓ yes
Kitty click events? unknown
modifyOtherKeys✓ yesmodifyOtherKeys not exposed via Python batch bridge
modifyOtherKeys mode 3✓ yesmodifyOtherKeys mode 3 not exposed via Python batch bridge
Pixel Mouse Reporting (1016)✓ yesSGR pixel mouse mode not exposed via Python batch bridge
urxvt Mouse Reporting (1015)✓ yesurxvt mouse mode (?1015) not implemented in kitty
X10 Mouse Tracking (9)✓ yesX10 mouse mode (?9) not implemented in kitty

Modes

FeatureSupportNotes
Enter alt screen (DECSET 1049)✓ yesBehavioral: entered and responded
Exit alt screen (DECRST 1049)✓ yes
Alt-scroll mouse wheel (?1007)✓ yesBehavioral: ?1007 accepted
Alt screen clear-on-enter (?1047)✓ yesBehavioral: ?1047 accepted
Save/restore cursor (?1048)✗ no?1048 save/restore cursor not exposed via Python batch bridge
Alt screen legacy (?47)✓ yesBehavioral: ?47 enter/exit accepted
App cursor keys (DECCKM)✓ yesBehavioral: responsive after enable
Application keypad (DECKPAM)✓ yesNot exposed via Python batch bridge
Auto-wrap (DECAWM)✓ yesBehavioral: wrap confirmed
Bracketed paste (DECSET 2004)✓ yesBehavioral: terminal responsive after enable
Mode 2031 color scheme reporting✗ noMode 2031 not exposed via Python batch bridge
DECCOLM 80/132 column switch (?3)✓ yesBehavioral: ?3 accepted
DECSCLM — smooth scroll mode? unknown
DECSSCLS — set scroll speed? unknown
Focus tracking (DECSET 1004)✓ yesBehavioral: responsive after enable
Insert/replace mode (IRM)✓ yesNot exposed via Python batch bridge
Left/Right Margins (DECLRMM, Mode 69)✓ yesDECLRMM not exposed via Python batch bridge
All motion mouse (DECSET 1003)✓ yesAll-motion mouse tracking not exposed via Python batch bridge
SGR mouse mode (DECSET 1006)✓ yesSGR mouse encoding not exposed via Python batch bridge
Mouse tracking (DECSET 1000)✓ yesNot exposed via Python batch bridge
Origin mode (DECOM)✗ noNot exposed via Python batch bridge
Reverse video (DECSCNM)✓ yesNot exposed via Python batch bridge
Synchronized output (DECSET 2026)✓ yesBehavioral: responsive after enable
UTF-8 mouse mode (?1005)✓ yesBehavioral: ?1005 accepted
Pop color palette (CSI # Q)✓ yesColor palette stack not exposed via Python batch bridge
XTPOPSGR — pop SGR stack (CSI # })✓ yesSGR stack not exposed via Python batch bridge
Push color palette (CSI # P)✓ yesColor palette stack not exposed via Python batch bridge
XTPUSHSGR — push SGR stack (CSI # {)✓ yesSGR stack not exposed via Python batch bridge
XTRESTORE — restore DEC private modes (CSI ? Pm r)✓ yesXTRESTORE private mode restore not exposed via Python batch bridge
XTSAVE — save DEC private modes (CSI ? Pm s)✓ yesXTSAVE private mode save not exposed via Python batch bridge

Reset

FeatureSupportNotes
DECALN screen alignment (ESC # 8)✓ yes
Backend reset() method✓ yescursor at 5;5 after DECSTR
Full reset (RIS)✓ yes
SGR reset clears attributes✓ yes
Soft reset (DECSTR)✓ yesDECSTR resets modes but headless probe reads stale state

Scrollback

FeatureSupportNotes
Scrollback accumulates✓ yes
Alt screen separate scrollback✓ yes
DECSTBM constrains scrolling✓ yes
DECSTBM reset to full screen✓ yescursor at row 24 (expected near bottom after DECSTBM reset)
Reverse index (RI)✓ yes
Scroll down (SD)✓ yes
Scroll up (SU)✓ yes
Scroll region (DECSTBM)✓ yes
Total line count✓ yesContent written to scrollback

Text

FeatureSupportNotes
Backspace (BS)✓ yes
Basic text rendering✓ yes
CBT backward tab (CSI Z)✗ nocursor at col 1, expected 17
CHT forward tab (CSI I)✗ nocursor at col 80, expected 17
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)✗ noTab 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)✗ nowidth=1, expected 2
Emoji ZWJ sequences (2 cols)✗ nowidth=11, expected 2
Text wraps at width✓ yes

Unicode

FeatureSupportNotes
East Asian Ambiguous Width✓ yeswidth=1 (ambiguous chars vary by terminal/locale)
Grapheme Cluster Cursor Movement✗ nowidth=8, expected 2
Tab Stops (HT)✓ yes
Wide Char at Line Wrap✓ yes