What is Rho?
一句话:Rho 是 Markdown 的进化形态——让
.md文件能写出 HTML 级别的可交互内容(滑块、动画、SVG 场景、live chart、知识网络节点),同时保留 Markdown "任何工具都能打开为纯文本" 的承诺。
Logo: ρ — Greek letter
rho,单字符即 logo。 Domain: rho.md 品牌全家: Rho(reader app)/ @rho/md(npm 库)/ Rho format(协议)/ cloud.rho.md(SaaS)/ Rho AI(生成)/ Rho graph(知识管理)
一个例子开场
普通 markdown 的写法:
# BMI 计算
公式:`BMI = 体重 (kg) / 身高² (m)`
| 身高 | 体重 60kg | 体重 70kg | 体重 80kg |
|------|-----------|-----------|-----------|
| 1.6m | 23.4 | 27.3 | 31.3 |
| 1.7m | 20.8 | 24.2 | 27.7 |
| 1.8m | 18.5 | 21.6 | 24.7 |
读者要自己代入数字对照表格。
Rho 的写法:
# BMI 计算
公式:`BMI = 体重 (kg) / 身高² (m)`
```interact
slider weight 40 120 70 1
slider height 1.4 2.1 1.7 0.01
computed bmi = weight / (height * height)
template stl:
[你的 BMI] -> [{bmi:.1f}] ::mod(weight="{weight} kg", height="{height} m")
```
读者拖动两个滑块 → 实时看到自己的 BMI 数字、单位、健康区间——不用算。
差别一目了然:从 "读公式自己代入" → "拖滑块直接看结果"。
关键:上面这块
interact在不支持 Rho 的 reader(GitHub / VS Code / Obsidian 默认)里显示为带语法高亮的代码块——读者依然能读懂源文件在做什么。这就是 plain-text fallback。
三条核心原则
Rho 的设计完全围绕这三条:
1. 声明式 (Declarative)
源文件里没有 JS 代码。所有交互都是声明("这里要一个滑块,最小 40 最大 120,初始值 70"),不是代码("function onSliderChange() { ... }")。
为什么:
- 写作者不用学编程
- LLM 能可靠生成(生成纯 JS 容易出 bug,生成声明几乎不会错)
- 安全(reader 不需要
eval,不需要执行用户代码) - 可移植(不绑定任何 JS 框架)
2. Plain-text fallback
不支持 Rho 的 reader(GitHub web、VS Code 预览、Obsidian、邮件 markdown 客户端)打开 .md 文件时——看到的是纯文本源,不是渲染失败的白屏。
这是 Markdown 的核心承诺,Rho 不能违背。所有 Rho 的 DSL 都装在标准 markdown fenced code block(```interact / ```timeline / ```layout)或 :::container 块里——这些在标准 markdown 中合法,只是被识别为代码块或被忽略。
另外区分:能"打开为纯文本" ≠ 能"渲染为视觉效果"。Rho 保证的是前者。要看到滑块/动画/live chart,需要用 Rho MD,或其他实现了该格式的 reader。
3. AI 友好 (AI-native)
语法紧凑、无歧义、可机器校验——LLM 生成 Rho format 几乎不会出错。
对比:
- 让 LLM 写一段 React + useState + Chart.js → 经常 import 错、props 不对、忘了 useEffect
- 让 LLM 写
```interact \n slider x 0 10 5 0.1 \n template stl: ... ```→ 几乎一发就对
LLM Protocol 文档(在 Rho AI / LLM Guide 章节)专门给 AI 用,比 spec 更紧凑。
解决什么问题
Rho 适合这些场景:
| 场景 | 例子 |
|---|---|
| 教学公式可视化 | 三角函数 / 复利 / 概率分布 / 算法步进 |
| 个人金融工具 | 房贷月供 / 退休规划 / 投资回报 / 税额计算 |
| 物理 / 工程仿真 | 弹簧振子 / 行星轨道 / 电路 / 流体 |
| 数据探索 | slider 调参 → live chart 重绘 |
| 产品文档可交互 | API 参数试调 / 配色方案试看 / 状态机走 step |
| AI 输出富化 | LLM 直接生成可交互答案,share 给提问者 |
| 知识管理(未来 Rho graph) | .md 文件之间通过 Rho graph 连成知识网络 |
不解决什么问题
诚实边界:
- ❌ 不是 web app builder——做不了完整 SPA(路由 / 后端 / 持久化 state)
- ❌ 不是 React 替代——不能在 markdown 里写组件
- ❌ 不是 Dataview 替代(虽然 Rho graph 未来会接近)——目前不查询本地文件 / 不跨文档聚合
- ❌ 不是 PowerPoint 替代——虽然有 stepper / layout,但不专攻 presentation
- ❌ 没有 form 提交 / 后端——所有 state 在 reader 内存里,关掉 page 就没
如果你需要这些,用对应的工具。Rho 专注一件事:让 .md 写出 HTML 级别的交互、可分享、可移植——同时保持 markdown 的 plain-text fallback。
跟其他工具的关系
客观对比,不是踩别人:
| 工具 | 定位 | 跟 Rho 的关系 |
|---|---|---|
| Markdown (CommonMark/GFM) | 基础语法 | Rho 是其超集——所有合法 markdown 也是合法 Rho format |
| Obsidian + Meta Bind | 个人 vault 内的 inline interactive | Meta Bind 用 INPUT[slider:value] 绑 frontmatter,命令式(DataviewJS 写 JS)+ Obsidian-only。Rho 声明式 + 可移植到任何 reader |
| Obsidian + Charts plugin | Chart.js 渲染 | Rho 用 Vega-Lite 声明式,写法更紧凑 |
| MyST | 学术 markdown | 都声明式 + 都有 directive 语法。MyST 重 Sphinx 生态;Rho 偏 AI-native + zero-build |
| MDX | JSX in Markdown | MDX 在 .md 里写 React 组件——会破坏 plain-text fallback,且不能 LLM 直接生成。Rho 完全不写 JS |
| Quarto | 数据科学发布 | Quarto 重 build pipeline + 需要 Python/R kernel;Rho zero-build / zero-runtime |
| Notion | embed widgets | Notion 锁生态 + 不可分享纯源 .md;Rho 源文件本身就是 markdown,可贴到任何 markdown 工具 |
Rho 的差异化不是 "能力解锁"——上面好几个工具都能做类似的事。差异化是:
- 统一 spec(不是几十个互不兼容的插件)
- 声明式(不是写 JS)
- AI 友好(LLM 一份 protocol 全会)
- 可移植(不绑生态,纯 markdown 源文件)
哲学:为什么这样设计
Markdown 之所以战胜了 wiki / RTF / docx / Notion 私有格式成为事实标准,是因为它有一条不可变的承诺:
任何工具都能打开它,最坏情况下看到的是纯文本——而不是损坏的二进制 / 渲染失败的白屏。
这条承诺让 .md 文件可以横跨 GitHub / VS Code / Obsidian / Bear / Typora / 邮件客户端 / 命令行 / cat / 任何文本编辑器流通。
很多 "增强版 markdown"(MDX / Notion-flavored / Bear-flavored)破坏了这条承诺——离开它们的 reader,文件就坏了。
Rho 拒绝这条路。我们的所有 DSL 必须在不支持 Rho 的 reader 里显示为合法的 markdown(fenced code block / container block / 普通段落)。读者最坏看到的是带语法高亮的源文件,不是错误。
代价是:DSL 形式受 markdown 语法限制(必须装在 ``` 或 ::: 里)。
收益是:你的 .md 文件永远不会因为换 reader 而坏。
接下来
| 你是…… | 推荐入口 |
|---|---|
| 想立刻看完所有能力 | → 5-minute tour |
| 没装过 Rho desktop app | → Install Rho app |
| 想动手写第一个例子 | → Your first interactive .md |
| 写作者,要查具体 DSL 怎么写 | → Writer's Guide |
| 想集成 @rho/md 到自己的 reader | → Developer Reference |
| LLM 开发者 / prompt 工程师 | → Rho AI / LLM Guide |
See also
- AINP 协议(v0.7) — 完整规范,CC BY 4.0(英文)
- AINP 协议 — §21 单页速查表 — AI 生成 Rho format 的协议
@rho/mdlibrary — npm 上的参考实现(npm 包名待 rename 为 @rho/md)- Rho on GitHub — Tauri 桌面 reader(仓库名待 rename)