Lapce — 把编辑器搬到 GPU 上的 Rust 实验
待复核Lapce 是一个用 Rust 从零写、靠 GPU 画画面的代码编辑器。日常类比:VS Code 是把网页技术(HTML/CSS)塞进一个壳里画编辑器;Lapce 跳过浏览器那一层,直接让显卡画字——就像别人开车走高速,它走专修的私人轨道。
形态上它和 VS Code 长得很像(侧边栏 + 编辑区 + 命令面板),但底层栈完全是另一套:
- GUI:Floem(早期用过 Druid,2023 前后被作者团队替换成自研)
- 渲染:wgpu(Rust 跨平台 GPU 抽象,文字 + UI 都走显卡)
- 文本核:Rope(继承自 Xi-Editor,O(log n) 编辑超长文件)
- 插件:WASI(C / Rust / AssemblyScript 编到 WASM 跑沙箱)
- 远程:内置远程开发(类 VS Code Remote),配套 Lapdev 云开发环境
GitHub 约 38.5k star,Apache-2.0,作者 Dongdong Zhou(dzhou121),最新 v0.4.6(2026-01)。
不理解 Lapce,下面这些事都没法解释:
- 为什么 2020 年代还有人重新发明编辑器——VS Code 不香吗
- 为什么 Rust 社区会自己造一个 GUI 框架(Floem),而不是用 Tauri / egui
- 为什么 GPU 渲染对编辑器有意义——人眼读字又不需要 60fps
- 为什么”WASM 插件”这个看起来很潮的方案,其实是为了安全 + 跨语言而不是性能
- 云原生编辑器(Lapdev)和 GitHub Codespaces 思路差在哪
Lapce 想解决的核心矛盾是:VS Code 功能完整但 Electron 太重,Vim 轻但门槛高。它的三板斧:
-
不要浏览器:抛弃 Electron,自己用 wgpu 画。官方宣称常见配置下冷启动可到百毫秒级、静态内存占用约百兆内。代价:每个 widget 都要自己实现,没有 CSS 这种成熟样式系统。
-
不要 JS/TS 写插件:插件用 WASI 跑。任何能编到 WASM 的语言都能写插件,沙箱隔离避免 VS Code 那种”恶意插件偷 token”的问题。代价:生态小,没有 VS Code 数十万插件可用。
-
响应式 UI(Floem):作者参考 SolidJS 的细粒度信号(fine-grained reactivity),让 UI 状态变化只重渲染受影响的那块。类比 React 的 diff 算法——但 Floem 不需要 diff,它知道哪个像素该重画。
三个选择合起来是一个赌注:桌面应用应不应该跳过浏览器栈。Lapce 是这条路上跑得最远的几个项目之一。
案例 1:五分钟装上并打开大文件
Section titled “案例 1:五分钟装上并打开大文件”# macOS / Linux(也可用官网安装包)cargo install --locked lapce# 或: brew install --cask lapce
lapce ./huge.log # 打开 50–100MB 日志,试滚动与搜索第一次打开若卡在 vim 模式:按 i 进入插入,或在设置里关掉 modal editing。这是验证「Rope + GPU 渲染」体感的最小步骤。
案例 2:Floem 替代 Druid 是怎么发生的
Section titled “案例 2:Floem 替代 Druid 是怎么发生的”Lapce 0.1(2021 年)用的 GUI 是 Druid(注意:这是 Xi-Editor 团队的 Rust GUI,不是 Apache Druid 数据库)。Druid 在 2022 年进入 maintenance,Xi 团队转向 Xilem。Lapce 没等,派生出自研 Floem:SolidJS 式 signal、为虚拟滚动/IME 优化、与 wgpu 深度绑定。教训:依赖 framework 要么贡献它,要么准备接管。
案例 3:为什么编辑器需要 GPU 渲染
Section titled “案例 3:为什么编辑器需要 GPU 渲染”卖点不是「人眼觉得更快」,而是大文件 + HiDPI + 特效叠加时不掉帧:10 万行日志滚动、Retina 缩字形、minimap/选区动画在 GPU 上更便宜。CPU 软渲染在「大文件 + 高分屏 + 动画」三者叠在一起时才会明显掉帧——这才是 wgpu 路线的真实动机。
案例 4:WASI 插件与 Rope 文本核
Section titled “案例 4:WASI 插件与 Rope 文本核”WASI 插件理论更好(沙箱、跨语言),但生态稀:作者已会 JS/TS,WASI host API 未全标准化,用户基数远小于 VS Code。文本核 Rope 继承自 Xi——中间插入 O(log n),适合 100MB 级文件;实现复杂度换长期性能。打开巨型日志、频繁局部编辑时,差距比「日常改小文件」明显得多。
案例 5:Lapdev 的定位
Section titled “案例 5:Lapdev 的定位”2024 年团队推出 Lapdev(自托管云开发,对标 Codespaces):数据不出公司、按需启停。很难正面打过绑死 GitHub 生态的 Codespaces,更现实的定位是「在意隐私的中小团队备选」。
-
wgpu 在不同平台表现不一致:Windows DX12、macOS Metal、Linux Vulkan 都有边缘 bug,issue 区常见「某平台字体糊」。GPU 抽象不是免费的。
-
IME 输入法适配难:中日韩输入在 GUI 框架里都是脏活。早期中文输入不稳,Floem 重写后才明显好转。
-
modal editing 默认开:默认 vim-like(按
i插入)。新人常以为软件坏了;后来才加 onboarding 提示。 -
vs Zed:2024 年起 Zed(前 Atom 团队)走类似路线(Rust + GPU + gpui),资源与星标更足。Lapce 处在「先驱但被追赶」的位置。
-
跨平台字体细节:macOS 子像素抗锯齿与 Linux freetype 不同,wgpu 再夹一层,调教是无穷工作量——VS Code 把这层交给 Chromium,Lapce 自己背。
-
插件生态冷启动:即便 WASI 设计漂亮,没有「一键装 Copilot 同类」就很难留住从 VS Code 迁过来的用户。
适用 vs 不适用场景
Section titled “适用 vs 不适用场景”适用:
- 想要轻量原生编辑器(常见配置下约百兆内存量级)的人
- Rust 开发者(lsp-rs / rust-analyzer 集成顺畅)
- 远程开发场景(内置 SSH,不需要装扩展)
- 学习 GUI / 编辑器架构的工程师
不适用:
- 重度依赖 VS Code 插件生态(Copilot、Live Share 都没有成熟等价物)
- 团队协同实时编辑(不像 VS Code Live Share / Zed 协作那样成熟)
- 需要图形化调试器(断点 / 变量监视面板还在补齐)
- 只想「装上就能用全家桶」的用户——Lapce 更适合能接受缺插件的人
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- 2021:dzhou121 开源 Lapce 0.1,GUI 用 Druid,定位「Rust + GPU 编辑器」
- 2022-2023:Druid 进入 maintenance;团队派生 Floem,替换整套 UI
- 2024:推出 Lapdev(自托管云开发,对标 Codespaces);Zed 同路线加速追赶
- 2025-2026:继续补 LSP / 远程 / 输入法细节;2026-01 发布 v0.4.6,GitHub 星标约 3.8 万
Rust 桌面 GUI 仍在早期,Lapce 是少数把编辑器产品推到可用的样本。
- 桌面应用不一定要 Electron——wgpu + Rust 能做出百兆量级的原生编辑器
- 依赖一个 framework,要做好接管的准备(Lapce 从 Druid 派生出 Floem 是被迫但正确)
- GPU 渲染卖点不是快,是”大文件 + HiDPI + 特效叠加时不掉帧”
- 生态护城河 > 技术优越性——WASI 插件理论更好但生态没起来
- Rust 桌面 GUI 还在早期——没有”标准选择”,每个项目都在赌
- 今天的价值是路径证明:Lapce 未必替换 VS Code,但证明跳过 Electron、用 Rust + wgpu 做桌面 IDE 能跑通——哪怕生态仍落后于后来者
- 官方 README:github.com/lapce/lapce(功能 + 截图,10 分钟读完)
- Floem 框架:github.com/lapce/floem(看 Rust 怎么搞响应式 UI)
- Xi-Editor 文档(rope 数据结构来源):xi-editor.io/docs.html
- codemirror —— Web 阵营的轻量编辑器(不可变状态 + Facet)
- monaco-editor —— VS Code 的内核(Web Worker + LSP)
- zed —— 同路线的 Rust GPU 编辑器(资源更足)
- ratatui —— Rust TUI(终端版”GUI”,思路有共鸣)
- codemirror —— 同样追求”轻 + 可拼”,但走 Web 路线
- monaco-editor —— Lapce 的”对手”,Electron + TS 路线
- ratatui —— Rust + 终端 UI,和 Lapce 是 Rust GUI 的两端
- zed —— 同路线竞品(Rust + GPU),资源更足
- lite-xl —— 另一条轻量编辑器路线(Lua 扩展,体积极小)
- lite-xl —— Lite-XL — 不到 3MB 的编辑器也能扩展出花样