What is Rho?
In one sentence: Rho is the next evolution of Markdown — it lets
.mdfiles express HTML-grade interactivity (sliders, animations, SVG scenes, live charts, knowledge-graph nodes) while keeping Markdown's promise that any tool can open the source as plain text.
Logo: ρ — Greek letter
rho, a single glyph that is the logo. Domain: rho.md Product family: Rho (reader app) / @rho/md (npm library) / Rho format (protocol) / cloud.rho.md (SaaS) / Rho AI (generation) / Rho graph (knowledge management)
An example to open with
The way plain markdown does it:
# BMI calculator
Formula: `BMI = weight (kg) / height² (m)`
| Height | 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 |
The reader has to plug their own numbers into the table.
The way Rho does it:
# BMI calculator
Formula: `BMI = weight (kg) / height² (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:
[Your BMI] -> [{bmi:.1f}] ::mod(weight="{weight} kg", height="{height} m")
```
The reader drags two sliders → BMI, units, healthy zone all update live — no math required.
The difference is obvious: from "read the formula and compute yourself" to "drag a slider and see the answer."
Key: that
```interactblock, in readers that don't support Rho (GitHub / VS Code / default Obsidian), shows as a syntax-highlighted code block — readers can still see what the source does. That's plain-text fallback.
Three core principles
Rho's design rests entirely on these three:
1. Declarative
The source file contains no JS code. Every interaction is a declaration ("put a slider here, min 40, max 120, initial 70"), not code ("function onSliderChange() { ... }").
Why:
- Writers don't need to know how to code
- LLMs can reliably generate it (generating raw JS is bug-prone; generating declarations almost never errors)
- Safe (the reader doesn't
evalanything — no user code execution) - Portable (not tied to any JS framework)
2. Plain-text fallback
Readers that don't support Rho (GitHub web, VS Code preview, default Obsidian, email markdown clients) — when they open a .md file, they see the plain-text source, not a blank failed render.
This is Markdown's core promise; Rho cannot violate it. All Rho DSLs live inside standard markdown fenced code blocks (```interact / ```timeline / ```layout) or :::container blocks — both are legal in standard markdown; they're just rendered as code blocks or ignored.
Important distinction: "openable as plain text" ≠ "visually rendered." Rho guarantees the former. To see actual sliders / animations / live charts, you need Rho MD or another reader that implements the format.
3. AI-friendly (AI-native)
The syntax is compact, unambiguous, machine-verifiable — LLMs produce Rho format almost without errors.
Compare:
- Ask an LLM to write React + useState + Chart.js → frequently broken imports, wrong props, missing useEffect
- Ask it for
```interact \n slider x 0 10 5 0.1 \n template stl: ... ```→ almost always right on first try
The LLM Protocol document (in the Rho AI / LLM Guide section) is specifically for AIs — more compact than the spec.
What it solves
Rho fits these scenarios:
| Scenario | Examples |
|---|---|
| Teaching formulas visually | Trigonometry / compound interest / probability distributions / algorithm walkthroughs |
| Personal finance tools | Mortgage / retirement planning / ROI / tax estimators |
| Physics / engineering simulations | Spring oscillator / orbits / circuits / fluid dynamics |
| Data exploration | Slider tweaks → live chart re-renders |
| Interactive product docs | API parameter sandbox / color scheme picker / state machine walkthrough |
| Enriching AI output | LLMs directly produce interactive answers shareable to the asker |
| Knowledge management (future Rho graph) | .md files linked into a knowledge graph through Rho graph |
What it doesn't solve
Honest boundaries:
- ❌ Not a web app builder — no full SPA (routing / backend / persistent state)
- ❌ Not a React replacement — you can't write components in markdown
- ❌ Not a Dataview replacement (though Rho graph is heading there) — currently no querying local files / cross-document aggregation
- ❌ Not a PowerPoint replacement — stepper / layout exist, but presentations aren't the focus
- ❌ No form submission / backend — all state lives in the reader's memory; closing the page loses it
If you need any of those, use the right tool. Rho focuses on one thing: let .md files express HTML-grade interactivity that's shareable and portable — while keeping markdown's plain-text fallback.
How it relates to other tools
Objective comparison, not a putdown:
| Tool | Position | Relation to Rho |
|---|---|---|
| Markdown (CommonMark/GFM) | Base syntax | Rho is a superset — all valid markdown is also valid Rho format |
| Obsidian + Meta Bind | Personal-vault inline interactive | Meta Bind uses INPUT[slider:value] bound to frontmatter, imperative (writes JS via DataviewJS) + Obsidian-only. Rho is declarative + portable across readers |
| Obsidian + Charts plugin | Chart.js rendering | Rho uses Vega-Lite declaratively; more compact |
| MyST | Academic markdown | Both declarative + both have directive syntax. MyST is heavily Sphinx-ecosystem; Rho leans AI-native + zero-build |
| MDX | JSX in Markdown | MDX puts React components into .md — breaks plain-text fallback, and can't be reliably LLM-generated. Rho writes no JS |
| Quarto | Data-science publishing | Quarto needs a build pipeline + Python/R kernel; Rho is zero-build / zero-runtime |
| Notion | Embed widgets | Notion locks you to its ecosystem; can't share pure .md source. Rho's source file is markdown — paste it anywhere |
Rho's differentiation isn't "capability unlock" — several of those tools can do similar things. It is:
- Unified spec (not dozens of incompatible plugins)
- Declarative (not JS-imperative)
- AI-friendly (LLMs only need one protocol)
- Portable (no ecosystem lock-in; source is pure markdown)
Philosophy: why it's designed this way
Markdown beat wiki / RTF / docx / Notion proprietary formats and became the de facto standard for one reason — it has one unbreakable promise:
Any tool can open it; in the worst case you see plain text — not a broken binary or a failed render.
That promise lets .md files flow freely across GitHub / VS Code / Obsidian / Bear / Typora / email clients / the command line / cat / any text editor.
Many "enhanced markdown" formats (MDX / Notion-flavored / Bear-flavored) violate this promise — leave their reader and the file is broken.
Rho refuses that path. Every Rho DSL must, in readers without Rho support, show as legal markdown (fenced code block / container block / regular paragraph). The worst a reader sees is a syntax-highlighted source — not an error.
Cost: the DSL shape is constrained by markdown grammar (must live in ``` or :::).
Benefit: your .md files never break because you switched readers.
What's next
| You are… | Recommended entry |
|---|---|
| Want to see all capabilities right now | → 5-minute tour |
| Haven't installed Rho desktop app | → Install Rho app |
| Want to write a real example yourself | → Your first interactive .md |
| Writer looking up specific DSL syntax | → Writer's Guide |
Integrating @rho/md into your own reader |
→ Developer Reference |
| LLM developer / prompt engineer | → Rho AI / LLM Guide |
See also
- AINP protocol (v0.7) — Full specification, CC BY 4.0
- AINP protocol — §16 For LLM authors — Protocol for AIs generating Rho format
@rho/mdlibrary — Reference implementation on npm (package name pending rename to @rho/md)- Rho on GitHub — Tauri desktop reader (repo name pending rename)