THE CENTER“CodexMono is The Brick - the fundamental unit that enables Monokinetics: unified Human + AI experience through predictable, trustable visual alignment.”Module Architecture implements The Brick principle by decomposing document rendering into 14 specialized modules - each a brick in the larger structure.
The Brick Extended
Copy
┌═══════════════════════════════════════════════════════════════════════════┐
│ │
│ THE BRICK CONCEPT │
│ │
│ Terminal World: Document World: │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ PTY Cell │ │ VMD Element │ │
│ │ - character │ ======> │ - content │ │
│ │ - colors │ EXTENDS │ - styling │ │
│ │ - attributes │ │ - interactions │ │
│ └──────────────────┘ └──────────────────┘ │
│ │
│ Both share: │
│ - Monospace rendering (CodexMono) │
│ - Modular composition │
│ - Event-driven interaction │
│ - Theme-aware styling │
│ │
└═══════════════════════════════════════════════════════════════════════════┘
Module Decomposition
14 specialized modules, each handling a specific aspect:Copy
┌─────────────────────────────────────────────────────────────────────────┐
│ VARIABLEMD MODULE ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────┐ │
│ │ CORE │ │
│ │ (Orchestrator) │ │
│ └────────┬─────────┘ │
│ │ │
│ ┌──────────┬──────────┼──────────┬──────────┐ │
│ │ │ │ │ │ │
│ v v v v v │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Styles │ │ Box │ │ Nav │ │ Editors │ │Renderers│ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ │ │ │ │ │
│ │ │ v v │
│ │ │ ┌───────┴──────────┐ │
│ │ │ │ Edit + Utils │ │
│ │ │ └──────────────────┘ │
│ │ │ │ │
│ v v v │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Typography (CodexMono) │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ v │
│ ┌────────────────────┐ │
│ │ Supporting │ │
│ │ - Context Menu │ │
│ │ - Color │ │
│ │ - Emoji │ │
│ │ - Header │ │
│ │ - Diff │ │
│ │ - Settings │ │
│ └────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Module Categories
Copy
┌─────────────────────────────────────────────────────────────────────────┐
│ 14 MODULES BY CATEGORY │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ CORE ORCHESTRATION │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Core │ Coordinates all modules, manages state │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ VISUAL RENDERING │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Styles │ CSS injection, dynamic theming │ │
│ │ Box │ ASCII art containers, drag/resize │ │
│ │ Renderers │ HTML, JSON, Image rendering │ │
│ │ Diff │ Side-by-side comparisons │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ INTERACTION │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Navigation │ History, back/forward, file loading │ │
│ │ Editors │ Monaco, code editing integration │ │
│ │ Context │ Right-click menus │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ UTILITIES │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Color │ Theme color adjustments │ │
│ │ Emoji │ Cross-platform emoji handling │ │
│ │ Header │ File metadata display │ │
│ │ Settings │ User preferences │ │
│ │ Utils │ Shared helper functions │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Context Pattern
Each module communicates through typed Context interfaces - enabling clean separation without tight coupling:Copy
┌─────────────────────────────────────────────────────────────────────────┐
│ CONTEXT FLOW │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ NativeMdViewer Instance │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ State: container, current file, history, tabs │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │ │
│ │ Creates context objects │
│ v │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ 9 Context Types: │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Style │ │ Box │ │ Navigation │ │ │
│ │ │ Context │ │ Context │ │ Context │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Editor │ │ Renderer │ │ Header │ │ │
│ │ │ Context │ │ Context │ │ Context │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Diff │ │ Settings │ │Context Menu │ │ │
│ │ │ Context │ │ Context │ │ Context │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │ │
│ │ Passed to module functions │
│ v │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ Module Functions receive only what they need │ │
│ │ - No global state access │ │
│ │ - Type-safe contracts │ │
│ │ - Easy to test in isolation │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Initialization Flow
Copy
┌─────────────────────────────────────────────────────────────────────────┐
│ STARTUP SEQUENCE │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Step 1: Container Discovery │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Find the VMD container element │ │
│ │ │ │ │
│ │ └──-> Success: Ready to render │ │
│ │ └──-> Failure: Show error │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │ │
│ v │
│ Step 2: Tab Manager (if multi-tab mode) │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Initialize tab management for multiple documents │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │ │
│ v │
│ Step 3: Typography Setup │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Load saved font settings │ │
│ │ Inject base CSS styles │ │
│ │ Apply CodexMono typography │ │
│ │ Configure responsive breakpoints │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │ │
│ v │
│ Step 4: Protocol Resolution (via Tauri) │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Resolve monolex:// and niia:// paths │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │ │
│ v │
│ Step 5: Event Binding │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Mouse interactions, keyboard shortcuts │ │
│ │ Context menus, tab navigation │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │ │
│ v │
│ Step 6: Global Registration │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Register renderMarkdown() for external calls │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │ │
│ v │
│ Step 7: Auto-Refresh │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Connect to NIIA Watcher for live updates │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │ │
│ v │
│ [READY TO RENDER] │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Style Injection
Copy
┌─────────────────────────────────────────────────────────────────────────┐
│ THREE-LAYER STYLE SYSTEM │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Layer 1: Base Styles │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Core VMD classes │ │
│ │ Heading styles (h1-h6) │ │
│ │ Box wrappers │ │
│ │ Base responsive rules │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ Layer 2: Dynamic Styles │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ User font preferences │ │
│ │ Font size, weight, line height │ │
│ │ CodexMono for code/ASCII │ │
│ │ CSS custom properties (--vmd-unit) │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ Layer 3: Responsive Styles │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Container queries for narrow mode │ │
│ │ Adaptive typography scaling │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Tauri Integration
Copy
┌─────────────────────────────────────────────────────────────────────────┐
│ PROTOCOL PATH HANDLING │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Supported Paths: │
│ ┌──────────────────────────────┬───────────────────────────────┐ │
│ │ /absolute/path/file.md │ Direct file system │ │
│ │ monolex://path/file.md │ Monolex protocol │ │
│ │ niia://path/file.md │ NIIA protocol │ │
│ │ project://path/file.md │ Project-relative │ │
│ └──────────────────────────────┴───────────────────────────────┘ │
│ │
│ Resolution Flow: │
│ │
│ Input Path │
│ │ │
│ v │
│ ┌───────────────────┐ │
│ │ Protocol Check │ │
│ │ monolex:// ? │──-> Resolve via Tauri backend │
│ │ niia:// ? │──-> Resolve via Tauri backend │
│ └───────────────────┘ │
│ │ │
│ v │
│ ┌───────────────────┐ │
│ │ File Existence │ ──-> Tauri check_file command │
│ └───────────────────┘ │
│ │ │
│ v │
│ ┌───────────────────┐ │
│ │ Read Content │ ──-> Tauri read_file command │
│ └───────────────────┘ │
│ │ │
│ v │
│ Render Document │
│ │
└─────────────────────────────────────────────────────────────────────────┘
File Type Support
Copy
┌─────────────────────────────────────────────────────────────────────────┐
│ SUPPORTED FILE TYPES │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ CODE FILES (36 types): │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Programming: js, ts, py, rs, go, java, cpp, c, swift, kotlin │ │
│ │ Config: yaml, toml, ini, env, properties, gradle │ │
│ │ Other: sql, sh, xml, css, scss, diff, patch │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ DOCUMENT FILES: │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Markdown: md, mdx │ │
│ │ HTML: html, htm │ │
│ │ Data: json │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ MEDIA FILES: │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Images: png, jpg, gif, svg, webp, ico, bmp │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ SPECIAL FILES: │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Git: .gitignore, .gitattributes │ │
│ │ Package: .npmignore, .dockerignore │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Summary
Copy
┌═══════════════════════════════════════════════════════════════════════════┐
│ │
│ VARIABLEMD: EXTENDING THE BRICK │
│ │
│ THE CENTER teaches us that the Brick is a universal unit. │
│ In Terminal: PTY cells. In Documents: VMD elements. │
│ │
│ The architecture achieves this through: │
│ │
│ 1. Module Decomposition (14 modules) │
│ - Each handles one aspect │
│ - SMPC: Simplicity through separation │
│ │
│ 2. Context Pattern │
│ - Type-safe dependency injection │
│ - Clean interface contracts │
│ │
│ 3. Tauri Integration │
│ - Native file system access │
│ - Protocol path handling │
│ │
│ 4. CodexMono Typography │
│ - Consistent monospace rendering │
│ - Terminal-document visual unity │
│ │
└═══════════════════════════════════════════════════════════════════════════┘
Brick Verification
Copy
Terminal Cell: VMD Element:
┌──────────────┐ ┌──────────────┐
│ character: A │ │ content: A │
│ color: green │ ==========> │ style: theme │
│ bold: true │ ISOMORPHIC │ font: Mono │
└──────────────┘ └──────────────┘
Both are:
- Atomic rendering units
- Theme-aware
- Monospace-rendered
- Event-driven