Open source · Early / experimental
executable.md treats plain markdown documents as executable workflows — components, runnable code blocks, and in-process Effection operations, all in a file that still renders as normal markdown anywhere.
$curl -fsSL https://executable.md/install.sh | shStandalone binary (built with deno compile) · also runs from source on Deno · CLI command: xmd
Standard renderers only read the first word of a fenced code block's info string. So exec, eval, and every modifier are invisible to GitHub, your editor, and any markdown viewer. Your executable workflow stays a clean, readable document everywhere else.
Invoke other markdown files with JSX-style tags like <Greeting name="world" />. Frontmatter declares meta and typed props; <Content /> slots wrap children.
Mark a fence exec to run it as a subprocess, or eval to run it in-process as an Effection operation. The output replaces the block.
Compose behavior left-to-right: silent, persist, timeout=30s, daemon. The fence info string is a middleware chain.
Pass --journal to write a JSONL trace of the run — component sources, command output, evaluated values, and errors — to a new file for troubleshooting.
Top-level bindings from eval blocks export automatically to later blocks. Reference them inline as {name} inside any executable block.
Provider components wire up cloud and local models (Anthropic, Ollama, Llamafile) with readiness checks and sampling — no custom runtime glue.
A document is a component. Frontmatter becomes meta, capitalized tags expand other documents, and exec blocks run and render their output.
---
title: My Project
---
# {meta.title}
<Greeting name="world" />
```bash exec
ls ./src
```---
emoji: Hello
props:
name:
type: string
required: true
---
{meta.emoji}, {props.name}!# My Project
Hello, world!
main.ts
utils.tsPass --journal to write a JSONL trace of a single run — component sources, command output, evaluated values, and errors. The path must not already exist, and the trace is never replayed: it's for troubleshooting, not recovery. Treat it as potentially sensitive data.
$xmd run doc.md --journal .xmd/events.jsonl<AnthropicProvider> and <OllamaProvider> nest inside a single markdown file. <Sample> routes prompts to a cloud model (Claude Opus) and a local model (llama3.2), then combines the results — no orchestration code, just markdown.
---
title: Hello World
---
# {meta.title}
<AnthropicProvider model="claude-opus-4-5">
<OllamaProvider model="llama3.2">
<Instruction system="You are a creative comedian.">
<Sample model="llama3.2">
Smart: <Sample prompt="Say something smart" model="claude-opus-4-5" />
Joke: <Sample prompt="Tell me a joke" model="llama3.2" />
Combine Smart and Joke into one smart joke
</Sample>
</Instruction>
</OllamaProvider>
</AnthropicProvider>Standalone binary, no runtime required.
curl -fsSL https://executable.md/install.sh | shRun from source (a JSR package is coming soon).
git clone https://github.com/taras/executable.md
cd executable.md && deno task xmd run doc.mdexecutable.md is a first public release and a draft spec. It's built for experimentation with executable markdown workflows, Effection-based evaluation, and provider-driven AI documents. Feedback, issues, and contributions are very welcome.