Skip to main content
┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│  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.
┌─────────────────────────────────────────────────────────────────┐
│  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                              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
The number 1200 was chosen deliberately. With 30 divisors, it provides maximum flexibility for grid subdivision while maintaining the perfect 1:2 ratio with Latin characters.

Four Font Variants

CodexMono provides specialized variants for different CJK coverage needs.
┌─────────────────────────────────────────────────────────────────┐
│  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       │     │
│  └─────────────────┴──────────────────────────────────────┘     │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
Choose the variant that matches your primary language. All variants maintain the exact 600/1200 unit guarantee.

Unicode Width Decision

Every character needs a width decision. The terminal calculates width using a consistent algorithm.
┌─────────────────────────────────────────────────────────────────┐
│  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.
┌─────────────────────────────────────────────────────────────────┐
│  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.
┌─────────────────────────────────────────────────────────────────┐
│  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.                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
All variation selectors (VS1-VS16, range U+FE00 to U+FE0F) have width 0.

Width Categories

A quick reference for the three width categories.
┌─────────────────────────────────────────────────────────────────┐
│  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.
┌─────────────────────────────────────────────────────────────────┐
│  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.
┌─────────────────────────────────────────────────────────────────┐
│  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.
┌─────────────────────────────────────────────────────────────────┐
│  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.”