Skip to main content

mdreview

Terminal UI for reviewing markdown documents with inline comments. Built with Python and Textual.

Features

  • Inline comments — select line ranges and add comments, stored in sidecar .review.json files
  • Review workflow — approve or request changes on each file, with exit codes for CI integration
  • Diff between rounds — see what changed since your last review decision
  • Mermaid diagrams — ASCII rendering in the terminal, or open in mermaid.live
  • Anchor drift — comments follow content when lines are added, removed, or moved
  • Live reload — files reload automatically when modified externally
  • Multi-file — review multiple files or an entire directory in one session

Installation

# From PyPI
pip install mdreview

# Or with uv
uv tool install mdreview

# Or with pipx
pipx install mdreview

# From source
uv tool install git+https://github.com/lazyoft/mdreview.git

Usage

# Review a single file
mdreview document.md

# Review multiple files
mdreview chapter1.md chapter2.md chapter3.md

# Review all markdown files in a directory
mdreview --dir docs/

Keybindings

Key Action
Up/Down Move cursor between blocks
Left/Right Previous/next file
c Start/confirm line selection for comment
Shift+Up/Down Extend selection
Ctrl+S Submit comment (in modal)
Esc Cancel selection or input
d Delete comment (when popover visible)
D Delete all comments on file
e Edit comment
A Approve file
R Request changes
v Toggle diff view
f Open file selector
m Toggle Mermaid ASCII/raw
o Open Mermaid diagram in browser
? Show help
q Quit

Customizing Keybindings

All keybindings can be customized via a TOML config file. Run:

mdreview --config

This creates ~/.config/mdreview/keys.toml (pre-populated with all defaults) and opens it in your $EDITOR. Edit any key and save — changes take effect next time you launch mdreview.

Example customization:

[keys]
quit = "x"
approve = "a"
cursor_up = "k"
cursor_down = "j"

Exit Codes

Code Meaning
0 All files approved
1 Changes requested on one or more files
2 Incomplete — unreviewed files remain

Development

# Clone and install in dev mode
git clone https://github.com/lazyoft/mdreview.git
cd mdreview
uv venv && uv pip install -e ".[test]"

# Run tests
uv run pytest

# Lint
uv run ruff check src/

See CONTRIBUTING.md for more details.

License

MIT

Metadata

Release files for mdreview 0.3.1

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

Source distribution (sdist)

Source distribution for mdreview 0.3.1
File Size Uploaded
mdreview-0.3.1.tar.gz 103.7 kB Details

Built distribution (wheel)

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

Total release size: 135.9 kB

Release files / mdreview-0.3.1.tar.gz

Download URL mdreview-0.3.1.tar.gz
Size 103.7 kB
Tags Source
SHA-256 checksum
How to use checksums
1cf5d458b28623359fecb6a4d3503015a351c9f4d2ca2f6035df175b4cf265d3
BLAKE2b-256 checksum
How to use checksums
1ab545bca63ed30db14ce0310263fdb77d331203154e363aaf7b9e00e9db62f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.

Transparency log

Release files / mdreview-0.3.1-py3-none-any.whl

Download URL mdreview-0.3.1-py3-none-any.whl
Size 32.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
77e94c32e61bed009c5c854a3aade44dde67becc2b380dda51c729a5709b8995
BLAKE2b-256 checksum
How to use checksums
421ad7533b7efad34e785d1c5ec5c2719195f8e9725f765539e564a411fad0fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

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