轻量、快速、专注:我用 Tauri + Rust 打造了一款 5MB 的 Markdown 阅读器

我用 Tauri + Rust 写了一个 5MB 的 Markdown 阅读器,现在支持多标签和编辑了

项目地址:https://github.com/Neilooo/md-reader

最新版本:v0.2.0

下载地址:https://github.com/Neilooo/md-reader/releases/latest

大家好,这是我第一次在 CSDN 正式介绍这个小工具:MD Reader

它是一个用 Tauri 2 + Rust + Vue 3 写的 Markdown 桌面应用。

最初我只是想做一个很简单的东西:

打开 .md 文件要快,渲染要准,导出 PDF 要像看到的一样。

做到 v0.2.0 后,它已经从一个单纯的 Markdown 阅读器,升级成了一个支持 多标签、源码编辑、全文搜索、PDF/HTML/DOCX 导出 的轻量工具。


一句话介绍

MD Reader = 轻量 Markdown 阅读器 + 预览器 + 源码编辑器 + 导出工具。

它不想替代 VS Code,也不想做成 Obsidian 那样的知识库,更不打算做一个复杂的所见即所得编辑器。

它解决的是一个更具体的问题:

我只想快速打开、阅读、搜索、轻量修改、导出 Markdown 文件。


为什么要写这个工具?

日常开发里,我经常会打开这些文件:

  • README.md
  • CHANGELOG.md
  • 接口文档
  • 技术笔记
  • AI 生成的 Markdown 内容
  • 带 Mermaid / KaTeX / 代码块的说明文档

常见工具都能用,但不一定刚好:

工具 问题
VS Code 功能很强,但为了看一个 md 启动 IDE 有点重
Typora 写作体验好,但闭源收费,定位偏写作
Obsidian 适合知识库,但对单文件阅读来说偏重
浏览器扩展 本地文件、相对图片、公式、图表、导出经常不稳定
记事本 只能看纯文本,复杂 Markdown 没法读

所以我想做一个更轻的工具:

  • 双击 .md 就能打开
  • 启动快
  • 安装包小
  • 公式、图表、代码块正常渲染
  • 支持文件夹浏览和全文搜索
  • 可以导出所见即所得的 PDF
  • 偶尔需要时能直接改几行 Markdown

这就是 MD Reader 的出发点。


先看界面

主界面:多标签 + 文件树 + 阅读区 + 大纲

编辑模式:CodeMirror 源码编辑

公式和图表渲染

导出效果

暗色主题

---

v0.2.0 现在支持什么?

1. 多标签页

v0.2.0 加入了多标签页。

现在可以同时打开多个 Markdown 文件:

  • 顶部标签栏切换文件
  • 中键关闭标签
  • 重复打开同一个文件时,直接聚焦原标签
  • 有未保存修改的标签会显示提示圆点
  • 应用重启后恢复上次打开的标签列表

每个标签都独立保存状态:

  • 文件路径
  • 原始内容
  • 未保存草稿
  • 编辑 / 预览模式
  • 大纲
  • 滚动位置

这意味着你可以在 A.md 读到一半,切到 B.md 改几行,再切回来,A.md 仍然停在原来的阅读位置。


2. Markdown 源码编辑

MD Reader 不是 Typora 那种所见即所得编辑器。

我给它的定位是:

轻量源码编辑,够用就好。

编辑器使用 CodeMirror 6,支持:

  • Markdown 语法高亮
  • 行号
  • 折叠
  • 括号匹配
  • 查找
  • 替换
  • 跳转行
  • 手动保存
  • 另存为

常用快捷键:

快捷键 功能
Ctrl+F 查找
Ctrl+H 替换
Ctrl+G 跳转行
Ctrl+S 保存当前文件
Ctrl+Shift+S 另存为
Ctrl+Shift+F 全文搜索
Ctrl+P 系统打印 / 另存为 PDF

编辑后可以直接切回预览,不需要先保存。

这个体验很适合临时修改 README、笔记、说明文档。


3. 未保存修改保护

既然支持编辑,就必须保证用户内容不丢。

现在这些场景都会触发保护:

  • 关闭脏标签
  • 关闭窗口
  • 切换文件
  • 关闭文件夹
  • 文件在外部被修改

弹窗会让你选择:

  • 保存并继续
  • 不保存继续
  • 取消

如果有多个未保存标签,关闭窗口时会逐个确认。

这块看起来只是一个小弹窗,实际实现并不简单。

因为多标签以后,不能再只维护一个全局 currentFile,而是每个标签都有自己的草稿和状态。


4. 文件树、大纲和全文搜索

MD Reader 支持打开一个文件夹,然后递归扫描其中的 Markdown 文件。

常用场景:

  • 浏览项目文档
  • 搜索笔记目录
  • 阅读一组技术文档
  • 查看 AI 生成的一批 Markdown 文件

支持:

  • 左侧文件树
  • 右侧 TOC 大纲
  • 大纲滚动同步高亮
  • 内部 Markdown 链接跳转
  • Ctrl+Shift+F 跨文件全文搜索

全文搜索是 Rust 后端做的,直接逐行扫描文件,响应很快。


5. PDF / HTML / DOCX 导出

目前支持三种导出:

格式 说明
HTML 自包含单文件,图片和 CSS 内嵌
PDF 调用系统 Edge / Chrome headless,所见即所得
DOCX 通过 pandoc 导出

其中我最重视的是 PDF。

因为很多 Markdown 文档最终还是要发给别人,PDF 是最通用的格式。


PDF 导出为什么不用 pandoc + LaTeX?

一开始我也试过 pandoc + xelatex。

