kitty
Tested Software version 0.46.2 on Linux. The homepage URL of this terminal is https://sw.kovidgoyal.net/kitty/. Full results available at ucs-detect repository path data/kitty.yaml.
Score Breakdown
Detailed breakdown of how scores are calculated for kitty:
# |
Score Type |
Raw Score |
Final Scaled Score |
|---|---|---|---|
1 |
100.00% |
100.0% |
|
2 |
100.00% |
100.0% |
|
3 |
100.00% |
100.0% |
|
4 |
100.00% |
100.0% |
|
5 |
100.00% |
100.0% |
|
6 |
100.00% |
(excluded) |
|
7 |
100.00% |
100.0% |
|
8 |
100.00% |
100.0% |
|
9 |
100.00% |
100.0% |
|
10 |
93.75% |
100.0% |
|
11 |
100% |
100.0% |
|
12 |
15.2% |
15.2% |
Score Comparison Plot:
The following plot shows how this terminal’s scores compare to all other terminals tested.
Scaled scores comparison across all metrics (normalized 0-100%)
Final Scaled Score Calculation:
Raw Final Score: 94.97% (weighted average: WIDE + NARROW + ZWJ + LANG + VS16 + 0.33 * SRI + 0.33 * SFZ + RI + CAP + 0.5 * GFX + 0.5 * RSC) the categorized ‘average’ absolute support level of this terminal.
Note
RSC (Resources) is a composite CPU, memory, and runtime score. RSC is weighted at 0.5 (half as powerful as other metrics). FEAT (Features) is the fraction of notable features supported. GFX (Graphics) scores 100% for modern protocols (iTerm2, Kitty), 50% for legacy only (Sixel, ReGIS), 0% for none.
Final Scaled Score: 100.0% (normalized across all terminals tested). Final Scaled scores are normalized (0-100%) relative to all terminals tested
WIDE Score Details:
Wide character support calculation:
Total successful codepoints: 501
Total codepoints tested: 506
Formula: 501 / 506
Result: 100.00%
NARROW Score Details:
Narrow character support calculation:
Total successful codepoints: 162
Total codepoints tested: 187
Formula: 162 / 187
Result: 100.00%
ZWJ Score Details:
Emoji ZWJ (Zero-Width Joiner) support calculation:
Total successful sequences: 1445
Total sequences tested: 1445
Formula: 1445 / 1445
Result: 100.00%
VS16 Score Details:
Variation Selector-16 support calculation:
Errors: 9 of 426 codepoints tested
Success rate: 97.9%
Formula: 97.9 / 100
Result: 100.00%
VS15 Score Details (excluded from final score):
Variation Selector-15 support calculation:
Errors: 0 of 158 codepoints tested
Success rate: 100.0%
Formula: 100.0 / 100
Result: 100.00%
SRI Score Details:
Standalone Regional Indicator support calculation:
Total successful codepoints: 26
Total codepoints tested: 26
Formula: 26 / 26
Result: 100.00%
SFZ Score Details:
Standalone Fitzpatrick skin tone modifier support calculation:
Total successful codepoints: 0
Total codepoints tested: 5
Formula: 0 / 5
Result: 100.00%
RI Score Details:
Regional Indicator flag sequence support calculation:
Total successful sequences: 262
Total sequences tested: 262
Formula: 262 / 262
Result: 100.00%
Features Score Details:
Notable terminal features (15.0 / 16):
Kitty Keyboard: yes
XTGETTCAP (Full): yes
Text Sizing (OSC 66): yes
OSC 52 Clipboard: yes
Truecolor Detection: yes
Raw score: 93.75%
Graphics Score Details:
Graphics protocol support (100%):
Sixel: no
ReGIS: no
iTerm2: no
Kitty: yes
Scoring: 100% for modern (iTerm2/Kitty), 50% for legacy only (Sixel/ReGIS), 0% for none
Resource Score Details:
Duration: 73.2s
Mean CPU: 115.5%
Mean RSS: 704.4 MB
Resources Score: 15/100
Note: log-scale composite cost = log(CPU+1) + log(RSS+1) + log(time+1)
Scaled result: 15.2%
LANG Score Details (Geometric Mean):
Geometric mean calculation:
Formula: (p₁ × p₂ × … × pₙ)^(1/n) where n = 85 languages
About geometric mean
Result: 100.00%
Wide character support
Wide character support of kitty is 99.0% (5 errors of 506 codepoints tested).
Sequence of a WIDE character, from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\U0001f3fd’ |
Sk |
2 |
EMOJI MODIFIER FITZPATRICK TYPE-4 |
Total codepoints: 1
Shell test using printf(1),
'|'should align in output:$ printf "\xf0\x9f\x8f\xbd|\\n12|\\n" 🏽| 12|
See Line 42653 of ucs_wide.txt for this sequence in the example file.
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 0.
Narrow character support
Narrow character support of kitty is 86.6% (25 errors of 187 codepoints tested).
Sequence of a NARROW character, from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u261d’ |
So |
1 |
WHITE UP POINTING INDEX |
Total codepoints: 1
Shell test using printf(1),
'|'should align in output:$ printf "\xe2\x98\x9d|\\n1|\\n" ☝| 1|
python wcwidth.wcswidth() measures width 1, while kitty measures width 2.
Emoji ZWJ support
Compatibility of kitty with the Unicode Emoji ZWJ sequence table is 100.0% (0 errors of 1445 sequences tested).
Variation Selector-16 support
Emoji VS-16 results for kitty is 9 errors out of 426 total codepoints tested, 97.9% success. Sequence of a NARROW Emoji made WIDE by Variation Selector-16, from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\U0001f3cb’ |
So |
1 |
WEIGHT LIFTER |
Total codepoints: 1
Shell test using printf(1),
'|'should align in output:$ printf "\xf0\x9f\x8f\x8b|\\n1|\\n" 🏋| 1|
Screenshot:
python wcwidth.wcswidth() measures width 1, while kitty measures width 2.
Variation Selector-15 support
Emoji VS-15 results for kitty is 0 errors out of 158 total codepoints tested, 100.0% success. All codepoint combinations with Variation Selector-15 tested were successful.
Standalone Regional Indicator support
Standalone Regional Indicator support of kitty is 100.0% (0 errors of 26 codepoints tested).
Standalone Fitzpatrick modifier support
Standalone Fitzpatrick skin tone modifier support of kitty is 0.0% (5 errors of 5 codepoints tested).
Sequence of a standalone Fitzpatrick modifier, from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\U0001f3fd’ |
Sk |
2 |
EMOJI MODIFIER FITZPATRICK TYPE-4 |
Total codepoints: 1
Shell test using printf(1),
'|'should align in output:$ printf "\xf0\x9f\x8f\xbd|\\n12|\\n" 🏽| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 0.
Regional Indicator flag sequence support
Regional Indicator flag sequence support of kitty is 100.0% (0 errors of 262 sequences tested).
Graphics Protocol Support
kitty supports the following graphics protocols: Kitty graphics.
Detection Methods:
Sixel and ReGIS: Detected via the Device Attributes (DA1) query
CSI c(\x1b[c). Extension code4indicates Sixel support,3ReGIS.Kitty graphics: Detected by sending a Kitty graphics query and checking for an
OKresponse.iTerm2 inline images: Detected via the iTerm2 capabilities query
OSC 1337 ; Capabilities.
Language Support
The following 57 languages were tested with 100% success:
Aja, Amarakaeri, Arabic, Standard, Assyrian Neo-Aramaic, Baatonum, Bamun, Belanda Viri, Bora, Catalan (2), Chickasaw, Chinantec, Chiltepec, Dagaare, Southern, Dari, Dendi, Dinka, Northeastern, Dzongkha, Evenki, Farsi, Western, Fon, French (Welche), Fur, Ga, Gen, Gilyak, Gumuz, Kabyle, Lamnso’, Lingala (tones), Maldivian, Maori (2), Mazahua Central, Mòoré, Nanai, Navajo, Orok, Otomi, Mezquital, Panjabi, Western, Pashto, Northern, Picard, Pular (Adlam), Secoya, Seraiki, Shipibo-Conibo, Siona, South Azerbaijani, Tagalog (Tagalog), Tai Dam, Tamazight, Central Atlas, Tem, Tibetan, Central, Ticuna, Uduk, Urdu (2), Vietnamese, Yaneshaʼ, Yiddish, Eastern, Yoruba.
The following 28 languages are not fully supported:
lang |
n_errors |
n_total |
pct_success |
|---|---|---|---|
146 |
155 |
5.8% |
|
10 |
11 |
9.1% |
|
345 |
382 |
9.7% |
|
299 |
335 |
10.7% |
|
197 |
237 |
16.9% |
|
85 |
103 |
17.5% |
|
18 |
22 |
18.2% |
|
134 |
164 |
18.3% |
|
58 |
71 |
18.3% |
|
106 |
132 |
19.7% |
|
216 |
290 |
25.5% |
|
362 |
488 |
25.8% |
|
186 |
252 |
26.2% |
|
287 |
390 |
26.4% |
|
46 |
66 |
30.3% |
|
231 |
335 |
31.0% |
|
242 |
354 |
31.6% |
|
157 |
236 |
33.5% |
|
101 |
198 |
49.0% |
|
103 |
236 |
56.4% |
|
89 |
223 |
60.1% |
|
84 |
225 |
62.7% |
|
68 |
208 |
67.3% |
|
11 |
106 |
89.6% |
|
1 |
14 |
92.9% |
|
14 |
206 |
93.2% |
|
10 |
227 |
95.6% |
|
1 |
23 |
95.7% |
Sanskrit
Sequence of language Sanskrit from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0915’ |
Lo |
1 |
DEVANAGARI LETTER KA |
|
2 |
‘\u094d’ |
Mn |
0 |
DEVANAGARI SIGN VIRAMA |
|
3 |
‘\u0915’ |
Lo |
1 |
DEVANAGARI LETTER KA |
|
4 |
‘\u093e’ |
Mc |
0 |
DEVANAGARI VOWEL SIGN AA |
Total codepoints: 4
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\x95\xe0\xa4\xbe|\\n12|\\n" क्का| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Tamang, Eastern
Sequence of language Tamang, Eastern from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0915’ |
Lo |
1 |
DEVANAGARI LETTER KA |
|
2 |
‘\u094d’ |
Mn |
0 |
DEVANAGARI SIGN VIRAMA |
|
3 |
‘\u0915’ |
Lo |
1 |
DEVANAGARI LETTER KA |
|
4 |
‘\u094b’ |
Mc |
0 |
DEVANAGARI VOWEL SIGN O |
Total codepoints: 4
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\x95\xe0\xa5\x8b|\\n12|\\n" क्को| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Malayalam
Sequence of language Malayalam from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0d05’ |
Lo |
1 |
MALAYALAM LETTER A |
|
2 |
‘\u0d02’ |
Mc |
0 |
MALAYALAM SIGN ANUSVARA |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xb4\x85\xe0\xb4\x82|\\n12|\\n" അം| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Bengali
Sequence of language Bengali from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0985’ |
Lo |
1 |
BENGALI LETTER A |
|
2 |
‘\u0982’ |
Mc |
0 |
BENGALI SIGN ANUSVARA |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xa6\x85\xe0\xa6\x82|\\n12|\\n" অং| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Sanskrit (Grantha)
Sequence of language Sanskrit (Grantha) from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\U00011305’ |
Lo |
1 |
GRANTHA LETTER A |
|
2 |
‘\U00011302’ |
Mc |
0 |
GRANTHA SIGN ANUSVARA |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xf0\x91\x8c\x85\xf0\x91\x8c\x82|\\n12|\\n" 𑌅𑌂| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Marathi
Sequence of language Marathi from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0915’ |
Lo |
1 |
DEVANAGARI LETTER KA |
|
2 |
‘\u094d’ |
Mn |
0 |
DEVANAGARI SIGN VIRAMA |
|
3 |
‘\u0915’ |
Lo |
1 |
DEVANAGARI LETTER KA |
|
4 |
‘\u093e’ |
Mc |
0 |
DEVANAGARI VOWEL SIGN AA |
|
5 |
‘\u0902’ |
Mn |
0 |
DEVANAGARI SIGN ANUSVARA |
Total codepoints: 5
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\x95\xe0\xa4\xbe\xe0\xa4\x82|\\n12|\\n" क्कां| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Magahi
Sequence of language Magahi from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0915’ |
Lo |
1 |
DEVANAGARI LETTER KA |
|
2 |
‘\u094d’ |
Mn |
0 |
DEVANAGARI SIGN VIRAMA |
|
3 |
‘\u0930’ |
Lo |
1 |
DEVANAGARI LETTER RA |
|
4 |
‘\u0942’ |
Mn |
0 |
DEVANAGARI VOWEL SIGN UU |
Total codepoints: 4
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa5\x82|\\n12|\\n" क्रू| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Hindi
Sequence of language Hindi from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0915’ |
Lo |
1 |
DEVANAGARI LETTER KA |
|
2 |
‘\u093e’ |
Mc |
0 |
DEVANAGARI VOWEL SIGN AA |
|
3 |
‘\u0902’ |
Mn |
0 |
DEVANAGARI SIGN ANUSVARA |
Total codepoints: 3
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xa4\x95\xe0\xa4\xbe\xe0\xa4\x82|\\n12|\\n" कां| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Nepali
Sequence of language Nepali from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0915’ |
Lo |
1 |
DEVANAGARI LETTER KA |
|
2 |
‘\u094d’ |
Mn |
0 |
DEVANAGARI SIGN VIRAMA |
|
3 |
‘\u091b’ |
Lo |
1 |
DEVANAGARI LETTER CHA |
Total codepoints: 3
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\x9b|\\n12|\\n" क्छ| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Tamil
Sequence of language Tamil from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0b95’ |
Lo |
1 |
TAMIL LETTER KA |
|
2 |
‘\u0bbe’ |
Mc |
0 |
TAMIL VOWEL SIGN AA |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xae\x95\xe0\xae\xbe|\\n12|\\n" கா| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Gujarati
Sequence of language Gujarati from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0a95’ |
Lo |
1 |
GUJARATI LETTER KA |
|
2 |
‘\u0a83’ |
Mc |
0 |
GUJARATI SIGN VISARGA |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xaa\x95\xe0\xaa\x83|\\n12|\\n" કઃ| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Javanese (Javanese)
Sequence of language Javanese (Javanese) from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\ua98f’ |
Lo |
1 |
JAVANESE LETTER KA |
|
2 |
‘\ua983’ |
Mc |
0 |
JAVANESE SIGN WIGNYAN |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xea\xa6\x8f\xea\xa6\x83|\\n12|\\n" ꦏꦃ| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Bhojpuri
Sequence of language Bhojpuri from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0915’ |
Lo |
1 |
DEVANAGARI LETTER KA |
|
2 |
‘\u093e’ |
Mc |
0 |
DEVANAGARI VOWEL SIGN AA |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xa4\x95\xe0\xa4\xbe|\\n12|\\n" का| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Khmer, Central
Sequence of language Khmer, Central from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u1780’ |
Lo |
1 |
KHMER LETTER KA |
|
2 |
‘\u17b6’ |
Mc |
0 |
KHMER VOWEL SIGN AA |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe1\x9e\x80\xe1\x9e\xb6|\\n12|\\n" កា| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Maithili
Sequence of language Maithili from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0915’ |
Lo |
1 |
DEVANAGARI LETTER KA |
|
2 |
‘\u093f’ |
Mc |
0 |
DEVANAGARI VOWEL SIGN I |
|
3 |
‘\u0902’ |
Mn |
0 |
DEVANAGARI SIGN ANUSVARA |
Total codepoints: 3
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xa4\x95\xe0\xa4\xbf\xe0\xa4\x82|\\n12|\\n" किं| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Telugu
Sequence of language Telugu from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0c05’ |
Lo |
1 |
TELUGU LETTER A |
|
2 |
‘\u0c02’ |
Mc |
0 |
TELUGU SIGN ANUSVARA |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xb0\x85\xe0\xb0\x82|\\n12|\\n" అం| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Khün
Sequence of language Khün from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u1a20’ |
Lo |
1 |
TAI THAM LETTER HIGH KA |
|
2 |
‘\u1a60’ |
Mn |
0 |
TAI THAM SIGN SAKOT |
|
3 |
‘\u1a20’ |
Lo |
1 |
TAI THAM LETTER HIGH KA |
Total codepoints: 3
Shell test using printf(1),
'|'should align in output:$ printf "\xe1\xa8\xa0\xe1\xa9\xa0\xe1\xa8\xa0|\\n12|\\n" ᨠ᩠ᨠ| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Kannada
Sequence of language Kannada from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0c85’ |
Lo |
1 |
KANNADA LETTER A |
|
2 |
‘\u0c82’ |
Mc |
0 |
KANNADA SIGN ANUSVARA |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xb2\x85\xe0\xb2\x82|\\n12|\\n" ಅಂ| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Sinhala
Sequence of language Sinhala from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0d9a’ |
Lo |
1 |
SINHALA LETTER ALPAPRAANA KAYANNA |
|
2 |
‘\u0dcf’ |
Mc |
0 |
SINHALA VOWEL SIGN AELA-PILLA |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xb6\x9a\xe0\xb7\x8f|\\n12|\\n" කා| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Panjabi, Eastern
Sequence of language Panjabi, Eastern from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0a15’ |
Lo |
1 |
GURMUKHI LETTER KA |
|
2 |
‘\u0a3e’ |
Mc |
0 |
GURMUKHI VOWEL SIGN AA |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xa8\x95\xe0\xa8\xbe|\\n12|\\n" ਕਾ| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Burmese
Sequence of language Burmese from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u1000’ |
Lo |
1 |
MYANMAR LETTER KA |
|
2 |
‘\u1031’ |
Mc |
0 |
MYANMAR VOWEL SIGN E |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe1\x80\x80\xe1\x80\xb1|\\n12|\\n" ကေ| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Chakma
Sequence of language Chakma from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\U00011103’ |
Lo |
1 |
CHAKMA LETTER AA |
|
2 |
‘\U0001112c’ |
Mc |
0 |
CHAKMA VOWEL SIGN E |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xf0\x91\x84\x83\xf0\x91\x84\xac|\\n12|\\n" 𑄃𑄬| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Mon
Sequence of language Mon from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u1000’ |
Lo |
1 |
MYANMAR LETTER KA |
|
2 |
‘\u1031’ |
Mc |
0 |
MYANMAR VOWEL SIGN E |
|
3 |
‘\u102f’ |
Mn |
0 |
MYANMAR VOWEL SIGN U |
Total codepoints: 3
Shell test using printf(1),
'|'should align in output:$ printf "\xe1\x80\x80\xe1\x80\xb1\xe1\x80\xaf|\\n12|\\n" ကေု| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Shan
Sequence of language Shan from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u1004’ |
Lo |
1 |
MYANMAR LETTER NGA |
|
2 |
‘\u1084’ |
Mc |
0 |
MYANMAR VOWEL SIGN SHAN E |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe1\x80\x84\xe1\x82\x84|\\n12|\\n" ငႄ| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Thai (2)
Sequence of language Thai (2) from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0e22’ |
Lo |
1 |
THAI CHARACTER YO YAK |
|
2 |
‘\u0e48’ |
Mn |
0 |
THAI CHARACTER MAI EK |
|
3 |
‘\u0e33’ |
Lo |
1 |
THAI CHARACTER SARA AM |
Total codepoints: 3
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xb8\xa2\xe0\xb9\x88\xe0\xb8\xb3|\\n12|\\n" ย่ำ| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Thai
Sequence of language Thai from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0e01’ |
Lo |
1 |
THAI CHARACTER KO KAI |
|
2 |
‘\u0e33’ |
Lo |
1 |
THAI CHARACTER SARA AM |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xb8\x81\xe0\xb8\xb3|\\n12|\\n" กำ| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Lao
Sequence of language Lao from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0e81’ |
Lo |
1 |
LAO LETTER KO |
|
2 |
‘\u0eb3’ |
Lo |
1 |
LAO VOWEL SIGN AM |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xe0\xba\x81\xe0\xba\xb3|\\n12|\\n" ກຳ| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 1.
Urdu
Sequence of language Urdu from midpoint of alignment failure records:
# |
Codepoint |
Python |
Category |
wcwidth |
Name |
|---|---|---|---|---|---|
1 |
‘\u0601’ |
Cf |
1 |
ARABIC SIGN SANAH |
|
2 |
‘\u06f1’ |
Nd |
1 |
EXTENDED ARABIC-INDIC DIGIT ONE |
Total codepoints: 2
Shell test using printf(1),
'|'should align in output:$ printf "\xd8\x81\xdb\xb1|\\n12|\\n" ۱| 12|
Screenshot:
python wcwidth.wcswidth() measures width 2, while kitty measures width 0.
DEC Private Modes Support
DEC private modes results for kitty: 7 changeable modes of 7 supported out of 8 total modes tested (87.5% support, 87.5% changeable).
Complete list of DEC private modes tested:
Mode |
Name |
Description |
Supported |
Changeable |
Enabled |
|---|---|---|---|---|---|
1004 |
FOCUS_IN_OUT_EVENTS |
Send FocusIn/FocusOut events |
Yes |
Yes |
No |
1006 |
MOUSE_EXTENDED_SGR |
Enable SGR Mouse Mode |
Yes |
Yes |
No |
2004 |
BRACKETED_PASTE |
Set bracketed paste mode |
Yes |
Yes |
No |
2026 |
SYNCHRONIZED_OUTPUT |
Synchronized Output |
Yes |
Yes |
No |
2027 |
GRAPHEME_CLUSTERING |
Grapheme Clustering |
No |
No |
No |
2031 |
COLOR_PALETTE_UPDATES |
Color palette updates |
Yes |
Yes |
No |
2048 |
IN_BAND_WINDOW_RESIZE |
In-Band Window Resize Notifications |
Yes |
Yes |
No |
5522 |
BRACKETED_PASTE_MIME |
Bracketed Paste MIME |
Yes |
Yes |
No |
Summary: 7 changeable, 1 not changeable.
Kitty Keyboard Protocol
kitty supports the Kitty keyboard protocol.
# |
Flag |
Key |
State |
|---|---|---|---|
1 |
Disambiguate escape codes |
|
No |
2 |
Report event types |
|
No |
3 |
Report alternate keys |
|
No |
4 |
Report all keys as escape codes |
|
No |
5 |
Report associated text |
|
No |
Detection is performed by sending CSI ? u to query the current
progressive enhancement flags. A terminal that supports this protocol
responds with the active flags value.
XTGETTCAP (Terminfo Capabilities)
kitty supports the XTGETTCAP sequence and reports 220 terminfo capabilities (Full).
# |
Capability |
Description |
Value |
|---|---|---|---|
1 |
BD |
Enter bold mode (kitty) |
|
2 |
BE |
Exit bold mode (kitty) |
|
3 |
Cr |
Set cursor color |
|
4 |
Cs |
Reset cursor color |
|
5 |
Ms |
Clipboard set |
|
6 |
PE |
Presentation end (kitty) |
|
7 |
PS |
Presentation start (kitty) |
|
8 |
RV |
Enter reverse mode (kitty) |
|
9 |
Se |
Reset underline style |
|
10 |
Setulc |
Set underline color |
|
11 |
Smulx |
Styled underline |
|
12 |
Ss |
Set underline style |
|
13 |
Su |
Colored underlines |
(empty) |
14 |
Sync |
Synchronized output |
|
15 |
TN |
Terminal name |
|
16 |
Tc |
Truecolor (24-bit RGB) |
(empty) |
17 |
XF |
Extended functionality |
(empty) |
18 |
XR |
Enter reset mode (kitty) |
|
19 |
acsc |
Alternate character set |
|
20 |
am |
Auto right margin |
(empty) |
21 |
bel |
Bell |
|
22 |
blink |
Enter blink mode |
|
23 |
bold |
Enter bold mode |
|
24 |
bw |
Auto left margin |
(empty) |
25 |
ccc |
Can redefine colors |
(empty) |
26 |
civis |
Hide cursor |
|
27 |
clear |
Clear screen |
|
28 |
cnorm |
Normal cursor |
|
29 |
colors |
Max colors on screen |
|
30 |
cols |
Columns |
|
31 |
cr |
Carriage return |
|
32 |
csr |
Change scroll region |
|
33 |
cub |
Cursor left n |
|
34 |
cub1 |
Cursor left |
|
35 |
cud |
Cursor down n |
|
36 |
cud1 |
Cursor down |
|
37 |
cuf |
Cursor right n |
|
38 |
cuf1 |
Cursor right |
|
39 |
cup |
Cursor address |
|
40 |
cuu |
Cursor up n |
|
41 |
cuu1 |
Cursor up |
|
42 |
cvvis |
Very visible cursor |
|
43 |
dch |
Delete n characters |
|
44 |
dch1 |
Delete character |
|
45 |
dim |
Enter dim mode |
|
46 |
dl |
Delete n lines |
|
47 |
dl1 |
Delete line |
|
48 |
dsl |
Disable status line |
|
49 |
ech |
Erase characters |
|
50 |
ed |
Clear to end of screen |
|
51 |
el |
Clear to end of line |
|
52 |
el1 |
Clear to start of line |
|
53 |
fd |
Enter font mode (kitty) |
|
54 |
fe |
Exit font mode (kitty) |
|
55 |
flash |
Flash screen |
|
56 |
fsl |
From status line |
|
57 |
fullkbd |
Full Kitty keyboard protocol |
(empty) |
58 |
home |
Cursor home |
|
59 |
hpa |
Horizontal position |
|
60 |
hs |
Has status line |
(empty) |
61 |
ht |
Horizontal tab |
|
62 |
hts |
Set tab stop |
|
63 |
ich |
Insert n characters |
|
64 |
il |
Insert n lines |
|
65 |
il1 |
Insert line |
|
66 |
ind |
Scroll forward |
|
67 |
indn |
Scroll forward n |
|
68 |
initc |
Initialize color |
|
69 |
it |
Init tabs |
|
70 |
kDC |
Shifted delete-char key |
|
71 |
kDC3 |
Alt delete-char key |
|
72 |
kDC4 |
Alt-Shift delete-char key |
|
73 |
kDC5 |
Ctrl delete-char key |
|
74 |
kDC6 |
Ctrl-Shift delete-char key |
|
75 |
kDC7 |
Ctrl-Alt delete-char key |
|
76 |
kDN |
Shifted down-arrow key |
|
77 |
kDN3 |
Alt down-arrow key |
|
78 |
kDN4 |
Alt-Shift down-arrow key |
|
79 |
kDN5 |
Ctrl down-arrow key |
|
80 |
kDN6 |
Ctrl-Shift down-arrow key |
|
81 |
kDN7 |
Ctrl-Alt down-arrow key |
|
82 |
kEND |
Shifted end key |
|
83 |
kEND3 |
Alt end key |
|
84 |
kEND4 |
Alt-Shift end key |
|
85 |
kEND5 |
Ctrl end key |
|
86 |
kEND6 |
Ctrl-Shift end key |
|
87 |
kEND7 |
Ctrl-Alt end key |
|
88 |
kHOM |
Shifted home key |
|
89 |
kHOM3 |
Alt home key |
|
90 |
kHOM4 |
Alt-Shift home key |
|
91 |
kHOM5 |
Ctrl home key |
|
92 |
kHOM6 |
Ctrl-Shift home key |
|
93 |
kHOM7 |
Ctrl-Alt home key |
|
94 |
kIC |
Shifted insert-char key |
|
95 |
kIC3 |
Alt insert-char key |
|
96 |
kIC4 |
Alt-Shift insert-char key |
|
97 |
kIC5 |
Ctrl insert-char key |
|
98 |
kIC6 |
Ctrl-Shift insert-char key |
|
99 |
kIC7 |
Ctrl-Alt insert-char key |
|
100 |
kLFT |
Shifted left-arrow key |
|
101 |
kLFT3 |
Alt left-arrow key |
|
102 |
kLFT4 |
Alt-Shift left-arrow key |
|
103 |
kLFT5 |
Ctrl left-arrow key |
|
104 |
kLFT6 |
Ctrl-Shift left-arrow key |
|
105 |
kLFT7 |
Ctrl-Alt left-arrow key |
|
106 |
kNXT |
Shifted next-page key |
|
107 |
kNXT3 |
Alt next-page key |
|
108 |
kNXT4 |
Alt-Shift next-page key |
|
109 |
kNXT5 |
Ctrl next-page key |
|
110 |
kNXT6 |
Ctrl-Shift next-page key |
|
111 |
kNXT7 |
Ctrl-Alt next-page key |
|
112 |
kPRV |
Shifted previous-page key |
|
113 |
kPRV3 |
Alt previous-page key |
|
114 |
kPRV4 |
Alt-Shift previous-page key |
|
115 |
kPRV5 |
Ctrl previous-page key |
|
116 |
kPRV6 |
Ctrl-Shift previous-page key |
|
117 |
kPRV7 |
Ctrl-Alt previous-page key |
|
118 |
kRIT |
Shifted right-arrow key |
|
119 |
kRIT3 |
Alt right-arrow key |
|
120 |
kRIT4 |
Alt-Shift right-arrow key |
|
121 |
kRIT5 |
Ctrl right-arrow key |
|
122 |
kRIT6 |
Ctrl-Shift right-arrow key |
|
123 |
kRIT7 |
Ctrl-Alt right-arrow key |
|
124 |
kUP |
Shifted up-arrow key |
|
125 |
kUP3 |
Alt up-arrow key |
|
126 |
kUP4 |
Alt-Shift up-arrow key |
|
127 |
kUP5 |
Ctrl up-arrow key |
|
128 |
kUP6 |
Ctrl-Shift up-arrow key |
|
129 |
kUP7 |
Ctrl-Alt up-arrow key |
|
130 |
kbs |
Backspace key |
|
131 |
kcbt |
Back-tab key |
|
132 |
kcub1 |
Left arrow key |
|
133 |
kcud1 |
Down arrow key |
|
134 |
kcuf1 |
Right arrow key |
|
135 |
kcuu1 |
Up arrow key |
|
136 |
kdch1 |
Delete character key |
|
137 |
kend |
End key |
|
138 |
kf1 |
Function key F1 |
|
139 |
kf10 |
Function key F10 |
|
140 |
kf11 |
Function key F11 |
|
141 |
kf12 |
Function key F12 |
|
142 |
kf2 |
Function key F2 |
|
143 |
kf3 |
Function key F3 |
|
144 |
kf4 |
Function key F4 |
|
145 |
kf5 |
Function key F5 |
|
146 |
kf6 |
Function key F6 |
|
147 |
kf7 |
Function key F7 |
|
148 |
kf8 |
Function key F8 |
|
149 |
kf9 |
Function key F9 |
|
150 |
khome |
Home key |
|
151 |
kich1 |
Insert character key |
|
152 |
kind |
Scroll-down key |
|
153 |
kitty-query-allow_hyperlinks |
hyperlink support |
|
154 |
kitty-query-background |
background color |
|
155 |
kitty-query-background_opacity |
background opacity |
|
156 |
kitty-query-bold_font |
bold font |
|
157 |
kitty-query-bold_italic_font |
bold-italic font |
|
158 |
kitty-query-clipboard_control |
clipboard control |
|
159 |
kitty-query-dpi_x |
DPI X |
|
160 |
kitty-query-dpi_y |
DPI Y |
|
161 |
kitty-query-font_family |
font family |
|
162 |
kitty-query-font_size |
font size |
|
163 |
kitty-query-foreground |
foreground color |
|
164 |
kitty-query-italic_font |
italic font |
|
165 |
kitty-query-name |
terminal name |
|
166 |
kitty-query-os_name |
OS name |
|
167 |
kitty-query-version |
version |
|
168 |
km |
Has meta key |
(empty) |
169 |
kmous |
Mouse key |
|
170 |
knp |
Next page key |
|
171 |
kpp |
Previous page key |
|
172 |
kri |
Scroll-up key |
|
173 |
kxIN |
Keyboard in (kitty) |
|
174 |
kxOUT |
Keyboard out (kitty) |
|
175 |
lines |
Lines |
|
176 |
mc5i |
Will not echo input |
(empty) |
177 |
mir |
Move in insert mode |
(empty) |
178 |
msgr |
Move in standout mode |
(empty) |
179 |
npc |
No pad character |
(empty) |
180 |
oc |
Original colors |
|
181 |
op |
Original pair |
|
182 |
pairs |
Max color pairs |
|
183 |
query-os-name |
OS name query |
|
184 |
rc |
Restore cursor |
|
185 |
rep |
Repeat character |
|
186 |
rev |
Enter reverse mode |
|
187 |
ri |
Reverse index |
|
188 |
rin |
Scroll reverse n |
|
189 |
ritm |
Exit italics mode |
|
190 |
rmacs |
Exit alternate charset mode |
|
191 |
rmam |
Disable line wrap |
|
192 |
rmcup |
Exit alt screen |
|
193 |
rmir |
Exit insert mode |
|
194 |
rmkx |
Keypad local mode |
|
195 |
rmso |
Exit standout mode |
|
196 |
rmul |
Exit underline mode |
|
197 |
rs1 |
Reset string 1 |
|
198 |
sc |
Save cursor |
|
199 |
setab |
Set background color |
|
200 |
setaf |
Set foreground color |
|
201 |
setrgbb |
Set RGB background |
|
202 |
setrgbf |
Set RGB foreground |
|
203 |
sgr |
Set attributes |
|
204 |
sgr0 |
Reset attributes |
|
205 |
sitm |
Enter italics mode |
|
206 |
smacs |
Enter alternate charset mode |
|
207 |
smam |
Enable line wrap |
|
208 |
smcup |
Enter alt screen |
|
209 |
smir |
Enter insert mode |
|
210 |
smkx |
Keypad transmit mode |
|
211 |
smso |
Enter standout mode |
|
212 |
smul |
Enter underline mode |
|
213 |
tbc |
Clear all tabs |
|
214 |
tsl |
To status line |
|
215 |
u6 |
CPR response format |
|
216 |
u7 |
CPR request |
|
217 |
u8 |
DA response format |
|
218 |
u9 |
DA request |
|
219 |
vpa |
Vertical position |
|
220 |
xenl |
Newline glitch |
(empty) |
The XTGETTCAP sequence (DCS + q Pt ST) allows applications to query
terminfo capabilities directly from the terminal emulator, rather than relying
on the system terminfo database.
Text Sizing Protocol (OSC 66)
kitty supports the Text Sizing protocol: explicit width (w), scale (s).
The Text Sizing protocol (OSC 66) allows terminal programs to display text
at different sizes and to explicitly specify the cell width of characters.
Detection is performed by measuring cursor movement after sending
ESC ] 66 ; w=2 ; <space> BEL and ESC ] 66 ; s=2 ; <space> BEL.
Because this terminal supports the Text Sizing protocol, any application can programmatically set the displayed cell width of any character. This means that width errors for complex languages, emoji, variation selectors (VS15, VS16), standalone regional indicators and Fitzpatrick modifiers, and other problematic codepoints can be fully remediated at the application level. For this reason, kitty scores 100% on the WIDE, LANG, ZWJ, VS16, VS15, SRI, SFZ, and RI width tests.
Truecolor Support
kitty supports 24-bit truecolor, detectable via:
XTGETTCAP (RGB capability): no
DECRQSS (truecolor probe): yes (probe)
COLORTERM: yes (truecolor)
OSC 52 Clipboard Support
kitty supports OSC 52 clipboard operations (detected via XTGETTCAP Ms).
DA1 extension 52: no
XTGETTCAP Ms: yes
Terminal Identification
kitty is identified as kitty version 0.46.2 (detected via XTVERSION + XTGETTCAP TN).
XTVERSION (raw): kitty(0.47.1)
XTVERSION: yes
XTGETTCAP TN: yes (xterm-kitty)
ENQ: no
TERM_PROGRAM: no
TERM: yes (xterm-kitty)
Reproduction
To reproduce these results for kitty, install and run ucs-detect with the following commands:
uvx ucs-detect --rerun data/kitty.yaml
Test Performance
The test suite completed in 73.15 seconds (73s).
Mean CPU: 115.5%
Mean RSS: 704.4 MB
Total time: 73.2s
CPU usage during test execution for kitty.
RSS memory usage during test execution for kitty.
Test duration for kitty compared to all other terminals.
CPU % vs duration trade-off for kitty.