Ravel
Ravel — weave the story, keep the thread

Ravel assembles named code pieces into finished artifacts while preserving the dependency graph and provenance that explain exactly where every generated range came from.
Static by design · Browser-safe core · Source-linked diagnostics
01
Write in narrative order
Name fenced code chunks where they make sense in the explanation. Assembly order stays explicit and independent.
02
Generate deterministically
The portable graph evaluator composes, transforms, and emits artifacts without executing document JavaScript or shell commands.
03
Trace every range
Versioned provenance maps connect generated offsets back to exact or honestly coarse source locations and derivation steps.
Five minutes to a woven file
Small surface. Explicit composition.
Ravel 0.1 focuses on dependable static weaving: Markdown fences become a portable Ravel Map, the core resolves a graph, and hosts decide where artifacts may be written.
Read the five-minute guide or experiment without installing anything in the browser playground.
greeting.md
---
ravel:
document: greeting
---
```javascript {.ravel #message}
const message = "Hello from Ravel";
```
```javascript {.ravel #main}
_"message.javascript"
console.log(message);
```
```ravel
out("dist/greeting.js", _"main.javascript")
```