结果并不理想:

  • 慢,一个几十 KB 的文档可能要 30 秒以上
  • KaTeX 公式风格会变
  • Mermaid 图表不稳定
  • 代码高亮样式很难和预览保持一致

后来改成现在的方式:

前端已经把 Markdown 渲染好了,就直接让 Edge/Chrome 打印这个页面。

流程大概是:

  1. 前端克隆已经渲染好的 DOM
  2. 图片转成 base64
  3. 内嵌 CSS、KaTeX、代码高亮样式
  4. Rust 写出临时 HTML
  5. 调用 Edge / Chrome headless 打印 PDF
  6. 把生成的 PDF 拷贝到用户选择的位置

好处很明显:

  • 速度通常 1-3 秒
  • 所见即所得
  • 不需要 LaTeX
  • 公式、图表、代码块更接近预览效果

最近还修了一个 PDF 导出的边界问题:

某些 Edge 环境下,Edge 主进程返回成功后,PDF 文件会稍晚一点落盘。之前代码立刻检查文件是否存在,可能误报"PDF 未生成"。

现在改成:

Edge 返回成功后最多等待 10 秒,确认 PDF 文件真正生成并达到有效大小后再复制。

这样稳定性更好。


为什么选择 Tauri?

这个项目选择的是 Tauri 2,而不是 Electron。

原因很直接:我想要小体积和快启动。

对比项 Tauri Electron
安装包体积 几 MB 级 常见几十到上百 MB
内存占用 使用系统 WebView,较低 自带 Chromium,较高
后端能力 Rust Node.js
启动速度 相对慢
原生集成 需要写 Rust Node 生态更方便

MD Reader 这种工具类应用,不需要内置一整个 Chromium。

Tauri 更适合它的定位:

小、快、专注。


技术栈

目前主要技术栈:

  • 桌面框架:Tauri 2
  • 后端:Rust
  • 前端:Vue 3 + TypeScript + Vite
  • 编辑器:CodeMirror 6
  • Markdown 渲染:markdown-it
  • 公式:KaTeX
  • 图表:Mermaid
  • 代码高亮:highlight.js
  • 文件监听:notify + notify-debouncer-mini
  • 全文搜索:walkdir + Rust 逐行扫描
  • PDF 导出:Edge / Chrome headless
  • DOCX 导出:pandoc

安装和下载

项目地址:

https://github.com/Neilooo/md-reader

最新版本下载:

https://github.com/Neilooo/md-reader/releases/latest

Windows(正式版)

文件 说明
MD-Reader-0.2.0-windows-x64-setup.msi 安装版,支持文件关联
MD-Reader-0.2.0-windows-x64-portable.exe 绿色版,下载后直接运行

普通用户建议下载 MSI 安装版。

安装版会注册 .md / .markdown / .mdx 文件关联,之后可以直接双击 Markdown 文件打开。

macOS / Linux(实验版)

v0.2.0 开始,GitHub Actions 会自动生成 macOS / Linux 实验包。

平台 文件
macOS .dmg / .app.tar.gz
Linux .AppImage / .deb / .rpm

注意:这些包目前没有代码签名。

macOS 首次打开可能需要右键 → 打开,或者执行:

bash 复制代码
xattr -dr com.apple.quarantine "MD Reader.app"

Linux AppImage 需要先赋予执行权限:

bash 复制代码
chmod +x MD.Reader_0.2.0_amd64.AppImage

外部依赖说明

核心功能不需要额外安装工具。

功能 是否需要外部工具
阅读 / 编辑 / 多标签 不需要
文件树 / 全文搜索 不需要
KaTeX / Mermaid 渲染 不需要
HTML 导出 不需要
PDF 导出 需要系统 Edge / Chrome
DOCX 导出 需要 pandoc

如果你只用来阅读、编辑、搜索、导出 HTML / PDF,基本开箱即用。

只有 DOCX 导出需要单独安装 pandoc。


它适合谁?

我觉得 MD Reader 适合这些场景:

  • 经常打开 README / CHANGELOG / 技术文档
  • 不想为了看一个 .md 文件启动 VS Code
  • 需要正确渲染公式和 Mermaid 图表
  • 希望快速导出一份所见即所得 PDF
  • 想要轻量工具,而不是完整知识库系统
  • 偶尔需要直接改几行 Markdown

它不适合这些场景:

  • 你需要复杂的所见即所得排版
  • 你需要双链笔记、知识图谱、插件系统
  • 你需要团队协作、云同步
  • 你已经完全依赖 VS Code / Obsidian / Typora 工作流

它的定位很明确:

轻量、快速、专注的 Markdown 桌面工具。


后续计划

后面可能会继续做:

  • 图片点击放大
  • 更细的导出样式设置
  • 自定义 CSS 主题
  • 标签页右键菜单
  • 命令面板
  • macOS / Linux 稳定性验证
  • 自动更新

暂时不会优先做:

  • 所见即所得编辑器
  • 插件系统
  • 知识库 / 双链笔记
  • 云同步

因为这些方向会把工具变重。

MD Reader 还是希望保持小而快。


总结

MD Reader 目前已经可以覆盖我自己的日常使用:

  • 快速打开 Markdown
  • 浏览文件夹文档
  • 多标签切换
  • 简单编辑
  • 全文搜索
  • 导出 PDF / HTML / DOCX

如果你也经常和 Markdown 文档打交道,可以试试看。

项目地址:

https://github.com/Neilooo/md-reader

如果觉得有用,欢迎 Star,也欢迎提 issue 反馈使用场景。


本文基于 MD Reader v0.2.0 编写。