Ink renderer crash on Windows: blit=0 + unbounded screen height growth kills sessions

Resolved 💬 3 comments Opened Feb 22, 2026 by sesonet Closed Feb 26, 2026

Description

Claude Code on Windows 11 (VSCode integrated terminal) crashes repeatedly due to an Ink renderer loop. Sessions die without a clean exit — the process is killed externally.

Environment

  • OS: Windows 11 Pro (ARM64)
  • Terminal: VSCode integrated terminal
  • Claude Code: v2.1.50
  • Shell: bash (Git Bash)

Data from a 2-hour observation window (15 sessions)

| Metric | Value |
|---|---|
| Total sessions | 15 |
| RENDER_DEATH | 11 (73%) |
| Clean exit | 0 (0%) |
| Average survival time | 11.5 min |
| Max survival time | 52.8 min |
| Crash frequency | ~every 11 min |

RENDER_DEATH pattern

The last lines in the debug log before every crash are always:

[DEBUG] High write ratio: blit=0, write=XXXXX (100.0% writes), screen=NxM
[DEBUG] Fast mode unavailable: Fast mode requires extra usage billing

Key findings

  1. blit=0 in 99% of cases — the renderer never does incremental updates, always rewrites the entire screen
  2. Screen height grows unboundedly — from 24 rows up to 1,147 rows in a 52-min session
  3. Growth rate ~20–40 rows per minute on average
  4. Width stays constant (157 columns) — only height explodes
  5. Write count correlates with height — from 1,055 (24 rows) to 87,233 (1,147 rows)

Correlation data (sorted by session duration)

Duration | Max writes | Max height | Writes/s
---------|------------|------------|----------
34s      |      1,055 |         24 |     31.0
45s      |      1,892 |         40 |     42.0
176s     |     22,859 |        212 |    129.9
253s     |      3,074 |         78 |     12.2
348s     |     32,656 |        268 |     93.8
462s     |     18,032 |        270 |     39.0
698s     |     17,651 |        386 |     25.3
717s     |     11,695 |        274 |     16.3
797s     |     10,521 |        206 |     13.2
910s     |     18,989 |        391 |     20.9
3,169s   |     87,233 |      1,147 |     27.5

Probable root cause

Ink (React CLI renderer) virtual terminal buffer grows with conversation content. Because blit=0, every render cycle rewrites the entire buffer instead of doing incremental updates. On Windows terminals (especially VSCode integrated terminal) this causes:

  1. Terminal pipe saturation
  2. The process gets killed by the terminal host or OOM

The fact that blit is always 0 suggests the Ink renderer's diff algorithm is failing to detect reusable regions on Windows, possibly due to a terminal capability detection issue (e.g., missing/incorrect TERM environment variable, or Windows ConPTY not reporting capabilities correctly).

Steps to reproduce

  1. Launch Claude Code in VSCode integrated terminal on Windows 11
  2. Have a conversation with tool use (Bash, Read, Edit calls)
  3. After ~10–15 minutes the session crashes without a clean exit
  4. Debug log ends with "High write ratio: blit=0" entries

Expected behavior

Sessions should survive indefinitely. The renderer should use incremental updates (blit > 0) instead of full screen rewrites.

Additional context

  • The issue does not appear to be related to any specific conversation content — it happens across all types of interactions
  • Longer sessions accumulate more virtual screen height, making crashes inevitable
  • The Fast mode unavailable debug spam appears to contribute to the render churn but is not the root cause

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