Anthropic fixed the scroll jank — not the scroll length.
On August 25, 2026, @ClaudeDevs posted that long answers on Claude web and desktop now stream ~4× smoother. The change is a streaming renderer rebuild: only the parts of the page still changing get updated, instead of repainting the whole reply on every token.
The numbers ClaudeDevs quoted:
| Metric | Claim |
|---|---|
| Smoothness (average) | ~4× smoother on long replies |
| Stall frequency (slower laptop) | 9× less stalling |
| Worst freeze | 4.5× shorter |
| 120Hz MacBook Pro | Holds 120fps start to finish |
The post crossed 211K views in hours. The first viral reply got the distinction right: "I thought it's 4x faster then realized it's just smoother."
TL;DR
| Question | Direct answer |
|---|---|
| What shipped? | New streaming renderer for Claude web + desktop |
| When? | August 25, 2026 (~3:21 AM UTC on X) |
| What improved? | UI framerate and tail freezes while tokens arrive |
| What did not? | Model speed, verbosity, or answer quality |
| Why now? | Long Opus-class replies stress naive markdown re-renders |
| Best metric? | 4.5× shorter worst freeze — spikes hurt more than mean fps |
Smoother ≠ faster
Two different pipelines:
Model server ──tokens──▶ Network ──tokens──▶ Renderer ──pixels──▶ Your eyes
↑ ↑
unchanged by what Anthropic fixed
this announcement
If you were waiting on time-to-first-token or tokens per second, this update does not move that needle. If you were reading along while a long reply grew — scrolling, skimming headings, copying mid-stream — the fix targets the moment the UI freezes even though tokens keep arriving.
That matches how people actually use Claude on the web and Claude in Chrome: start a research answer, expand a plan, watch code blocks materialize. The pain was never "the model is slow"; it was "the tab stutters for two seconds every time a new section renders."
Why long Opus replies were the stress test
@latentlocal's joke landed because it is accurate: on Opus 5, long answers are the default, not the edge case. A model tuned for depth produces:
- Nested headings and bullet trees
- Code fences that trigger syntax highlighting passes
- Tables, callouts, and incremental markdown reconciliation
A renderer that diffs the live region instead of rebuilding the document is the standard fix for chat UIs at scale. ClaudeDevs did not publish implementation details — no mention of virtualized lists, incremental DOM, or canvas-backed markdown — but the claimed metrics (especially 9× fewer stalls on a slower laptop) fit a move away from full-tree updates.
The reply from @anytanreal is the practitioner read: the 4.5× shorter worst freeze matters more than the 4× average. Mean framerate lies; tail latency is what makes you alt-tab away mid-answer.
How incremental streaming renderers work
ClaudeDevs did not publish source code, but the claimed metrics fit a well-known class of fixes: incremental DOM updates instead of full-document reconciliation on every token.
Naive chat renderers do something like this on each streamed chunk:
token arrives → parse full markdown → rebuild DOM tree → syntax-highlight all fences → layout entire reply
On a 2,000-word Opus answer with six code blocks and nested lists, that loop runs hundreds of times. Each pass can block the main thread for tens of milliseconds — visible as stutter even when tokens arrive smoothly over the network.
The rebuild Anthropic shipped narrows the blast radius:
token arrives → diff against previous AST → update only changed subtree → re-highlight affected fence only → relayout changed region
That pattern shows up across mature chat UIs: virtualized message lists for long threads, memoized markdown components, requestAnimationFrame batching for high-frequency updates, and deferring syntax highlighting until a code fence closes.
The 9× stall reduction on slower laptops is the tell. High-end MacBooks with 120Hz displays were never the worst case — integrated GPUs and single-fan cooling are. Fixing tail latency there means the diffing strategy actually reduced main-thread work, not just smoothed averages on hardware that was already fine.
For builders shipping their own agent UIs, the lesson transfers directly: measure worst-case frame time during streaming, not mean fps after the reply completes.
Claude web vs API vs Claude Code — where jank lives
Anthropic's fix applies to a specific surface map:
| Surface | Renderer owner | This fix applies? |
|---|---|---|
| claude.ai web | Anthropic | ✅ Announced |
| Claude desktop app | Anthropic | ✅ Announced |
| Claude mobile app | Anthropic | ❓ Not mentioned — may differ or ship later |
| Claude Code (terminal) | Separate TUI | ❌ Different stack |
| API + your client | You | ❌ You own rendering |
| Claude in Chrome extension | Anthropic | Likely shared web stack — verify after update |
If you consume Claude via the API and render markdown in your own React or Electron shell, this announcement does not fix your UI. The pattern to copy is the architecture — incremental updates, batched layout — not a setting you toggle.
Claude in Chrome and cross-device session sync likely share the web renderer; long sidebar answers should benefit once the deploy propagates. Terminal users on Claude Code should expect no change — TUI rendering is a separate code path.
Benchmarking your own chat UI
Whether you build on Claude's API or an open-weight model, the Anthropic numbers suggest a minimal perf checklist:
- Stream a 2,000+ token Opus reply on your slowest target device — not your dev MacBook.
- Record main-thread long tasks in Chrome DevTools Performance panel during streaming.
- Track p99 frame time, not average fps — the 4.5× worst-freeze metric is a p99 story.
- Test with code fences mid-stream — syntax highlighters are common stall sources.
- Separate network from render — if tokens arrive fast but UI stalls, fix the renderer; if tokens arrive slow, fix the model or API path.
A simple pass/fail rule: if the user can scroll and skim headings while tokens still arrive without visible freeze spikes, you pass. If they alt-tab away during generation, you fail — regardless of tokens-per-second.
What people are asking after the announcement
The ClaudeDevs thread generated predictable follow-ups within hours:
"Is it actually 4× faster?" No — @Xxi5olc's reply became the top clarification within minutes. Smoother pixels, same token throughput.
"Can you make Claude write less?" A separate product complaint. @pacymugisho and @jarenoid asked for brevity and clarity, not framerate. Address that with thin prompts, /debuzz skills, or model choice — not renderer updates.
"Does this help Claude Code?" Not directly. Terminal UIs render differently. If your pain is scroll jank in the IDE's inline chat panel (Cursor, VS Code extensions), that is the extension author's problem.
"Why announce this now?" Long Opus 5 replies are the default workload. As models produce longer structured output, front-end teams hit renderer limits before network limits. Anthropic fixed the bottleneck users actually felt.
"Will mobile get it?" Unanswered in the original post. Mobile WebViews and native text views have their own layout costs — do not assume parity until ClaudeDevs confirms.
Enterprise and multi-tab workloads
The fix matters disproportionately for enterprise users running enterprise-managed MCP auth, long research sessions, and multiple Claude tabs. Each tab streaming a long Opus reply multiplies main-thread pressure — incremental rendering reduces the chance that one heavy answer freezes the whole browser profile.
Humanising LLM outputs at the boundary does not help if the UI cannot display the output smoothly. Anthropic fixed the display path; content shape remains the reader's problem via prompts and skills.
Power users who live in Claude Cowork workflows — long plans, iterative edits, multi-step research — were the implicit audience. Shorter answers would also reduce renderer load, but that is a model policy choice, not a front-end patch.
If Claude Opus 5 still feels worse to work with after this update, the remaining friction is almost certainly content and harness — not scroll jank.
What the thread asked for instead
Not everyone wanted smoother scripture.
@pacymugisho: "Can you fix how Claude responds instead? It's some kind of ancient scripture."
@jarenoid: "Good but will it also start 'making sense' while answering?"
Those are model and prompt complaints — the same family as load-bearing Claudisms, /debuzz, and why Opus 5 feels worse to work with. Anthropic's August 25 post is explicitly front-end engineering, not a brevity patch.
explainx.ai's split:
| Problem | This fix | Other levers |
|---|---|---|
| Scroll stutter while streaming | ✅ Renderer rebuild | — |
| 2,000-word answers you did not ask for | ❌ | Skills, /debuzz, thin prompts |
| Wrong content mid-stream | ❌ | Evals, stop conditions, loop engineering |
| API overload errors | ❌ | 529 status — different failure mode |
What builders should do with this
- Re-test long streaming sessions on your worst laptop — that is where ClaudeDevs quoted the 9× stall reduction.
- Do not confuse UX with throughput when benchmarking agents; measure tokens and tool latency separately from UI fps.
- Still compress context — smoother rendering does not shrink context window pressure.
- Separate voice from performance — if the issue is prose shape, fix the harness; if the issue was jank, this ship helps.
Scope limits (what the post did not say)
- Mobile app — not mentioned; may already differ or ship later.
- Claude Code terminal — separate UI surface.
- API consumers — your client owns rendering; this is claude.ai / desktop app internals.
- Shorter default answers — not part of this announcement.
Related on explainx.ai
- Claude in Chrome — browser extension guide
- Claude in Chrome sessions sync across devices
- How to use Claude Cowork safely
- Claude Opus 5 load-bearing Claudisms
- Why Claude Opus 5 feels worse to work with
- /debuzz — stripping BuzzFeed voice with a second model
- Thin prompts, thick artifacts, thin skills
- Claude API 529 Overloaded — live status
- Enterprise-managed MCP auth via Okta (GA Aug 24)
- Context window limit management for Claude Code
- Humanising LLM outputs at the boundary
Sources
- @ClaudeDevs on X — August 25, 2026 (~3:21 AM)
- Top replies: @Xxi5olc, @anytanreal, @latentlocal, @pacymugisho
Performance claims are Anthropic's from the ClaudeDevs post; explainx.ai has not independently benchmarked. Follow @explainx_ai for Claude ecosystem updates.
