开发笔记
为什么做 Glim:少装几个查看文件的 App
用 Rust、GPUI 和 macOS 原生预览做一个多格式文件查看器,说明实现取舍、基础编辑和格式边界。
Agent 做完一项任务,留下 Markdown 报告、JSON 响应、CSV 导出,还有几张截图。要检查这些产出,往往得打开编辑器、表格软件、图片查看器,再找个能渲染 Markdown 的工具。文件都在同一个目录里,查看它们的 App 却散在各处。
我们做 Glim,就是想少一点这样的切换:在一个 Mac App 里打开这些文件,直接看内容。适合阅读的文档就渲染出来,需要核对细节时就看源码,碰到一个错别字或配置值,也能顺手改掉。
AI 让这种需求变得更常见,但文件不必来自 Agent。下载的数据集、项目目录、参考文档,也会遇到同样的问题。

统一工作空间,保留格式差异
PDF 和 JSON 不需要相同的界面。值得统一的是打开文件、标签页、导航、搜索,以及查看操作出现的位置。内容区域则应该按照文件格式来组织。
- Markdown 渲染正文、图表和公式,也保留源码视图。
- JSON 提供可展开的树;CSV、TSV 提供表格视图,并可回到原始内容。
- PDF、图片和支持的 Office 文档使用各自的预览方式。
- SQLite 提供用于浏览本地数据表的只读快照,不承担数据库管理控制台的职责。
“支持一种格式”需要讲清具体能力。CSV 表格视图没有电子表格的计算引擎;Office 预览不能保证原应用的完整排版,也不能代替编辑;EPUB 阅读也有出版商 CSS 和固定版式方面的限制。我们把这些差异写进了格式支持说明,方便下载前核对。
为什么选择 Rust 和 GPUI
Rust 的所有权机制、明确的数据结构和编译检查,有助于管理文件缓冲区、后台任务和阅读器状态的生命周期。用 Agent 辅助开发时,编译器也能给每一轮修改提供具体约束。当然,编译通过不代表解析一定正确、保存一定安全,更不代表界面交互已经验证过。
GPUI 和 GPUI Kit 负责工作空间、标签页、文件导航和共享控件。阅读器实体会跨渲染保留,界面重绘时不需要重新建立整份阅读状态。
代码按一个简单的依赖方向划分:
glim-app → glim-services → glim-core
└──────────────────→ glim-core
core 管理数据和解析逻辑,不依赖 GPUI,也不做 I/O;services 处理文件系统、文件监听和格式处理,不引入界面;app 展示结果并协调交互。阻塞式文件操作放到后台执行器,渲染方法使用已有状态,不在重绘时扫描目录或执行命令。
macOS 已经有的能力,就接进来
Glim 将 Rust/GPUI 工作空间与 Swift/AppKit 阅读器组合使用。PDF 展示交给 PDFKit,图片准备使用 ImageIO,部分文档渲染使用 WebKit。这些视图嵌在同一个工作空间里,不必为每种格式再打开一个独立应用窗口。
这样可以复用平台已有的阅读能力,也要接受平台边界:Office 排版和媒体编解码支持取决于 macOS;原生视图的生命周期、焦点和操作,需要与 GPUI 外层协调。
阅读器的操作通过共享 action 定义,再用于工具栏和内容菜单。不同格式可以提供自己有顺序的控件,无需各自维护一套互相偏离的菜单规则。更具体的职责划分见架构文档。
大文件要换一种读法
先把整个文件读进内存,再考虑如何显示,并不适合作为查看器的默认策略。Glim 的非 Git 阅读器采用流式读取、分页、受控的内容投影和按需解码。很大的文本可以分页阅读;图片预览可以先准备缩略图,避免在 Rust 缓冲区里解码整张原图。
文件总大小与当前正在处理的数据量,需要分别考虑。渲染投影、解码缓冲区可以有预算,同时通过回退视图保留对原始内容的访问。这不代表每种格式都能无限制地完整渲染,各条路径的策略也有差别;Git/diff 处理仍有单独的约束。
应用层的阅读预算集中在一份共享策略文件里,生成 Rust、Swift 和图表渲染需要的值。阅读策略说明记录了这些预算分别影响什么。
保留基础编辑,说明只读边界
检查产出时,有时需要改一个字或调整一个值。普通 UTF-8 文件支持基础编辑、撤销重做、自动保存和显式保存。大型分页文本、图片、diff 和文档预览仍然只读。我们不打算为这个查看场景引入 LSP、插件市场或完整 IDE 工作流。
源码中也有 Git 工作空间能力,不过本文对应版本的 Git 导航入口处于隐藏状态,因此这里不把它当作下载安装后的主要体验来介绍。
用一个已有的目录试试
找一个包含 README、数据文件、PDF 或图片的小项目目录,看看把它们放在同一个窗口里,是否能减少你平时的来回切换。如果缺少某种格式,或某个文件预览有问题,一份可以公开分享的样例,比笼统地说“支持所有格式”更有助于改进。
Glim 免费、采用 MIT 许可,目前维护 macOS Apple Silicon 和 Intel 两个平台版本。DMG 使用临时签名,尚未经过 Apple 公证;首次启动被系统拦截时,请按发布页中的安装说明处理。原生预览有格式边界,Glim 不提供完整的 Office 编辑,也不能覆盖所有专业软件的用途。