YouTube Summaries

← All summaries

Rating TJ's Neovim GUI: is it a GUI or still a TUI?

2026-09-12 Sat ⏱ 39 min theprimeagen

A Standup segment where TJ DeVries demos a GUI front-end he built for Neovim over roughly ten days, and Casey Muratori, trash and Prime rate how much of a real GUI it actually is on a 0 (TUI) to 10 (GUI) scale. The premise comes from Casey's earlier complaint that a grid of text with popups is not a GUI — you need arrows, layering, things a terminal physically cannot draw.

The architecture

Neovim can run headless and hand its state to an embedding process, receiving events back — a long-standing design goal (FireNvim embedded Neovim inside web text boxes the same way). TJ's front-end is written with GPUI, Zed's immediate-mode Rust UI library, plus a Bun/TypeScript subsystem for widgets so plugin-level UI hot-reloads without recompiling the editor. Anything that stabilises gets rewritten from JavaScript into Rust. Total language count: C (Neovim), Rust (GPUI layer), TypeScript (widgets), Lua (Neovim config) — four, which Casey enjoys pointing out. TJ freely admits he vibe-coded most of it and cannot explain how it works: "a key feature for not going insane while working with an LLM is you never read what it sends back to you."

The demos

  • Native right-click context menu, useful for rare actions you don't want to memorise a keybinding for, and toggleable back to Neovim's own menu.
  • Floating Markdown preview that is the same buffer — edits in the rendered view propagate live, and vice versa. Renders images, checklists, highlighted code blocks, sequence diagrams and tables. Prime calls this the genuinely useful one: LLMs love tables and sequence diagrams, and tables are effectively unreadable in Vim. Side note from the group: sequence diagrams may be the only durably useful part of UML.
  • A "brain rot simulator" — Subway Surfers, Minecraft loop jumping, soap cutting — floating over the editor, played entirely for the bit.
  • LSP hovers with a connecting leader line to the symbol, and peek views where cursor motion skips the inlined lines.
  • The feature Casey asked for: literal arrows drawn from a symbol to all its references across the file. Impossible in a terminal, and the one thing that moved everyone's rating.
  • A live colour-scheme editor — drag windows, see the whole buffer recolour with no lag, save or revert, with a discard-changes dialog.
  • Doom rendering inside the editor, which Casey dismisses as just a renderer, not GUI integration.
  • A Linear client inside Neovim, and Cursor agent chats synced through a daemon so the same conversation is visible in the editor and in a browser.

The ratings

Casey gives it a 7: the arrows made it feel integrated, but too much of it is popup windows floating over text rather than graphics woven into editing, and there were no animations. trash gives it a 6 for the same reason — everything reads as a modal — and suggests a minimap, which TJ refuses on principle and Casey calls the dumbest feature of all time. Prime gives it a 6, noting the Cursor chat panel is a terminal UI lifted verbatim, and that the most quintessential GUI feature of all is missing: visible user input lag. Casey's running thesis is that usefulness was never the criterion — the point of a GUI is that it does weird things to let you know it's a GUI; minimaps, animated text and delayed typing are all useless or actively anti-useful, which is exactly why they count.

Asides

trash asks whether other editors do this; TJ's guess is that Emacs already has every one of these features, at 0.001 frames per second. The riff that closes the segment: gate reading a Markdown file behind opening Pokémon card packs, so that pulling a legendary forces you to actually read the code — since nobody reads the code anymore.