Skip to content

v2.1.89 regression: flicker-free rendering destroys terminal scrollback by default #41965

@sstraus

Description

@sstraus

v2.1.89 regression: flicker-free rendering destroys terminal scrollback

v2.1.89 introduced "flicker-free alt-screen rendering with virtualized scrollback" (CLAUDE_CODE_NO_FLICKER=1), but this behavior appears to be enabled by default, causing terminal scrollback to be destroyed after ~2 pages of output.

Observed behavior

When Claude Code output exceeds the visible terminal height (~24 rows), the terminal is fully re-rendered — the startup banner and conversation are reprinted from scratch. This destroys existing scrollback content. The startup mascot/banner remains visible at the top because it's re-rendered each time, but intermediate content is lost.

Evidence

I ran identical tests across three configurations using PTY sessions (24 rows × 120 cols):

Test: Two consecutive prompts — "print numbers 1-100" then "print alphabet A-Z"

Configuration Result
v2.1.87 Single banner, linear output: header → 1-100 → A-Z. Scrollback preserved.
v2.1.89 (default) Banner appears 3 times in output. CC re-renders the entire conversation when content exceeds screen height. Scrollback destroyed on each re-render.
v2.1.89 + CLAUDE_CODE_NO_FLICKER=0 Same as v2.1.87 — single banner, linear output, scrollback preserved.

v2.1.89 default output (truncated for clarity)

▐▛███▜▌   Claude Code v2.1.89        ← 1st render
  11
  ...
  85
▐▛███▜▌   Claude Code v2.1.89        ← 2nd render (re-render, scrollback destroyed)
❯ print the numbers from 1 to 100...
  1
  ...
  83
▐▛███▜▌   Claude Code v2.1.89        ← 3rd render (re-render again)
  1
  ...
  100
❯ now print the alphabet...
  1. A
  ...
  26. Z

Reproduction

  1. Install Claude Code v2.1.89
  2. Open any terminal (iTerm2, xterm.js, etc.)
  3. Start a session and ask for output longer than the terminal height
  4. Scroll up — only ~2 pages of content are available

Workaround: Set CLAUDE_CODE_NO_FLICKER=0 in environment or Claude Code settings.

Environment

  • macOS (Darwin 25.4.0, arm64)
  • Claude Code v2.1.89
  • Tested in: iTerm2, xterm.js (via Tauri WebView)
  • Both terminals exhibit the same behavior

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions