Skip to content

Latest commit

 

History

History
374 lines (275 loc) · 15.5 KB

File metadata and controls

374 lines (275 loc) · 15.5 KB

产品需求文档 (PRD):Typist — 本地 Markdown 编辑器

版本: v0.1
更新日期: 2026-04-01
目标平台: Windows(MVP),后续规划 macOS / Linux


1. 产品概述

1.1 产品愿景

打造一款基于 Tauri + React 的现代化本地 Markdown 编辑器。核心追求"所见即所得(WYSIWYG)"的沉浸式写作体验,同时通过底层插件 API 实现深度定制,达成轻量级与高扩展性的平衡。

1.2 目标用户

用户画像 核心诉求
重度写作者 追求无干扰的沉浸式写作环境,抵触"左编辑右预览"的割裂感
开发者 / 技术人员 高频编写技术文档,依赖代码高亮、Mermaid 图表、数学公式等扩展语法
极客玩家 喜欢折腾工具,希望通过编写插件来定制编辑器工作流

1.3 竞品分析与差异化

维度 Typora Obsidian Mark Text Typist
架构 Electron Electron Electron Tauri (Rust)
内存占用 ~200MB ~300MB+ ~250MB 目标 <80MB
WYSIWYG 优秀 无(实时预览) 良好 优秀
插件系统 强大 开放 API
开源
许可 付费 部分付费 免费 免费开源

核心差异化: Tauri 驱动的极低资源占用 + Typora 级 WYSIWYG 体验 + Obsidian 级插件扩展能力。


2. 技术架构

2.1 技术选型

层级 技术 选型理由
前端框架 React (TypeScript) 生态成熟,与 Milkdown 原生集成
编辑器引擎 Milkdown (ProseMirror) 原生 WYSIWYG + 插件化架构
状态管理 Zustand 轻量、跨组件/插件状态同步
桌面框架 Tauri (Rust) 极速启动、低内存、原生文件系统访问
构建工具 Vite 快速 HMR,与 React/Tauri 集成良好

2.2 Markdown 标准

  • 基础语法:CommonMark 规范
  • 扩展语法:GFM (GitHub Flavored Markdown) — 表格、任务列表、删除线、自动链接
  • 额外扩展(通过内置插件):Mermaid 图表、KaTeX 数学公式、脚注

3. 核心功能需求(P0 — MVP 阶段)

MVP 目标:用户能够用 Typist 打开、编辑、保存 Markdown 文件,获得流畅的 WYSIWYG 体验。

3.1 WYSIWYG 编辑体验

功能 描述 验收标准
实时渲染 输入 Markdown 语法后,光标移开即转为富文本视图 # ** ` - 等标准语法均可触发
源码模式切换 快捷键在 WYSIWYG 与纯文本源码模式间无缝切换 切换后光标位置保持对应
Undo / Redo 完整的撤销/重做栈 支持 Ctrl+Z / Ctrl+Shift+Z,跨渲染模式状态一致

3.2 Markdown 全语法支持

块级元素:

  • 标题(H1-H6)
  • 有序/无序列表、任务列表(GFM - [ ]
  • 引用块、嵌套引用
  • 代码块(带语言标识的语法高亮)
  • 表格(GFM 语法,支持可视化拖拽调整列宽)
  • 水平分割线
  • 脚注

行内元素:

  • 粗体、斜体、删除线、行内代码
  • 链接、图片
  • 自动链接(GFM)

3.3 进阶内容渲染

功能 实现方式
多语言代码高亮 支持主流编程语言,提供一键复制按钮
Mermaid 图表 ```mermaid 代码块失去焦点后渲染为流程图/时序图,点击可回退到源码编辑
KaTeX 数学公式 $...$ 行内公式 + $$...$$ 块级公式,实时渲染
本地图片处理 拦截剪贴板粘贴,通过 Tauri Rust 接口存入 .assets/ 目录,文档中插入相对路径

3.4 本地文件管理

功能 描述
文件打开/保存/另存为 通过 Tauri IPC 调用原生系统对话框
自动保存 编辑后自动保存到原文件,可配置间隔(默认 30s),支持关闭
外部修改检测 监听文件变动,外部修改后提示用户重新加载或保留当前版本
最近文件列表 记录最近打开的文件(上限 20 条),支持快速打开
多标签页 支持同时打开多个文件,标签页可拖拽排序,未保存文件显示标记

3.5 极简 UI 设计

功能 描述
无边框窗口 自定义可拖拽标题栏,支持最大化/最小化/关闭
隐藏式侧边栏 默认隐藏,鼠标悬停边缘或快捷键呼出文档大纲
隐藏式状态栏 底部状态栏显示字数统计、光标位置、编码格式
亮色/暗色主题 默认跟随系统,支持手动切换

3.6 快捷键体系

操作 快捷键
保存 Ctrl+S
另存为 Ctrl+Shift+S
打开文件 Ctrl+O
新建文件 Ctrl+N
关闭标签 Ctrl+W
切换源码模式 Ctrl+/
搜索 Ctrl+F
替换 Ctrl+H
加粗 Ctrl+B
斜体 Ctrl+I
插入链接 Ctrl+K
呼出大纲 Ctrl+Shift+O
呼出命令面板 Ctrl+Shift+P

3.7 搜索与替换

  • 当前文档内搜索/替换,支持正则表达式
  • 高亮所有匹配项,显示匹配计数
  • Enter 跳转下一个 / Shift+Enter 跳转上一个

4. 增强功能需求(P1 — 核心扩展阶段)

4.1 插件系统架构

4.1.1 插件生命周期

register → activate → (enable / disable) → deactivate → destroy
  • 提供统一 Event Bus,插件可监听核心事件:onFileOpenonDocumentChangeonSaveonThemeChange
  • 插件通过声明式 manifest.json 注册元信息(名称、版本、依赖、权限声明)

4.1.2 UI 插槽机制

插槽 用途 示例
SidebarSlot 侧边栏扩展 文件树插件、目录大纲插件
ToolbarSlot 顶部工具栏扩展 格式化按钮、导出按钮
StatusBarSlot 底部状态栏扩展 字数统计、阅读时间预估
EditorFloatSlot 编辑器浮动层 悬浮工具条、AI 补全面板

4.1.3 编辑器语法扩展

暴露 Milkdown / ProseMirror 底层 API,允许插件:

  • 注册自定义 NodeMark
  • 定义自定义输入规则(InputRules)
  • 接管特定节点的渲染逻辑(NodeView)

4.1.4 插件安全

  • 插件运行在受限沙箱中,文件系统访问需声明权限
  • 内置插件与第三方插件权限隔离

4.2 高级编辑功能

功能 描述
焦点模式 当前编辑段落高亮,淡化上下文
打字机模式 当前行始终垂直居中
文件树 / 工作区 以文件夹为单位打开工作区,树形浏览和管理文件
全局搜索 跨文件搜索(工作区范围)
导出 支持导出为 PDF、HTML(通过 Tauri 调用系统打印接口或内置转换)

4.3 其他 P1 功能

  • 自定义 CSS 主题
  • 编辑器字体/字号配置
  • 多窗口支持

5. 非功能性需求

5.1 性能指标

指标 目标值
冷启动时间(Windows) < 1s
静态待机内存 < 80MB
万字长文编辑内存 < 150MB
万字文档加载时间 < 1.5s
滚动帧率 稳定 60fps
自动保存写入延迟 < 100ms

5.2 安全性

  • 文件系统隔离: 通过 Tauri FS Scope 限制访问范围,仅允许访问用户授权目录和当前编辑文件所在目录
  • XSS 防护: 严格过滤 Markdown 中嵌入的 HTML 标签,防止富文本渲染引入 XSS
  • 插件隔离: 第三方插件在受限环境中运行,无法越权访问文件系统

5.3 数据安全

  • 崩溃恢复: 维护编辑中文档的临时备份,异常退出后下次启动可恢复
  • 保存冲突处理: 外部修改与本地修改冲突时,提供对比选择界面

5.4 自动更新

  • 集成 Tauri 内置更新机制,支持静默检查更新 + 用户确认安装

5.5 日志与诊断

  • 应用运行日志写入本地文件,用于排查问题
  • 错误上报(可选开启),收集崩溃堆栈

6. 项目里程碑

6.0 当前阶段状态(截至 2026-04-01)

阶段 当前状态 说明
Phase 1:技术验证 已完成(4/4) Tauri + React + Milkdown 基础能力与文件流转闭环已打通
Phase 2:MVP 开发 已完成(8/8) 核心编辑、渲染、文件管理、快捷键、搜索替换等能力已接入
Phase 3:插件系统 已完成(5/5) 插件管理、UI 插槽、SDK、文档与 manifest 导入激活流程已接入
Phase 4:体验打磨 基本完成(6/6) 工作区、导出、恢复、更新、主题配置等已接入,稳定性仍需持续验证

Phase 1:技术验证

目标: 跑通核心技术栈,验证可行性

  • 搭建 Tauri + React + Vite 工程脚手架
  • 集成 Milkdown,实现基础 Markdown 输入与 WYSIWYG 渲染
  • 实现无边框窗口 + 自定义标题栏
  • 通过 Tauri IPC 完成文件打开/保存
    • 后端状态与命令:实现文件读取、保存、另存为及数据流映射
    • 前端交互绑定:UI 触发并完整流转文件内容到编辑器

验收标准: 能打开 .md 文件,编辑后保存,基础 WYSIWYG 渲染正常。

当前结论: 已通过验证,前端完整闭合了文件系统流转。

Phase 2:MVP 开发

目标: 可日常使用的最小可用版本

  • 完善 GFM 全语法支持(表格、任务列表、删除线)
  • 集成代码高亮、Mermaid 渲染、KaTeX 公式
    • 前端:接入对应的 Milkdown 交互插件与渲染组件
    • 前端:通过内置 advanced-render 插件补齐代码块复制、Mermaid 点击回退源码编辑与图片粘贴插入路径
  • 实现多标签页、自动保存、最近文件列表
    • 后端:多标签状态管理、脏标记更新、自动保存配置维护及近期文件落盘
    • 前端:多标签栏 UI 切换、保存轮询调度机制展现
  • 实现搜索/替换功能
    • 后端:高功能正则与文本匹配逻辑
    • 前端:呼出式浮动搜索/替换面板 UI 交互
  • 实现源码模式切换
    • 前端:双向绑定无缝切换逻辑(富文本 vs 纯文本引擎)
  • 本地图片粘贴处理(.assets/ 目录)
    • 后端:安全过滤拦截,处理 base64 落盘并返回相对路径
    • 前端:拦截 paste 事件提取图像并上传调用
  • 亮色/暗色主题
    • 后端:设置持久化选项
    • 前端:已支持 CSS 主题变量体系与可视化的 Settings 设置中心
  • 完善快捷键体系
    • 前端:绑定全局指令快捷操作 (Ctrl+S, Ctrl+O, Ctrl+F 等)

验收标准: 能完全替代 Typora 完成日常 Markdown 编辑工作,性能指标达标。

当前结论: 基本通过。目前已具备生产可用的多标签及多格式解析能力。

Phase 3:插件系统

目标: 开放扩展能力

  • 实现 Plugin Manager
    • 后端:生命周期调度(加载/销毁)、注册、事件总线与沙盒权限检查
    • 前端:插件集市与管理(启用/禁用)可视化面板
    • 前端:Load Plugin 支持读取 manifest 并自动完成注册、激活与脚本注入
  • 实现 UI 插槽机制
    • 前端:提供侧边栏、状态栏、顶部工具栏的 React Hook 挂载点
  • 暴露 Milkdown/ProseMirror 扩展 API
    • 后端:通过 IPC 对插件暴漏底层 API 支持
    • 前端:封装基于编辑器的操作上下文环境
  • 将"字数统计"和"大纲视图"重构为内置插件,验证插件架构
    • 前后端联调:抽离为标竿官方插件
  • 编写插件构建文档
    • 文档:docs/PLUGIN_BUILD.md(manifest 规范、构建产物要求、加载与调试流程)

验收标准: 第三方开发者可根据文档独立开发并加载插件。

Phase 4:体验打磨

目标: 精细化用户体验

  • 焦点模式、打字机模式
    • 后端:配置管理生效
    • 前端:根据设置动态插入视图居中与淡化效果样式
  • 工作区 / 文件树
    • 后端:打开文件夹目录树构建、跨文件全局并发搜索
    • 前端:侧边树状结构渲染、点击文件交互与侧栏右键菜单(打开、复制路径、设为工作区)
  • PDF / HTML 导出
    • 后端:数据格式工厂支持转化输出
    • 前端:导出视图选项与菜单触发弹窗
  • 自定义主题 / 字体配置
    • 后端:保存用户自定义设置
    • 前端:配置页可视化表单调整
  • 崩溃恢复机制
    • 后端:定期的后台快照存储与异常检查恢复逻辑
    • 前端:应用崩溃二次拉起时的异常恢复弹窗确认
  • 自动更新集成
    • 后端:请求远程 feed 版本判定逻辑
    • 前端:更新进度条展示交互

验收标准: 用户体验评测无明显短板,可发布公开 Beta 版本。


7. 需求完成度审计(截至 2026-04-01)

7.1 核心功能需求(第 3 章)

模块 状态 说明
WYSIWYG / 源码模式 / Undo-Redo 已完成 前端交互与快捷键均已接入
Markdown + GFM + 进阶渲染 已完成 代码高亮、Mermaid、KaTeX 与图片粘贴已接入
本地文件管理 已完成 打开/保存/另存为/自动保存/最近文件/多标签已接入;外部修改已支持“保留当前版本 / 重新加载磁盘内容”决策提示
搜索替换与快捷键体系 已完成 文档内搜索替换、快捷键配置均可使用

结论:核心功能需求(P0)已完成。

7.2 增强功能需求(第 4 章)

模块 状态 说明
插件系统架构 基本完成 生命周期、UI 插槽、SDK、manifest 导入激活已接入;已提供 cleanup 协议,第三方插件接入率与回归覆盖待提升
高级编辑功能 已完成 焦点模式、打字机模式、工作区、全局搜索、导出均已接入
其他 P1(主题/字体/多窗口) 已完成 主题与字体配置已完成;已支持标题栏与快捷键触发的新建窗口能力

结论:增强功能需求“基本完成”,当前主要缺口聚焦在插件权限治理深度与回归覆盖。

7.3 非功能性需求(第 5 章)

模块 状态 说明
性能指标 未完成 尚缺系统化压测与指标验收报告
安全性 部分完成 已有权限声明与基础隔离能力,但插件权限强校验与来源可信机制需加强
数据安全 已完成 崩溃恢复与草稿恢复链路已接入
自动更新 已完成 更新检查与前端更新交互已接入
日志与诊断 已完成 日志写入与诊断报告能力已接入

结论:非功能性需求“未全部完成”,核心差距在性能验收与插件安全治理深度。

7.4 待补齐清单(优先级)

  1. 推动第三方插件接入 cleanup 协议并补齐权限强校验。
  2. 建立性能基准与自动化验收(启动、内存、加载、滚动、自动保存延迟)。

7.5 本轮补齐记录(2026-04-01)

  • 已补齐核心文件管理中的外部修改处理:当文件在编辑器外被修改或删除时,前端会触发决策提示。
  • 已补齐自动保存调度链路:按设置项 autosave_enabledautosave_interval_secs 周期执行脏标签自动保存。
  • 已补齐恢复草稿调度链路:对脏标签周期写入恢复草稿,降低异常退出后的内容丢失风险。
  • 已补齐多窗口能力:支持标题栏按钮与 Ctrl+Shift+N 快捷键创建新窗口。