MoonMark

macOS 26 或更新
.md · .markdown · .mdown
简体中文 · English

原生 macOS Markdown 阅读器,为审阅 AI 写的技术文档而做。

Agent 写好的计划、方案和分析,打开就是排好的文档。目录在左侧,正文保持舒适的行宽,表格、代码和图表各自排好。要修改时切到源码;Agent 再改文件,窗口里的内容会跟着更新。

读一份示例文档
migration-plan.md由 Agent 写入

会话存储迁移:Redis → Postgres

由 Claude Code 生成 · 2026-09-28 · 待审阅

背景

会话数据现在放在单实例 Redis 里,没有开持久化。上周两次重启,各丢了约 4 万个登录态。本计划把会话移到现有的 Postgres 集群,Redis 只留作读缓存。

方案对比

方案持久化读延迟 P95改动量
A:开启 Redis AOF秒级0.8 ms小
B:迁到 Postgres事务级2.4 ms中
C:B + Redis 读缓存事务级0.9 ms中

建议选 C:持久化与 B 相同,读延迟接近现状。

迁移步骤

  • 建表 sessions,按 user_id 建索引
  • 双写:新会话同时写入 Redis 和 Postgres
  • 回填存量会话(约 120 万条)
  • 读路径切到 Postgres,Redis 降为缓存
  • 观察 7 天,再去掉对 Redis 持久化的依赖

数据流

读 未命中 写 客户端 API 服务 Redis 缓存 Postgres

回填脚本

-- 只回填未过期的会话
INSERT INTO sessions (id, user_id, data, expires_at)
SELECT id, user_id, data, expires_at
FROM staging_sessions
WHERE expires_at > now()
ON CONFLICT (id) DO NOTHING;

风险

警告WARNING

回填期间如果双写冲突,以 Postgres 为准。回填开始前,先冻结会话结构的变更。

回滚

读路径由开关 SESSION_READ_FROM_PG 控制。关掉开关就回到 Redis,不需要重新部署。

亮色
深色

换一套主题看看。点左侧目录跳到对应章节;点右上角 </> 或按 ⌘⇧E 看这份文档的 Markdown 原文。

##漂亮好看

打开就是排好的文档。

目录常驻左侧
标题自动生成目录。读到哪一节,目录就高亮哪一节;点一下直接跳过去。
⌃⌘S
正文成栏,宽内容另算
正文默认 46rem 宽,宽屏上也不会铺满整个窗口。宽表格和图表按需用上两侧留白;代码块与正文对齐,长行在块内横向滚动。
46rem
六套主题
亮色有瓷白、亚麻、雾青,深色有石墨、午夜、松墨。目录、正文、代码、表格和图表一起换色,外观跟随系统在亮色与深色之间切换。
3 + 3
中英文混排
默认只用无衬线字体。正文和代码可以换成本机装的任意字体,字号和字重也能调。
⌘+⌘−
图表、公式、代码
Mermaid 图表默认直接画出来,可以切回源码、放大或复制。KaTeX 公式和代码高亮都在本机完成。
Mermaid · KaTeX

##实用耐用

不丢内容,不打乱工作。

Agent 改了文件,窗口会跟上
你没改过的文档,磁盘上一变就重新载入,并停在你刚才读到的位置。你也改过的文档不会被悄悄覆盖,窗口顶部出现提示条,由你决定怎么处理。

App 里的提示条,原文照录

阅读和源码一键切换
读到要改的地方,切到源码直接改;切回阅读,还停在同一段。
⌘⇧E
一个窗口,多个标签
多份文档在同一个窗口里用标签切换。文中指向其他 .md 文件的相对链接,点开就是一个新标签。
⌘O
存得稳
保存时先写临时文件,再替换原文件。未保存的修改会另存为本地恢复草稿,App 被强制退出后也能找回。
怪文件也打得开
特别大或结构特别复杂的文件,改用纯文本显示原文。内容不丢,界面不卡死。
离线,沙盒
渲染全部在本机完成,不需要账号,也不需要联网。文档里的脚本不会执行。

##不做的事

这些交给别的工具。

  • 文件树
  • 云同步
  • AI 聊天
  • 知识库
  • 插件市场
  • 所见即所得

MoonMark 只负责把一份 Markdown 读好、改好、存好。

##规格

内测版,以正式版发布时为准。

系统
macOS 26 或更新
界面
AppKit 原生窗口,正文由 WebKit 排版
文件
.md .markdown .mdown
语法
CommonMark、GFM 表格与任务列表、脚注、Front Matter、提示块、Mermaid、KaTeX
界面语言
简体中文、English
辅助功能
VoiceOver、减少动态效果、增强对比度
账号与网络
都不需要