落笔的技术栈:为本地写作设计的桌面应用
落笔 Loby 是一款本地优先的专业写作应用。它结合了桌面应用的本地能力和现代前端的交互体验,让文章可以直接保存在用户自己的电脑中,同时保持 Markdown 文档的开放性和可迁移性。
Loby 使用的主要技术包括:
Tauri 2 + Rust + TypeScript + React 19 + CodeMirror 6
这些技术各自负责不同的部分,共同组成 Loby 的编辑、文件管理、AI 协作和发布能力。
Tauri 2:桌面应用框架
Section titled “Tauri 2:桌面应用框架”Loby 使用 Tauri 2 构建桌面应用。
Tauri 负责创建应用窗口,并连接文件系统、系统菜单、应用更新和其他操作系统能力。它让 Loby 既拥有桌面应用的本地体验,又可以使用现代 Web 技术构建界面。
简单来说,Tauri 是 Loby 的桌面外壳,负责连接用户界面和操作系统。
Rust:负责本地能力
Section titled “Rust:负责本地能力”Loby 的原生层使用 Rust 编写。
Rust 主要负责需要稳定性、安全性和本地权限的工作,包括:
- 读取、保存和监听 Markdown 文件
- 管理写作库、项目、分组和文稿
- 建立本地全文搜索索引
- 处理图片和其他写作资源
- 管理 AI Provider、工具和 MCP 连接
- 执行发布、上传和系统级操作
- 保存敏感凭证和处理应用更新
前端不会直接操作这些底层能力,而是通过 Tauri 提供的 command 和 event 与 Rust 通信。这样可以让界面逻辑和本地业务保持清晰分工。
TypeScript + React:构建用户界面
Section titled “TypeScript + React:构建用户界面”Loby 的前端使用 TypeScript 和 React 19。
React 负责构建写作库、文稿列表、编辑器、AI 助手、设置页面、历史记录和发布界面等内容。
TypeScript 为这些界面和业务逻辑提供明确的数据类型。例如,一篇文稿有哪些属性、一个项目可以执行哪些操作、Rust 返回的数据应该是什么格式,都可以在开发阶段提前检查。
Loby 的前端按照产品功能组织代码。编辑器、写作库、AI、发布和设置等能力各自保持边界,再通过清晰的接口进行协作,便于维护和持续扩展。
CodeMirror 6:提供编辑器体验
Section titled “CodeMirror 6:提供编辑器体验”Loby 的 Markdown 编辑器使用 CodeMirror 6。
CodeMirror 是专门用于代码和结构化文本编辑的编辑器框架,负责处理:
- 键盘输入
- 光标和选区
- 撤销与重做
- 查找和替换
- 中文输入法
- Markdown 语法识别
- 长文档编辑性能
- 快捷键和编辑器扩展
Loby 在 CodeMirror 的基础上加入了标题、列表、表格、任务列表、图片、脚注、代码块等 Markdown 交互,因此形成了自己的即时渲染 Markdown 编辑体验。
AI 协作运行时
Section titled “AI 协作运行时”Loby 的 AI 能力由前端界面和 Rust 原生运行时共同完成。
前端负责展示对话、输入请求和审阅结果;Rust 负责连接不同的模型服务、管理工具调用、处理权限和保护敏感凭证。
这样的分工可以让 AI 成为写作助手,而不是取代编辑器本身。文章仍然保存在本地 Markdown 文件中,AI 产生的修改也需要经过用户审阅和决定。
Markdown 文件:内容的事实来源
Section titled “Markdown 文件:内容的事实来源”Loby 的一个重要原则是:
Markdown 文件是文章内容的事实来源。
用户的文章保存在本地写作库中。Loby 的索引、缓存和运行状态只是为了提高加载和搜索效率,并不取代原始文稿。
这意味着:
- 离开 Loby 后,文章仍然可以被其他工具读取。
- 用户可以直接管理和备份自己的 Markdown 文件。
- 应用内部的数据结构变化,不应影响文章本身的可迁移性。
- 写作内容始终掌握在用户自己手中。
一套技术栈,各自负责一件事
Section titled “一套技术栈,各自负责一件事”Loby 的技术栈并不是简单堆叠各种工具,而是按照职责进行分层:
- Tauri 负责桌面应用边界。
- Rust 负责本地能力和安全操作。
- React 负责用户界面和交互。
- CodeMirror 负责高质量文本输入。
- Markdown 文件负责保存用户真正拥有的内容。
这种架构让 Loby 同时具备桌面应用的本地能力、现代前端的交互体验,以及 Markdown 文档的开放性和可迁移性。