Deck 10 ยท deep dive
Under the hood: how Zed actually works.
GPUI, the Rope, the CRDT layer that makes multiplayer work, Tree-sitter, and WASM-sandboxed extensions โ mapped against what VSCode's Electron process model and WebStorm's JVM/PSI indexing actually do under their own hoods.
GPUI
Rope + CRDT
Tree-sitter
WASM extensions
02 ยท the core decision
One decision everything else follows from.
VSCode is a web page that happens to edit code. WebStorm is a JVM application with a text-editing plugin at its center. Zed made a different call at the start: no DOM, no JVM โ native Rust talks to the GPU directly.
Consequence: every layer above this โ the buffer, collaboration, AI, extensions โ gets built on primitives designed for an editor specifically, not adapted from a general-purpose document renderer or a general-purpose managed runtime.
03 ยท GPUI
GPUI โ Zed's own UI framework.
- Every part of the editor's UI โ buffer, tab bar, project panel, settings โ renders through one framework, GPUI, straight to the GPU (Metal on macOS, Vulkan/OpenGL on Linux).
- It's a from-scratch Rust GUI toolkit, not an embedding of an existing browser or native-widget library. Zed's team took that on specifically to control text rendering and input latency end to end, rather than inheriting a general-purpose layout engine's trade-offs.
- GPUI is part of what Zed open-sourced โ it's a real, usable Rust GUI framework other projects can build on, not an internal-only detail.
04 ยท the Rope
The Rope โ how the text is actually stored.
A Rope is a balanced tree of text chunks instead of one giant string or a flat array of lines. Editors have used ropes and piece-tables for this reason for decades โ VSCode's own Monaco editor uses a comparable piece-tree internally.
Insert / deleteO(log n) โ only the path from the edited chunk to the root needs updating, not the whole document.
Large filesOpening a huge file doesn't mean loading and re-indexing one massive string on every keystroke.
Zed's twistIts Rope is the foundation the CRDT layer builds directly on โ see next slide โ so multiplayer isn't a separate system bolted alongside it.
05 ยท the CRDT layer
The CRDT layer โ how concurrent edits actually merge.
Zed's own engineering blog documents this directly: buffers are an operation-based CRDT (Conflict-free Replicated Data Type) โ the same family of data structure Figma uses for multiplayer design.
โ Lamport timestamps
Every edit gets a logical clock value, so replicas agree on a consistent ordering of concurrent operations without needing a synchronized wall clock or a central lock.
โ Anchors
Cursor and selection positions are stored as anchors that survive concurrent edits elsewhere in the document โ your selection doesn't silently drift when a collaborator types above you.
SourceDocumented on Zed's own blog ("How CRDTs make multiplayer text editing part of Zed's DNA") โ this isn't a retrofit, it's been the buffer's design since early on.
06 ยท Tree-sitter
Tree-sitter โ integrated by its own inventor.
- Tree-sitter builds an incremental syntax tree โ after an edit, it reparses only the changed region, not the whole file. That's what makes structural highlighting and selection stay instant as files grow.
- Plenty of editors bolt Tree-sitter on afterward (Neovim, and VSCode partially, for some highlighting). Zed's co-founder Max Brunsfeld created Tree-sitter โ the integration was designed alongside the editor, not adapted to fit one built for a different parsing model.
- It powers more than color: structural selection ("select the enclosing function"), code folding, and the syntax context AI features read from.
07 ยท language servers
Language intelligence: the same protocol, a leaner client.
Zed doesn't reinvent language intelligence โ it's an LSP (Language Server Protocol) client, the same protocol VSCode and, for JS/TS, WebStorm ultimately talk to underneath their own tooling.
Where the win actually is: not "better" language servers โ the same ones โ but a host process that dispatches to them over an async runtime instead of routing every completion through a browser's JS event loop or a JVM's plugin dispatch layer.
08 ยท extension model
Extensions โ compiled to WebAssembly, sandboxed.
โ Zed
Extensions compile to WASM and run in a sandbox with a narrow, explicit capability surface โ an extension can't reach arbitrary filesystem paths or spawn arbitrary processes unless the API grants it.
โ VSCode
Extensions are full Node.js processes โ powerful (any npm package, any OS call), but a slow or misbehaving one runs with broad access and can be a real performance or security surface. The move to a separate extension-host process years ago was specifically to keep one bad extension from freezing the UI.
The trade-off is real in both directions: WASM's sandbox is why Zed's extension marketplace is smaller โ some things Node's ecosystem makes trivial are genuinely harder to express safely in a sandboxed WASM API.
09 ยท AI architecture
AI features sit on the same buffer model as everything else.
- Edit predictions and agent-driven changes apply as incremental operations on the Rope/CRDT buffer โ the same primitive a human keystroke or a collaborator's edit uses โ not a full-file string replace.
- That's why streamed AI edits can land while you keep typing elsewhere in the file without the two streams clobbering each other: it's the exact conflict model built for multiplayer, reused for "you and the model editing concurrently."
- Parallel agents (2026) extend this the same way multiplayer does โ multiple concurrent operation streams, one buffer, one merge model.
10 ยท process model
Process model, side by side.
| Zed | VSCode | WebStorm / IntelliJ |
| One native multi-threaded Rust process | Chromium renderer process + Node.js extension-host process + child LSP processes | One JVM process hosting the whole IDE, plugins included, + child LSP/build processes |
| Rust's ownership model โ no GC, no data races by construction | V8 garbage collector (JS) + Node's own GC in the extension host | JVM garbage collector, sized to hold the project's semantic index in memory |
11 ยท VSCode internals
VSCode's model, in more detail.
- Main process (Electron/Node) owns app lifecycle and windows; a renderer process (Chromium) draws the actual UI as a web page โ real DOM, real CSS layout, a real browser paint/composite pipeline doing the work of displaying text.
- The extension host runs as its own Node.js process specifically so a slow extension can't block the UI thread โ this separation was added after early VSCode versions ran extensions in-process and paid for it in jank.
- The genuine strength this buys: any npm package is a viable extension dependency, which is a huge reason VSCode's marketplace dwarfs everyone else's.
12 ยท WebStorm internals
WebStorm's model, in more detail.
- Built on the IntelliJ Platform (JVM). On opening a project, it builds PSI (Program Structure Interface) โ a full semantic tree of the codebase, not just syntax โ which is why indexing takes a visible moment on a large project.
- That upfront index is exactly what powers WebStorm's deepest party trick: instant, whole-project "Find Usages," safe rename, and structural refactors that don't rely on a language server answering fast enough on demand.
- The cost is memory and startup: a JVM heap sized to hold that index, and a GC that has to manage it. Recent IntelliJ Platform versions have pushed real rendering improvements, but the core model โ JVM process, semantic index in memory โ hasn't changed.
13 ยท rendering pipeline
Rendering pipeline, compared.
โก
Zed
Rust โ GPUI โ GPU compositor. One purpose-built path.
vs
๐
VSCode
JS/TS โ DOM โ CSS layout โ Chromium paint โ compositor. A full browser engine, repurposed.
vs
โ
WebStorm
Java โ Swing/AWT (with newer partial GPU-assisted text rendering) โ platform window.
Every one of these can render text correctly. The difference shows up in how many general-purpose layers sit between a keystroke and the pixel changing.
14 ยท ownership model, concretely
Where Rust's ownership model pays off concretely.
- No garbage-collector pause stalling a keystroke mid-frame โ memory is freed deterministically as values go out of scope, not on a GC's own schedule.
- Data races caught at compile time โ this matters most exactly where it's hardest to get right by hand: a multiplayer buffer being mutated by your keystrokes, a collaborator's edits, and a streaming AI response, all at once.
- This is a genuine language-level advantage, not marketing โ it's also why a Rust rewrite is a multi-year bet, and why most editors don't attempt it.
15 ยท threading model
Keeping the UI thread free.
GPUI runs on an async executor: LSP requests, file I/O, git status, and AI calls all get pushed to background tasks, with only the result posted back to update the UI. The rendering thread's job stays narrow โ draw the current state โ instead of also waiting on a language server or a network call.
Contrast: in a single-process JVM IDE or a browser renderer, a slow synchronous call in the wrong place can visibly stall typing โ this is the class of bug both Electron and IntelliJ ecosystems have spent years hardening against with their own async patterns.
16 ยท full comparison
The full comparison, in one table.
| Layer | Zed | VSCode | WebStorm |
| Language | Rust | TypeScript / JS (Node), C++ | Java / Kotlin (JVM) |
| UI framework | GPUI (own, GPU-native) | Chromium (DOM/CSS) | Swing/AWT + IntelliJ Platform |
| Text structure | Rope + CRDT | Piece-tree (Monaco) | Custom document model + PSI |
| Parsing | Tree-sitter (native) | Tree-sitter (partial) / TextMate grammars | PSI (semantic, project-indexed) |
| Extensions | WASM, sandboxed | Node.js process, broad access | JVM plugins, broad access |
| Collaboration | Built-in (CRDT) | Live Share (extension) | Code With Me (plugin) |
| Startup cost | Process launch | Browser boot + ext-host boot | JVM boot + project indexing |
17 ยท why this matters
Why any of this matters day to day.
- Latency you can't measure but immediately feel every time you type is the Rope + GPUI stack, not a coincidence.
- A pairing session that never says "please wait, syncing" is the CRDT layer, not luck.
- A laptop that runs cooler with the editor open all day is fewer processes doing overlapping work, not a fluke.
- An AI suggestion streaming in without stomping what you're typing next to it is the same conflict-merge model multiplayer uses.
None of this requires knowing any of the above to benefit from it โ but knowing it is why the trade-offs on the honest-caveats slide are worth accepting for what you get back.
18 ยท closing
That's the mechanism. Go feel it.
Benchmarks and architecture diagrams only go so far โ the honest test is opening your own real project and typing in it for a week.