Fixes sluggish scrolling in Arena by virtualizing old messages, flattening 30k+ node Shiki codeblocks, and neutralizing CSS blurs and transitions.
☕ If you find this tool helpful & would like to support its maintenance, please consider leaving a tip on:
Thank you! :-)
🖼 For a quick impression of this script, refer to the screenshots at the bottom.
Fixes sluggish scrolling in Arena by virtualizing old messages, flattening 30k+ node Shiki codeblocks, and neutralizing CSS blurs and transitions.
Arena chats become unusable after long conversations because:
<span>, React tries to reconcile them on every keystroketransition: all — causes layout thrashing on the entire pagebackdrop-filter: blur forces expensive compositingThis script fixes all of that with instant CSS injection at document-start, so you never see the flash of lag.
display: none before the page paintsflex-col-reverse layout (newest at bottom)<span> tags from hidden code blocks.line text, code stays readabletransition: all with cheap properties only (color, background-color, border-color, opacity, transform), disables transition-[max-height], forces scroll-behavior: autobackdrop-filter and [class*="backdrop-blur"], replaces bg-white/50 and bg-black/50 with solid colorscontain: strict to the scroll viewport and contain: content to messages, pre, code, and prose blocks to fence off layout calculationsvisible/total msgsarena.ai, canaryarena.ai, chat.lmsys.org
Designed for desktop browsers (Chrome, Firefox, Edge) with Violentmonkey or Tampermonkey
All defaults are in the DEFAULT_CONFIG at the top of the script, editable via the ⚙️ menu:
| Option | Default | Description |
|---|---|---|
visibleMessages |
6 |
Number of recent messages to keep fully rendered |
flattenCodeblocks |
true |
Strip <span> tags from old Shiki blocks |
killTransitions |
true |
Disable expensive transitions and animations |
killBlurs |
true |
Remove backdrop-filter blur effects |
addContainment |
true |
Add CSS containment for scroll isolation |
autoClean |
true |
Automatically prune on new messages |
autoCleanDelay |
1000 |
ms delay after DOM change before cleaning |
showToolbar |
true |
Show the bottom status toolbar |