Provedown makes claims in Markdown and HTML reports independently verifiable. Attach small Python or DuckDB SQL calculations to important values, then run a deterministic verifier to catch stale or incorrect prose.
Documentation | First verified report | Markup reference
Provedown requires Python 3.10 or later and is available from PyPI:
pip install provedownFor a one-off run without installing it into the current environment, use
uvx:
uvx provedown verify report.mdCreate report.md:
# Order Summary
<pre><code>
orders = [
{"status": "paid", "amount": 120},
{"status": "refunded", "amount": 45},
{"status": "paid", "amount": 75},
]
paid = [order for order in orders if order["status"] == "paid"]
total = sum(order["amount"] for order in paid)
</code></pre>
The report includes <span class="result" data-code="len(paid)">2<span class="method"></span></span> paid orders totaling <span class="result" data-code="f'${total}'">$195<span class="method"></span></span>.Verify it:
provedown verify report.mdProvedown reruns the calculation and checks both authored values:
report.md: ok
pass=2, fail=0, skip=0, error=0
The HTML elements have separate jobs:
codecontains executable evidence. The surroundingprepreserves its multiline layout for readers.span.resultcontains an authored value and the expression that must reproduce it.
Provedown reports mismatches but does not rewrite the document. The Markdown or HTML file remains the source of truth.
- Execute embedded Python or DuckDB SQL.
- Query local CSV files from SQL or Python reports.
- Check exact values, numeric tolerances, and set equality.
- Reuse named calculations across multiple claims.
- Inspect dependencies between evidence and claims.
- Render evidence as visible, expandable, or claim-only HTML.