How Devin Rebuilt Its Renderer: Instant Loading for Massive Sessions

Devin rebuilt its renderer with three techniques to make sessions with hundreds of thousands of events load instantly.
Devin faced 20-second load times and severe scroll lag due to traditional full-render approaches overwhelming the browser with hundreds of thousands of session events. The team rewrote the chat renderer using three techniques: skeleton outlines for immediate structural feedback, island loading to render only what's in the viewport, and scroll anchoring to keep reading position stable during dynamic content injection. The result turns a painful wait into a fast, fluid experience — a practical blueprint for frontend rendering in long-context AI applications.
The Performance Problem with Large Sessions
Devin, the AI coding assistant, accumulates a large number of interaction events when handling long-running, complex tasks. According to the team, the largest Devin sessions took over 20 seconds to load — and even after loading, scrolling remained noticeably sluggish. For developers who frequently need to review context, that kind of experience is simply unacceptable.
The root cause lies in the rendering architecture. When a session contains hundreds of thousands of events, traditional all-at-once rendering overwhelms the browser — the DOM explodes in size, the main thread stays blocked for extended periods, and the page can neither render quickly nor respond smoothly to scroll interactions. This class of problem is common in long-context AI applications: as task complexity grows, the rendering layer is typically the first bottleneck to surface.

A Three-Pronged Technical Approach
The Devin team rewrote the chat renderer, applying three key techniques to address loading and scrolling performance.
Skeleton Outlines
The idea behind skeleton outlines is to render a structural framework of the content first, then progressively fill in the real content. Users see the overall page layout the moment they open a session, instead of staring at a blank screen. This improves perceived performance and also provides stable spatial placeholders for subsequent chunked loading, preventing violent layout shifts as content pours in.
Island Loading
Island loading is a render-on-demand strategy. The page is split into independent "islands," and only the portions that are in or near the viewport are actually rendered and activated — content outside the viewport stays in a lightweight state. For sessions containing hundreds of thousands of events, this means the browser only ever needs to handle a small amount of visible content at any given moment, dramatically reducing both initial load cost and runtime overhead.
The Islands Architecture concept was originally proposed by Etsy engineer Katie Sylor-Miller and later popularized by frontend frameworks like Astro and Fresh. Its core idea is to decompose a page into static regions and independent interactive "islands," with each island hydrating independently and potentially activating lazily — avoiding a single full-page hydration pass. In Devin's context, this approach is applied specifically to the rendering side as on-demand loading: events in the session list that are outside the viewport are not rendered into full DOM nodes, but instead kept as low-cost placeholder structures. Only when the user scrolls them into view is actual rendering triggered. This shares similarities with Virtual List (Windowing) techniques — as used by libraries like React Virtual and TanStack Virtual — but island-level granularity is typically coarser, operating at the session segment or message block level rather than row-by-row virtualization. This makes it better suited for AI conversation scenarios where content structure is complex and heights are variable.
Scroll Anchoring
When page content loads dynamically or element heights change, a user's scroll position can jump unexpectedly — a common side effect of chunked rendering approaches. Scroll anchoring locks the view to the content the user is currently focused on, ensuring that even if new content is injected above or below, the reading position stays stable, delivering a smooth and continuous scrolling experience.
Scroll anchoring actually operates on two levels. The first is the browser's native CSS overflow-anchor specification: since Chrome 56, browsers automatically treat the nearest DOM node within the viewport as an anchor, compensating scroll offset when content above that anchor changes in height — preventing the reading position from jumping. The second is application-level anchoring logic, implemented by recording a target element's getBoundingClientRect offset before and after content insertion and manually calling scrollBy to correct the position. This is useful when fine-grained control is needed or when the browser's native behavior is insufficient — for example, when content is being injected simultaneously at both the top and bottom. In Devin's case, sessions may be lazily loading historical events at the top while appending new events at the bottom. Native anchoring struggles to handle changes at both ends simultaneously, making active application-level anchor management an indispensable complement. This is also the engineering detail most easily overlooked in chunked rendering solutions — yet it has the most direct impact on how smooth the experience feels.
Why These Optimizations Matter
The value of this rebuild extends beyond a single product's UX improvement. It reflects an engineering reality that AI applications must confront as they mature: no matter how capable the model, if the frontend layer can't efficiently render massive outputs, real-world usability suffers significantly.
Skeleton screens, virtualization/on-demand rendering, and scroll anchoring are individually well-established techniques in web engineering. But applying them systematically to an AI session scenario operating at the scale of hundreds of thousands of events demands a deep understanding of the specific data volumes and interaction patterns involved. The Devin team used this combination to transform 20-second-plus load times and stuttering scrolls into fast loading and fluid navigation — demonstrating that the key to performance optimization is often not inventing new technology, but making precise architectural choices targeted at real bottlenecks.
Takeaways for Developers
For teams building AI applications, Devin's experience offers a few transferable lessons. First, rendering performance in long-context scenarios should be treated as a first-class concern — the earlier you plan for it, the less likely you are to face a painful architectural rewrite later. Second, perceived performance (such as the immediate feedback from skeleton screens) and actual performance (such as reduced computation from on-demand rendering) both need to be addressed. Third, dynamic loading strategies must be paired with scroll position management; otherwise, fine-grained issues will drag down the overall smoothness of the experience.
As AI assistants take on increasingly complex tasks, session data volumes will only continue to grow. Devin's renderer rebuild offers the industry a practical reference for how to handle that growth at the frontend layer.
Related articles

rag-eval: A Zero-Dependency, No-API-Key RAG Evaluation Tool
rag-eval is a zero-dependency, framework-agnostic open-source RAG pipeline evaluation tool. It supports free local lexical and retrieval metrics with no API keys required, and offers optional LLM Judge for semantic validation. Compatible with Haystack, LangChain, and LlamaIndex.

Vercel AI SDK Releases workflow-harness 1.0.115 Patch Update
Vercel AI SDK releases @ai-sdk/workflow-harness 1.0.115 patch update, syncing the @ai-sdk/harness dependency. Learn about the update, release mechanism, and what it means for developers.

GLM 5.3 Now Available on Serverless Training API — No Sales Process Required
GLM 5.3 is now available on Serverless Training API alongside Kimi K3 and Qwen 3.8 27b. No sales process needed — start fine-tuning directly via docs or pre-made recipes.