
我一直用 Roam Research 整理课程和长篇笔记。它在电脑端很适合编辑、关联和重组知识,但手机阅读体验并不理想:长页面阅读不够流畅,块编辑器容易误触,目录切换也不适合连续阅读。
我最初考虑把它做成 Roam 插件,但插件依然运行在 Roam 的移动端界面中,无法解决根本问题。
所以,我做了一个独立的移动阅读器:Roam Mobile Reader。
GitHub:https://github.com/booooodv/roam-mobile-reader
它如何工作?
Roam 继续作为知识库,阅读器负责手机端体验:Markdown 经构建后成为移动阅读站;选中的内容先保存在浏览器,再通过本地 Python 服务和 Roam MCP 同步回 Roam。
目前支持目录、搜索、上下节导航、阅读位置记忆、点击块多选,以及点击父块时递归选择所有子块。保存后可批量同步为 Roam 原生的 ^^高亮^^,服务端还会回读确认修改成功。

为什么改成“点击块”?
最初我尝试使用手机系统的文字选择,但 iPhone Safari 经常在点击按钮时丢失选区。既然 Roam 本身就是块结构,最后干脆改成点击块:点击一个或多个正文块,再次点击取消,选中的内容先保存在浏览器,需要时统一同步。
父块和子块在 Roam 中是独立记录。点击父块后,阅读器会递归选择整棵子树,但同步时仍逐块写入,避免把多块错误地合并成一段文字。

为什么需要本地服务端?
静态网页可以完成阅读和本地高亮,但写回 Roam 需要调用 Roam MCP。因此项目包含一个小型 Python 服务端,用于校验请求、定位页面与块、写入 ^^高亮^^,并回读验证。
服务默认只监听 127.0.0.1。如果要从手机访问,可以在可信局域网内改为 0.0.0.0。因为同步接口能够修改 Roam graph,不要把服务直接暴露到公网。
本地搭建
git clone https://github.com/booooodv/roam-mobile-reader.git
cd roam-mobile-reader
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp config.example.json config.json
python build.py --config config.json --output .
python server.py配置自己的 Markdown 目录和 Roam graph 后,就可以在电脑或同一局域网的手机上使用。
这个项目不是为了替代 Roam,而是把两个场景分开:
电脑端继续用 Roam 整理知识,手机端用更轻的界面专注阅读。
项目采用 MIT License,欢迎本地搭建和修改。
Discussion