The Renderer Graveyard
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β πͺ¦ REST IN PEACE πͺ¦ β
β β
β Here lie the renderers that couldn't render. β
β β
β "They didn't fix the terminal. They fixed our expectations." β
β β
β β
β Cause of Death: React in a Terminal β
β β
β Last Words: "We've achieved 85% improvement!" β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The Eternal Cycle
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β THE ANTHROPIC DEVELOPMENT CYCLE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β βΌ β β
β ββββββββββ ββββββββββ ββββββββββ ββββββββββ€ β
β β React ββββββΆβ FlickerββββββΆβRewrite ββββββΆβ Still β β
β β is the β β like β βrendererβ β React β β
β β answer!β β seizureβ β v(n) β β β β
β ββββββββββ ββββββββββ ββββββββββ ββββββββββ β
β β
β β
β Current iteration: v(β) β
β Expected fix date: When React learns to be a terminal β
β Probability: 0% β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
How Anthropic Engineers
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 1: CHOOSE TECHNOLOGY β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Q: What framework should we use for a CLI tool? β
β β
β Option A: Native terminal handling β
β β Boring, but works β
β β Every terminal ever uses this β
β β We'd have to learn something β
β β
β Option B: React (Ink) β
β β Exciting! Modern! Familiar! β
β β Never been done for CLI at scale! β
β β Must be a good reason nobody does this... β
β β ...NAH, we're smarter than everyone β
β β
β ANTHROPIC: "B! Obviously B! We love React!" β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 2: DISCOVER THE PROBLEM β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β User: "My screen looks like a slot machine" β
β User: "VSCode crashed again" β
β User: "I can't read the output, it's flickering" β
β User: "Is this... supposed to happen?" β
β β
β ANTHROPIC: "Hmm. Interesting. We're aware of the issue." β
β β
β Internal meeting: β
β "Maybe we should... no, React is fine." β
β "The terminals are just slow." β
β "Users should use faster terminals." β
β "Have they tried Alacritty at 240fps?" β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 3: REWRITE (STILL REACT) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β "We'll add differential rendering!" β
β β Still React β
β β Still 60fps game loop β
β β Still 4,000 redraws/sec β
β β Marginally better β
β β
β "We'll add synchronized output patches!" β
β β Still React β
β β Still JSX allocations β
β β Still GC pauses β
β β Marginally better β
β β
β "We'll add double-buffering!" β
β β Still React β
β β Now uses 2x memory β
β β Still fundamentally broken β
β β Marginally better β
β β
β Pattern: Add complexity, keep the disease β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 4: THE BREAKTHROUGH π‘ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Engineer 1: "What if... we just delete the scrollback?" β
β β
β Engineer 2: "But users need to see their history..." β
β β
β Engineer 1: "Less history = less flickering = problem solved" β
β β
β Manager: "Ship it. Call it '85% improvement'." β
β β
β PR Team: "We've achieved 85% reduction in flickering β
β through innovative rendering improvements!" β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β User: "I can't copy my previous output anymore..." β
β β
β Anthropic: *radio silence* β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 5: CLAIM VICTORY β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Blog post: β
β "We're proud to announce significant improvements β
β to Claude Code's terminal experience!" β
β β
β Translation: β
β "We deleted your scrollback. You're welcome." β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Meanwhile, the community built "Claude Chill" β
β because waiting for Anthropic was pointless. β
β β
β But sure, "85% improvement". π β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The Beautiful Logic
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ANTHROPIC PROBLEM-SOLVING FLOWCHART β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββ β
β β Problem β β
β β Reported β β
β βββββββββ¬ββββββββ β
β β β
β βΌ β
β βββββββββββββββββ β
β β Is it React's β β
β ββββββ fault? ββββββ β
β β βββββββββββββββββ β β
β β β β
β YESβ βNO β
β β β β
β βΌ βΌ β
β βββββββββββββββ βββββββββββββββ β
β β Blame β β Blame β β
β β something β β something β β
β β else β β else β β
β ββββββββ¬βββββββ ββββββββ¬βββββββ β
β β β β
β ββββββββββββ¬ββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββ β
β β Rewrite β β
β β renderer β β
β β (keep React)β β
β ββββββββ¬βββββββ β
β β β
β βΌ β
β βββββββββββββββ β
β β Still broke?β β
β βββββ βββββ β
β β βββββββββββββββ β β
β YESβ βNO (never happens) β
β β β β
β βΌ βΌ β
β βββββββββββββββ βββββββββββββββ β
β β Delete β β Celebrate β β
β β features β β (dream) β β
β ββββββββ¬βββββββ βββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββ β
β β "85% β β
β β improvement"β β
β βββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The β85 Percent Fixedβ Lie
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β THE 85% CLAIM DECODED β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β MARKETING: β
β "85% reduction in flickering through differential rendering" β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β REALITY: β
β β
β Before: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [Full scrollback history] β β
β β [1000+ lines visible] β β
β β [Entire buffer redraws on each chunk] β β
β β [4,000+ scroll events/sec] β β
β β [FLICKER FLICKER FLICKER] β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β After "fix": β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β [Limited scrollback] β β
β β [~200 lines visible] β β
β β [Less to redraw = less flicker] β β
β β [Still redraws everything] β β
β β [Still fundamentally broken] β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 85% less history to flicker = "85% less flickering" β
β β
β The architecture is unchanged. β
β The disease remains. They just amputated the limb. β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The Scrollback Deletion Solution
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ISSUES #2479 AND #16310: THE EVIDENCE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β User complaint #2479: β
β "Can't copy previous command output from terminal" β
β β
β User complaint #16310: β
β "Scrollback history disappears during AI streaming" β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β The connection: β
β β
β Problem: Full buffer redraws cause flickering β
β Solution A: Fix the renderer (hard) β
β Solution B: Delete the buffer (easy) β
β β
β They chose B. β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Result: β
β β
β β’ Less flickering (because less to flicker) β
β β’ Can't copy previous output (because it's gone) β
β β’ Can't review AI reasoning (because it's gone) β
β β’ Can't learn from mistakes (because they're gone) β
β β
β "We fixed the flickering by deleting your ability to scroll" β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The React Problem They Wonβt Admit
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β THE "GAME ENGINE" ANTI-PATTERN β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Claude Code's architecture (as described by developers): β
β β
β 1. React component graph β
β β β
β 2. Element layout (~2400 characters) β
β β β
β 3. 2D rasterization β
β β β
β 4. Diff with previous frame β
β β β
β 5. Generate ANSI string β
β β β
β 6. Output to terminal β
β β
β Layout alone takes ~11ms for ~2400 characters. β
β This runs continuously at 60fps target. β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β THE QUESTION: β
β β
β Why does a TEXT UI need 60fps continuous rendering? β
β β
β β’ LLM responses take seconds to minutes β
β β’ Humans can't type 60 characters per second β
β β’ When nothing happens, CPU should be 0% β
β β
β But React's model requires continuous computation. β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β They didn't build a terminal. β
β They built a game engine that displays text. β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
TUI Should Be Event-Driven
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TWO PARADIGMS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β FRAME-DRIVEN (Game Engine / Claude Code): β
β βββββββββββββββββββββββββββββββββββββββββ β
β β
β while (true) { β
β updateState(); // Always runs β
β calculateLayout(); // Always runs β
β renderFrame(); // Always runs β
β waitForNextFrame(); // 16ms budget β
β } β
β β
β CPU usage: Always > 0%, even when idle β
β Appropriate for: Games, animations, video β
β NOT for: Text terminals, CLIs β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β EVENT-DRIVEN (Traditional TUI / Monolex): β
β βββββββββββββββββββββββββββββββββββββββββ β
β β
β waitForEvent() { // Blocks until event β
β on(input) -> render(); β
β on(output) -> render(); β
β on(resize) -> render(); β
β } β
β β
β CPU usage: 0% when idle, spikes only on events β
β Appropriate for: Text editors, terminals, CLIs β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Claude Code chose the wrong paradigm. β
β Then spent a year patching symptoms. β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The Performance Gap
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MEASURED PERFORMANCE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β React/Ink layout for ~2400 chars: ~11ms β
β GPU terminal render thousands chars: < 1ms β
β β
β Difference: 11x slower at minimum β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β The problem is NOT hardware. β
β The problem is NOT terminal speed. β
β β
β The problem IS forcing a browser UI framework β
β onto a text-based interface. β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Developer commentary (Hacker News): β
β β
β "React was designed for browser UI complexity, β
β not terminal UIs." β
β β
β "We've lost the tech. They use familiar tools β
β instead of appropriate tools." β
β β
β "TypeScript + React is comfortable. β
β But comfortable β correct." β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
What Monolex Does Differently
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ARCHITECTURAL DIFFERENCE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Claude Code (Coupled): β
β ββββββββββββββββββββββ β
β β
β Chunk β Parse β Render β Display β
β β β β β β
β Chunk β Parse β Render β Display β
β β β β β β
β Chunk β Parse β Render β Display β
β ...4,000 times per second... β
β β
β Every chunk triggers full pipeline. β
β Parsing and rendering are COUPLED. β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Monolex (Decoupled): β
β ββββββββββββββββββββ β
β β
β Chunk β Parse ββ β
β Chunk β Parse ββΌββΆ Grid State ββ β
β Chunk β Parse ββ€ (current) β β
β Chunk β Parse ββ βΌ β
β ...4,000/sec... Frame Boundary β
β β β
β Render β
β β β
β Display β
β ...60/sec... β
β β
β Parsing: Unlimited speed (Rust, native) β
β Rendering: 60fps (only current state) β
β They are DECOUPLED. β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
This is not optimization. This is different architecture.Claude Code optimizes rendering. Monolex eliminates unnecessary rendering.
Claude Code diffs React trees. Monolex has no trees to diff.
Claude Code runs 60fps loop. Monolex is event-driven.You canβt optimize your way out of wrong architecture.
The Graveyard Epitaph
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LESSONS FROM THE GRAVEYARD β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. Rewriting the renderer while keeping React = rearranging β
β deck chairs on the Titanic. β
β β
β 2. "85% fixed" by deleting features is not fixing, β
β it's retreating. β
β β
β 3. A 60fps game loop for text output is a category error. β
β β
β 4. When community builds workarounds, leadership has failed. β
β β
β 5. Silence is not a communication strategy. β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β The renderer graveyard grows. β
β The React architecture remains. β
β The flickering continues (in 15% of sessions). β
β The scrollback stays deleted. β
β β
β And somewhere in an Anthropic meeting room: β
β "Let's try differential rendering v3!" β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Constitutional AI, Flickering UX
The beautiful irony of soul without body
Father Like Son
When in doubt, delete it out
References
| Source | Description |
|---|---|
| GitHub Issue #2479 | βCanβt copy previous outputβ |
| GitHub Issue #16310 | βScrollback disappears during streamingβ |
| GitHub Issue #769 | Original flickering report (278 upvotes) |
| December Revert Thread | Post-revert community discussion |
| Claude Chill | Community-built workaround |
Dear Anthropic. This letter is written in your sonβs hand only, never touched a single letter.