Can your terminal do emojis? How big?
Technical causes of emoji/rendering bugs
- Core issue: mismatch between Unicode concepts (codepoints, grapheme clusters) and what terminals actually lay out (fixed-width “cells”).
- Many emoji are sequences (ZWJ, variation selectors, skin tones, families) that form one visual glyph but multiple codepoints. Terminals often just run
wcwidthper codepoint and guess. wcwidthonly returns 0/1/2 per codepoint;wcswidthis limited and bad at partial errors. Fonts and shaping engines can turn sequences into 1+ glyphs of varying width, independent of East Asian width metadata.- Fonts themselves are inconsistent: some “narrow” characters (e.g., playing cards, alembic + variation selectors) are drawn 1.5–2 cells wide; emoji width may change with font choice.
- Correct behavior requires grapheme-aware rendering plus cooperation with the font/shaping engine; most terminals and TUI libraries don’t do this, leading to cursor desync, broken readline/editing, and weird wrap/backspace behavior.
Escape sequences, standards, and terminal differences
- Double-height/double-width text is old DEC VT100-era tech (DECDHL/DECDWL). Some modern terminals implement it; others ignore it or scale bitmaps crudely.
- Kitty introduces a custom “modern” scaling protocol (arbitrary scale factors, better feature detection). Some see this as useful; others view it as needless reinvention versus widely implemented DEC codes.
- ECMA-48 explicitly allows ignoring unknown escape sequences, so behavior diverges widely. Feature detection is hard, and multiple proprietary image/size protocols worsen fragmentation.
Use cases vs. drawbacks of emoji in CLIs
- Pro-emoji: good as high-salience status markers (ticks/crosses, traffic-light icons, git-status in prompts), more legible than plain words from a distance, survive piping/logging better than ANSI colors.
- Anti-emoji: terminals are often broken for emoji width; they clutter logs, break greppability, and frequently render incorrectly. Many prefer colors or ASCII art only. Suggested compromise: optional “fancy” mode or env flag.
Aesthetics, accessibility, and visual hierarchy
- Several commenters find full-color emoji in terminals/READMEs/code visually noisy, “chatty,” and distracting, especially for dyslexic/ADHD users.
- Argument from visual design: emoji are high in visual hierarchy (complex, colorful mini-images) and dominate surrounding text, especially in multiplexers or long scrollback. Overuse adds cognitive load.
- Some prefer monochrome emoji fonts (e.g., Noto-style outlines) or forcing text-presentation variants; others would avoid emoji entirely and stick to emoticons.
Broader Unicode and historical notes
- Grapheme cluster handling is seen as conceptually simple but maintenance-heavy because Unicode keeps evolving, especially with emoji.
- Debate over whether Unicode should have standardized emoji at all, retroactively changed default presentations, and made text effectively stateful via combining characters and joiners.