Appearance
Kitty
App Terminal + Parser Backend
GPU-accelerated terminal by Kovid Goyal. Pioneer of the Kitty keyboard and graphics protocols. Written in C/Python.
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: GPU-accelerated terminal by Kovid Goyal. Pioneer of the Kitty keyboard and graphics protocols. Written in C/Python. · v0.46.2
89%
132 passed · 16 failed of 148 features
Tested: March 26, 2026
Analysis2026-03-26
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 |
|---|---|---|
| CUD stops at bottom | ✓ yes | |
| CUP at screen boundaries | ✓ yes | |
| CUP with DECOM | ✗ no | got 1;1, expected 5;1 |
| CUU stops at top | ✓ yes | |
| Hide cursor (DECTCEM) | ✓ yes | |
| Cursor horizontal absolute (CHA) | ✓ 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) | ✓ yes | Headless mode has no output stream for DSR responses |
| Reverse Wrap (Mode 45) | ✓ yes | |
| Save/restore cursor (DECSC) | ✓ yes | |
| Cursor shape (DECSCUSR) | ✓ yes |
Device Status
| Feature | Support | Notes |
|---|---|---|
| Mode Report (DECRPM) | ✗ no | Headless mode has no output stream for DECRPM responses |
| Request Setting (DECRQSS) | ✗ no | Headless mode has no output stream for DECRQSS responses |
| Primary device attributes (DA1) | ✓ yes | Headless mode has no output stream for DA1 responses |
| Secondary Device Attributes (DA2) | ✓ yes | Headless mode has no output stream for DA2 responses |
| Device status report (DSR 5) | ✓ yes | Headless mode has no output stream for DSR responses |
| Feature Reporting (TERM_FEATURES) | ✗ no | |
| Tertiary Device Attributes (DA3) | ✗ no | Headless mode has no output stream for DA3 responses |
| Query Terminfo (XTGETTCAP) | ✗ no | Headless mode has no output stream for XTGETTCAP responses |
| Terminal Version (XTVERSION) | ✗ no | Headless mode has no output stream for XTVERSION responses |
Editing
| Feature | Support | Notes |
|---|---|---|
| Delete characters (DCH) | ✓ yes | |
| Delete lines (DL) | ✓ yes | |
| Insert characters (ICH) | ✓ yes | |
| Insert lines (IL) | ✓ yes | |
| Repeat character (REP) | ✓ yes |
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 |
|---|---|---|
| iTerm2 Inline Images (OSC 1337) | ✓ yes | |
| Kitty graphics protocol | ✗ no | No kitty graphics acknowledgment |
| Kitty keyboard protocol | ✗ no | No kitty keyboard response |
| Desktop Notifications (OSC 9/777) | ✓ yes | OSC 9 notifications not exposed via Python batch bridge |
| VS Code Shell Integration (OSC 633) | ✓ yes | |
| Icon and title (OSC 0) | ✓ yes | |
| Foreground color query (OSC 10) | ✓ yes | OSC 10 color query not exposed via Python batch bridge |
| Background color query (OSC 11) | ✓ yes | OSC 11 color query not exposed via Python batch bridge |
| 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 |
| Window title (OSC 2) | ✓ yes | |
| Clipboard access (OSC 52) | ✓ yes | OSC 52 clipboard not exposed via Python batch bridge |
| OSC 5522 advanced clipboard | ? unknown | OSC 5522 not exposed via Python batch bridge |
| OSC 66 text sizing | ? unknown | OSC 66 not exposed via Python batch bridge — kitty supports it natively |
| Current directory (OSC 7) | ✓ yes | OSC 7 CWD reporting not exposed via Python batch bridge |
| Hyperlinks (OSC 8) | ✓ yes | |
| OSC 9;4 progress bar | ? unknown | |
| Text reflow on resize | ✓ yes | |
| Semantic prompts (OSC 133) | ✓ yes | |
| Sixel graphics | ✓ yes | 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 |
| 24-bit truecolor | ✓ yes |
Input Protocols
| Feature | Support | Notes |
|---|---|---|
| Button-Event Mouse (1002) | ✓ yes | Button-event mouse tracking not exposed via headless API |
| CSI u Key Encoding | ✓ yes | |
| modifyOtherKeys | ✓ yes | modifyOtherKeys not exposed via Python batch bridge |
| modifyOtherKeys mode 3 | ? unknown | modifyOtherKeys mode 3 not exposed via Python batch bridge |
| Pixel Mouse Reporting (1016) | ✓ yes | SGR pixel mouse mode not exposed via Python batch bridge |
| urxvt Mouse Reporting (1015) | ✓ yes | urxvt mouse mode (?1015) not implemented in kitty |
| X10 Mouse Tracking (9) | ✓ yes | X10 mouse mode (?9) not implemented in kitty |
Modes
| Feature | Support | Notes |
|---|---|---|
| Enter alt screen (DECSET 1049) | ✓ yes | Behavioral: entered and responded |
| Exit alt screen (DECRST 1049) | ✓ yes | |
| App cursor keys (DECCKM) | ✓ yes | Behavioral: responsive after enable |
| Application keypad (DECKPAM) | ✓ yes | Not exposed via Python batch bridge |
| Auto-wrap (DECAWM) | ✓ yes | Behavioral: wrap confirmed |
| Bracketed paste (DECSET 2004) | ✓ yes | Behavioral: terminal responsive after enable |
| Mode 2031 color scheme reporting | ? unknown | Mode 2031 not exposed via Python batch bridge |
| Focus tracking (DECSET 1004) | ✓ yes | Behavioral: responsive after enable |
| Insert/replace mode (IRM) | ✓ yes | Not exposed via Python batch bridge |
| Left/Right Margins (DECLRMM, Mode 69) | ✓ yes | DECLRMM not exposed via Python batch bridge |
| All motion mouse (DECSET 1003) | ✓ yes | All-motion mouse tracking not exposed via Python batch bridge |
| SGR mouse mode (DECSET 1006) | ✓ yes | SGR mouse encoding not exposed via Python batch bridge |
| Mouse tracking (DECSET 1000) | ✓ yes | Not exposed via Python batch bridge |
| Origin mode (DECOM) | ✗ no | Not exposed via Python batch bridge |
| Reverse video (DECSCNM) | ✓ yes | Not exposed via Python batch bridge |
| Synchronized output (DECSET 2026) | ✓ yes | Behavioral: responsive after enable |
Reset
| Feature | Support | Notes |
|---|---|---|
| Backend reset() method | ✓ yes | cursor at 5;5 after DECSTR |
| Full reset (RIS) | ✓ yes | |
| SGR reset clears attributes | ✓ yes | |
| Soft reset (DECSTR) | ✓ yes | 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 | Content written to scrollback |
SGR (Text Styling)
| Feature | Support | Notes |
|---|---|---|
| 256-color bg (SGR 48;5) | ✓ yes | |
| Bright bg colors (SGR 100-107) | ✓ yes | |
| Default bg color (SGR 49) | ✓ yes | |
| Standard bg colors (SGR 40-47) | ✓ yes | |
| 24-bit bg (SGR 48;2) | ✓ yes | |
| Blink (SGR 5) | ✓ yes | |
| Bold (SGR 1) | ✓ yes | |
| Faint/dim (SGR 2) | ✓ yes | |
| 256-color fg (SGR 38;5) | ✓ yes | |
| Bright fg colors (SGR 90-97) | ✓ yes | |
| Default fg color (SGR 39) | ✓ yes | |
| Standard fg colors (SGR 30-37) | ✓ yes | |
| 24-bit fg (SGR 38;2) | ✓ yes | |
| Hidden/invisible (SGR 8) | ✓ yes | Not exposed via Python batch bridge |
| Inverse video (SGR 7) | ✓ yes | |
| Italic (SGR 3) | ✓ yes | |
| Overline (SGR 53) | ✓ yes | |
| Reset all (SGR 0) | ✓ yes | |
| Reset bold/dim (SGR 22) | ✓ yes | |
| Reset inverse (SGR 27) | ✓ yes | |
| Reset italic (SGR 23) | ✓ yes | |
| Reset underline (SGR 24) | ✓ yes | |
| Strikethrough (SGR 9) | ✓ yes | |
| Underline color (SGR 58) | ✓ yes | Not exposed via Python batch bridge |
| Curly underline (SGR 4:3) | ✓ yes | |
| Dashed underline (SGR 4:5) | ✓ yes | |
| Dotted underline (SGR 4:4) | ✓ yes | |
| Double underline (SGR 21) | ✓ yes | |
| Underline (SGR 4) | ✓ yes |
Text
| Feature | Support | Notes |
|---|---|---|
| Backspace (BS) | ✓ yes | |
| Basic text rendering | ✓ yes | |
| Combining characters (0 cols) | ✓ yes | |
| Carriage return | ✓ yes | |
| Index (IND) | ✓ yes | |
| Line feed | ✓ yes | |
| Next line (NEL) | ✓ yes | |
| Overwrite at cursor | ✓ yes | |
| Reverse Index at Scroll Top | ✓ yes | |
| Tab stops | ✓ yes | |
| CJK wide chars (2 cols) | ✓ yes | |
| Emoji wide chars (2 cols) | ✓ yes | |
| Regional indicator flags (2 cols) | ✓ yes | |
| Variation selector 16 (emoji presentation) | ✗ no | width=1, expected 2 |
| Emoji ZWJ sequences (2 cols) | ✗ no | width=11, expected 2 |
| Text wraps at width | ✓ yes |
Unicode
| Feature | Support | Notes |
|---|---|---|
| East Asian Ambiguous Width | ✓ yes | width=1 (ambiguous chars vary by terminal/locale) |
| Grapheme Cluster Cursor Movement | ✗ no | width=8, expected 2 |
| Tab Stops (HT) | ✓ yes | |
| Wide Char at Line Wrap | ✓ yes |