Run tasks and
workflows
from Markdown

upmd turns Markdown code blocks into runnable tasks and dependency-aware workflows. Run them interactively in a real terminal, with instructions, commands, and output kept together.

macOS · Linux · Windows · x86_64 · ARM64

Stable install
$ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/rezigned/upmd/releases/latest/download/upmd-installer.sh | sh
upmd - README.md
upmd terminal interface running Python, Ruby, PHP, and shell code blocks from a markdown document

Select a markdown code block, run it, then keep the result inline.

TUI + CLIInteractive or scriptable
TerminalReal terminal execution
10+ languagesShell, Python, Rust, Go, PHP, more
Zero configPlain markdown works

A README that can run itself.

Keep setup steps, experiments, deployment commands, and debugging notes in one markdown file. upmd parses fenced code blocks, chooses the right runner, streams output inline, and can carry state between blocks.

Interactive terminal UI

Move through blocks, search the document, run the selected block, view output, paste into processes, and switch themes.

Automation mode

Run all blocks in CI with upmd --cli --all --yes README.md, or jump to a named block with --block.

Live terminal execution

Interactive prompts, pagers, editors, colors, and ANSI output behave like they do in your terminal.

State capture

Shell blocks keep exported variables and working-directory changes for later blocks. Non-shell blocks can opt in.

Language runners

Bash, sh, zsh, fish, Python, JavaScript, TypeScript, Ruby, PHP, Go, Rust, C, Zig, Cmd, and PowerShell.

Plain markdown

No notebook format. No front matter. Add optional code block attributes only when you need names or binary overrides.

One file. Many executable blocks.

Use it for examples, runbooks, release checklists, repro scripts, local ops, and docs that should prove they still work.

terminal
# Open a markdown file in the TUI
upmd README.md

# Run every block headlessly
upmd --cli --all --yes README.md

# Jump to one named block
upmd deploy.md --block setup --yes

 Python block 4 passed
 Ruby block 5 streamed output
01
Write normal markdownUse standard fenced code blocks. Keep prose and commands together.
02
Select or automateNavigate in the TUI, run one named block, or execute every block in order.
03
Run inside a terminalEach block gets a real terminal, so interactive tools work correctly.
04
Keep useful outputResults appear inline, with exit state and captured environment available for later blocks.

Docs should execute.

Install upmd, open a markdown file, and run the code blocks exactly where they are documented.