Skip to main content

🏃‍♂️‍➡️📕 rundot

What is rundot?

rundot executes the code blocks in your markdown file, turning them into runbooks.

A runbook is just a normal markdown file that a person can read and write, but if you annotate a code block run, then rundot can execute the code blocks for you, helping you to automate tedious multi-step tasks.

Package version Python versions PyPI - License

Example runbook

Save this as hello.md:

---
title: Say hello
inputs:
  - name: NAME
    description: Who to say hello to
---

# Say hello

A runbook is just markdown. rundot runs the blocks marked `run`, shows the
`docstring` ones, and leaves everything else alone, like this paragraph.

## Greet

```docstring
Saying hello to <NAME>.
```

```sh run
echo "Hello, <NAME>!"
```

## Count the letters

```python run
import os

name = os.environ["NAME"]
print(f"{name} has {len(name)} letters")
```

Check it, then run it:

rundot check hello.md
rundot hello.md

rundot checking and running hello.md

The command check will validate the formatting of your Markdown file to make sure it will work with Rundot.

When running a runbook, rundot asks for the inputs, shows the plan, and runs each step in order.

You can run through each step one at a time with --step and even show the code that will run with each step with --show-code.

Your runbook library

Keep runbooks you use across projects in ~/runbooks, and run them by name from anywhere:

$ rundot library
library: /home/you/runbooks
rebuild-frontend     Rebuild the frontend
update-project-deps  Update a project's dependencies

$ cd ~/Projects/website
$ rundot rebuild-frontend

A book runs in the folder you're in, so one book works for every project. See Your runbook library.

Why use rundot?

Release steps get forgotten. Writing them down helps; making the written-down version run itself fixes it.

  • It's just markdown - A runbook reads like documentation, renders on GitHub, and works fine without rundot.
  • Check before you run - rundot check finds broken frontmatter, undeclared placeholders and syntax errors.
  • See what would happen - rundot --dry RELEASING.md shows every command with its inputs filled in, and runs nothing.
  • Inputs and secrets - Ask for values once, check them against a pattern, and keep secrets off the screen and out of the log.
  • Manual steps too - confirm blocks pause for the things only a person can do.
  • A record of every run - An optional transcript keeps every command, its output and how it finished.
  • More than shell - Shell and Python blocks are built in, and other languages can be added as backends.

Install

rundot is a command-line tool, so install it on its own rather than into a project:

uv tool install rundot

Or with pip:

pip install rundot

rundot needs Python 3.12 or later and bash, and runs on macOS and Linux. Windows isn't supported. It's for runbooks you run yourself, at a terminal; there's no CI mode.

Getting started

👉 Read the full documentation for the runbook format, every command, and writing your own backend.

See examples/ for more runbooks, including a real release, and PUBLISHING.md for the runbook rundot releases itself with.

Want to help? See CONTRIBUTING.md.

Metadata

Release files for rundot 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rundot 0.6.0
File Size Uploaded Provenance Actions
rundot-0.6.0.tar.gz 461.8 kB Without provenance Details for rundot-0.6.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for rundot 0.6.0
File Interpreter ABI Platform Actions
rundot-0.6.0-py3-none-any.whl Python 3 none any Details for rundot-0.6.0-py3-none-any.whl

Total release size: 495.7 kB

Release files / rundot-0.6.0.tar.gz

Download URL rundot-0.6.0.tar.gz
Size 461.8 kB
Tags Source
SHA-256 checksum
How to use checksums
373e4e0b9f9dd4f9242866dda2b31416cd2f1c4eb3c42fb58eeaac0facb787bf
BLAKE2b-256 checksum
How to use checksums
1c70db5240179aece5ff2a77a56494cc87ecefac7593cc30d6ca6e499f3c73eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / rundot-0.6.0-py3-none-any.whl

Download URL rundot-0.6.0-py3-none-any.whl
Size 33.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b8d5f105ba8a023e5003c0641285fd452f919c9c3e75e6bcfa1b8eca0ce969ae
BLAKE2b-256 checksum
How to use checksums
61df801fb681ea624bbd83a9b3578f33c4f1244cb10f9c4d88785d203f758a08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for rundot 0.6.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page