Copy
┌─────────────────────────────────────────────────────────────────┐
│ │
│ THE CENTER: │
│ │
│ "CodexMono is The Brick - the fundamental unit that enables │
│ unified Human + AI experience through predictable, │
│ trustable visual alignment." │
│ │
└─────────────────────────────────────────────────────────────────┘
The Double Brick Principle
CJK characters (Chinese, Japanese, Korean) occupy exactly twice the width of Latin characters. This is not a workaround - it is the mathematical foundation of multilingual alignment.Copy
┌─────────────────────────────────────────────────────────────────┐
│ THE 1200-UNIT CJK GUARANTEE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ LATIN BRICK CJK DOUBLE BRICK │
│ ┌─────────┐ ┌─────────┬─────────┐ │
│ │ │ │ │ │ │
│ │ A │ │ Korean │ │
│ │ │ │ │ │ │
│ └─────────┘ └─────────┴─────────┘ │
│ 600 units 600 + 600 = 1200 units │
│ 1 column 2 columns │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ The Equation: │
│ │
│ 1200 = 600 x 2 │
│ = One Latin width x 2 │
│ = Two terminal columns │
│ = One CJK character │
│ = TWO BRICKS SIDE BY SIDE │
│ │
└─────────────────────────────────────────────────────────────────┘
Four Font Variants
CodexMono provides specialized variants for different CJK coverage needs.Copy
┌─────────────────────────────────────────────────────────────────┐
│ CODEXMONO VARIANT HIERARCHY │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────┐ │
│ │ CodexMono.ttf │ │
│ │ Base Latin │ │
│ │ 600 units │ │
│ └─────────┬──────────┘ │
│ │ │
│ ┌──────────────────┴──────────────────┐ │
│ │ │ │
│ v v │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ CodexMono-KR │ │ CodexMono-EA │ │
│ │ Korean+Japanese │ │ East Asia Full │ │
│ │ 1200 units │ │ 1200 units │ │
│ └─────────────────────┘ └──────────┬──────────┘ │
│ │ │
│ v │
│ ┌─────────────────────┐ │
│ │ CodexMono-Trad │ │
│ │ Traditional CN │ │
│ │ 1200 units │ │
│ └─────────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ COVERAGE BREAKDOWN: │
│ │
│ ┌─────────────────┬──────────────────────────────────────┐ │
│ │ Variant │ Character Coverage │ │
│ ├─────────────────┼──────────────────────────────────────┤ │
│ │ CodexMono.ttf │ Latin + Math + Box Drawing │ │
│ │ CodexMono-KR │ + Hangul 11,172 + Hiragana/Katakana │ │
│ │ CodexMono-EA │ + Simplified Chinese 20,000+ │ │
│ │ CodexMono-Trad │ + Traditional Chinese variants │ │
│ └─────────────────┴──────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Unicode Width Decision
Every character needs a width decision. The terminal calculates width using a consistent algorithm.Copy
┌─────────────────────────────────────────────────────────────────┐
│ WIDTH CALCULATION FLOW │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Input Character │
│ │ │
│ v │
│ ┌──────────────────┐ │
│ │ Control char? │ │
│ └────────┬─────────┘ │
│ YES │ NO │
│ │ │ │ │
│ v │ v │
│ ┌────────┐ │ ┌──────────────────┐ │
│ │WIDTH 0 │ │ │ ASCII (< 0x7F)? │ │
│ └────────┘ │ └────────┬─────────┘ │
│ │ YES │ NO │
│ │ │ │ │ │
│ │ v │ v │
│ │ ┌────────┐│ ┌──────────────┐ │
│ │ │WIDTH 1 ││ │ Combining? │ │
│ │ └────────┘│ └──────┬───────┘ │
│ │ │ YES │ NO │
│ │ │ │ │ │ │
│ │ │ v │ v │
│ │ │┌──────┐ │ ┌─────────┐ │
│ │ ││ 0 │ │ │CJK/Emoji│ │
│ │ │└──────┘ │ └────┬────┘ │
│ │ │ │ YES │ NO │
│ │ │ │ │ │ │ │
│ │ │ │ v │ v │
│ │ │ │┌───┐ │ ┌───┐ │
│ │ │ ││ 2 │ │ │ 1 │ │
│ │ │ │└───┘ │ └───┘ │
│ │ │ │ │ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ KEY INSIGHT: Default width is 1, not 2. │
│ Only explicitly marked CJK/Emoji characters get width 2. │
│ │
└─────────────────────────────────────────────────────────────────┘
The Warning Sign Puzzle
Adjacent Unicode codepoints can have completely different widths. This is proven fact, not assumption.Copy
┌─────────────────────────────────────────────────────────────────┐
│ ADJACENT CODEPOINTS, DIFFERENT WIDTHS │
├─────────────────────────────────────────────────────────────────┤
│ │
│ U+26A0 Warning Sign U+26A1 High Voltage │
│ ┌─────┐ ┌───────────┐ │
│ │ ! │ WIDTH 1 │ /| │ WIDTH 2 │
│ │ /|\ │ │ / | │ │
│ └─────┘ └───────────┘ │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ TERMINAL VERIFICATION: │
│ │
│ ┌────────────────┬─────────────────┬──────────────────┐ │
│ │ Terminal │ Warning (U+26A0)│ High Voltage │ │
│ ├────────────────┼─────────────────┼──────────────────┤ │
│ │ xterm.js │ Width 1 │ Width 2 │ │
│ │ Alacritty │ Width 1 │ Width 2 │ │
│ │ Ghostty │ Width 1 │ Width 2 │ │
│ └────────────────┴─────────────────┴──────────────────┘ │
│ │
│ Never assume width from visual appearance. │
│ Trust the width tables. │
│ │
└─────────────────────────────────────────────────────────────────┘
Variation Selectors
VS16 (U+FE0F) changes how a character looks, but never changes its width.Copy
┌─────────────────────────────────────────────────────────────────┐
│ VS16 AFFECTS RENDERING, NOT WIDTH │
├─────────────────────────────────────────────────────────────────┤
│ │
│ THE COMMON MISCONCEPTION: │
│ │
│ WRONG: "Warning + VS16 = 2 cells because it's emoji" │
│ │
│ CORRECT: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Warning Sign (U+26A0) = Width 1 │ │
│ │ VS16 (U+FE0F) = Width 0 (invisible) │ │
│ │ ───────────────────────────────────── │ │
│ │ Warning + VS16 = 1 + 0 = Width 1 TOTAL │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Visual Appearance Grid Allocation │
│ ────────────────── ──────────────── │
│ Warning (text style) -> ┌───┐ │
│ │ ! │ 1 cell │
│ └───┘ │
│ │
│ Warning+VS16 (emoji) -> ┌───┐ │
│ │ ! │ 1 cell (SAME!) │
│ └───┘ │
│ │
│ Presentation changes. Width stays the same. │
│ │
└─────────────────────────────────────────────────────────────────┘
Width Categories
A quick reference for the three width categories.Copy
┌─────────────────────────────────────────────────────────────────┐
│ WIDTH CATEGORY REFERENCE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ WIDTH 0 (Zero-Width): │
│ ┌───────────────────────┬─────────────────────────────────┐ │
│ │ Category │ Example │ │
│ ├───────────────────────┼─────────────────────────────────┤ │
│ │ Combining diacritics │ accents, umlauts │ │
│ │ Variation selectors │ VS1-VS16 │ │
│ │ Zero-width chars │ ZWSP, ZWJ, ZWNJ │ │
│ │ Format characters │ directional marks │ │
│ └───────────────────────┴─────────────────────────────────┘ │
│ │
│ WIDTH 1 (Standard - The Brick): │
│ ┌───────────────────────┬─────────────────────────────────┐ │
│ │ Category │ Example │ │
│ ├───────────────────────┼─────────────────────────────────┤ │
│ │ ASCII │ A-Z, 0-9, symbols │ │
│ │ Latin Extended │ accented letters │ │
│ │ Box Drawing │ single, double lines │ │
│ │ Geometric Shapes │ square, circle, diamond │ │
│ │ Warning Sign │ U+26A0 (NOT 2!) │ │
│ └───────────────────────┴─────────────────────────────────┘ │
│ │
│ WIDTH 2 (Double Brick - CJK/Emoji): │
│ ┌───────────────────────┬─────────────────────────────────┐ │
│ │ Category │ Coverage │ │
│ ├───────────────────────┼─────────────────────────────────┤ │
│ │ CJK Unified │ ~20,000 characters │ │
│ │ Hangul Syllables │ ~11,172 characters │ │
│ │ Hiragana/Katakana │ 176 characters │ │
│ │ Fullwidth ASCII │ 96 characters │ │
│ │ Emoji │ ~1,000 characters │ │
│ └───────────────────────┴─────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Mixed Script Alignment
When Latin and CJK characters appear together, CodexMono maintains perfect alignment.Copy
┌─────────────────────────────────────────────────────────────────┐
│ ALIGNMENT VERIFICATION │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Mixed text: "Hello Korean World" │
│ │
│ H e l l o Ko re an W o r l │
│ ┌───┬───┬───┬───┬───┬───┬───────┬───────┬───┬───┬───┬───┬───┐ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ └───┴───┴───┴───┴───┴───┴───────┴───────┴───┴───┴───┴───┴───┘ │
│ 600 600 600 600 600 600 1200 1200 600 600 600 600 600 │
│ │
│ Latin: 6 x 600 = 3600 units │
│ Korean: 2 x 1200 = 2400 units (each Korean = 2 columns) │
│ Latin: 5 x 600 = 3000 units │
│ ────────────────────────── │
│ Total: 9000 units │
│ │
│ Check: 9000 / 600 = 15 (exact integer = perfect grid) │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ CODE EXAMPLE: │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ const name = "Hello"; // ASCII only │ │
│ │ const name_kr = "Hangul"; // Korean variable │ │
│ │ ├──────┤ // Same column alignment │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Each Korean character = 2 cells = perfect vertical alignment │
│ │
└─────────────────────────────────────────────────────────────────┘
The 600-Unit Mapping
Every width value maps directly to font units.Copy
┌─────────────────────────────────────────────────────────────────┐
│ BRICK TO ADVANCE WIDTH MAPPING │
├─────────────────────────────────────────────────────────────────┤
│ │
│ FORMULA: advance_width = visual_width x 600 │
│ │
│ ┌─────────────────┬───────────────────┬──────────────────┐ │
│ │ Width Value │ Font Advance │ CodexMono Bricks │ │
│ ├─────────────────┼───────────────────┼──────────────────┤ │
│ │ 0 │ N/A │ 0 (combining) │ │
│ │ 1 │ 600 units │ 1 brick │ │
│ │ 2 │ 1200 units │ 2 bricks │ │
│ └─────────────────┴───────────────────┴──────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ EXAMPLES: │
│ │
│ ┌──────────────────┬──────────────┬───────────────────────┐ │
│ │ Character │ Width │ Advance Width │ │
│ ├──────────────────┼──────────────┼───────────────────────┤ │
│ │ 'A' │ 1 │ 600 units │ │
│ │ Korean char │ 2 │ 1200 units │ │
│ │ Warning Sign │ 1 │ 600 units (NOT 2!) │ │
│ │ High Voltage │ 2 │ 1200 units │ │
│ │ Warning+VS16 │ 1 │ 600 units (VS16 = 0) │ │
│ └──────────────────┴──────────────┴───────────────────────┘ │
│ │
│ THE GUARANTEE: │
│ With CodexMono, width x 600 = exact pixel alignment. │
│ │
└─────────────────────────────────────────────────────────────────┘
Trust Through Math
The alignment system is mathematically provable.Copy
┌─────────────────────────────────────────────────────────────────┐
│ THE TRUST GUARANTEE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Three verifiable facts: │
│ │
│ 1. Width calculation uses same tables as terminals │
│ 2. Font advance widths are exactly 600 or 1200 units │
│ 3. Alignment is mathematically guaranteed │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ "Alignment = Trust = Structure = Shared Reality" │
│ │
│ Whether you write in English, Korean, Japanese, or Chinese, │
│ CodexMono speaks the same language: 600 units of trust. │
│ │
│ Perfect 1:2 ratio. The Brick extended. CJK guaranteed. │
│ │
└─────────────────────────────────────────────────────────────────┘
“The 600-unit brick is not arbitrary. It is the mathematical foundation that makes alignment provable.”