Skip to main content

docx-md-comments

PyPI version Python versions License CI

docx-md-comments is a DOCX to Markdown converter and Markdown to DOCX converter focused on one hard problem: preserving Microsoft Word comments through roundtrip edits.

It is built for workflows where you:

  1. start with a Word .docx containing comments
  2. edit content and comments in Markdown (manually or with an LLM)
  3. convert back to Word without losing comment structure

LLM-focused benefit:

  • LLMs can draft or rewrite content
  • LLMs can add new comments and threaded replies in Markdown
  • those comments/replies are reconstructed as native Word comment threads on export

At A Glance

Capability Supported
DOCX -> Markdown conversion Yes
Markdown -> DOCX conversion Yes
Comment anchors Preserved
Threaded replies Preserved
Comment state (active/resolved) Preserved
Native Word comment thread reconstruction Yes
LLM-authored comments and replies roundtrip back to Word threads Yes

Why This Is Useful

Most generic converters drop or flatten comment metadata. This project is focused on Word review workflows, so comments remain usable after conversion.

Common use cases:

  • legal, scientific, or editorial review drafts with heavy comment threading
  • LLM-assisted editing where the model also writes comments/replies for reviewers
  • roundtrip pipelines where Word comments must survive intact

Before You Start

Requirements:

  • Python 3.10+
  • Pandoc installed and available on PATH

Install Pandoc:

  • macOS: brew install pandoc
  • Ubuntu/Debian: sudo apt-get install pandoc
  • Windows (PowerShell): choco install pandoc -y

Install

Recommended (pipx, isolated app install):

pipx install docx-md-comments

Alternative (pip):

python -m pip install docx-md-comments

Installed commands:

  • dmc
  • docx-comments
  • docx2md / d2m
  • md2docx / m2d

Update To Latest Version

If installed with pipx:

pipx upgrade docx-md-comments

If installed with pip:

python -m pip install --upgrade docx-md-comments

Quick Start

Convert Word to Markdown:

dmc draft.docx

Creates draft.md.

Convert Markdown back to Word:

dmc draft.md

Creates draft.docx.

LLM Editing Workflow

  1. Convert reviewed Word document to Markdown:
dmc reviewed.docx
  1. Edit reviewed.md manually or with an LLM. The LLM can update prose and add root comments or threaded replies.
  2. Convert back to Word:
dmc reviewed.md
  1. Open reviewed.docx in Word and continue normal comment-based review.

Command Variants

DOCX -> Markdown:

docx-comments draft.docx
docx2md draft.docx
d2m draft.docx

Markdown -> DOCX:

md2docx draft.md
m2d draft.md

Explicit input/output paths

DOCX -> Markdown:

docx2md draft.docx -o draft.md
d2m draft.docx -o draft.md
dmc docx2md draft.docx -o draft.md

Markdown -> DOCX:

md2docx draft.md -o draft.docx
m2d draft.md -o draft.docx
dmc md2docx draft.md -o draft.docx

Use a reference Word document for styling:

md2docx draft.md --ref original.docx -o final.docx
m2d draft.md -r original.docx -o final.docx

--ref maps to Pandoc --reference-doc.

Pass-through Pandoc arguments (advanced)

Unknown flags are passed through to Pandoc:

docx2md draft.docx -o draft.md --extract-media=media
dmc md2docx draft.md --reference-doc=template.docx

Limitations

  • Tracked Changes: Word revisions are not preserved through roundtrip. Resolve them in Word first.
  • Formatting: This project prioritizes comment fidelity. Very complex layouts may not roundtrip perfectly.

Help

dmc --help
docx2md --help
md2docx --help

For Contributors: Testing

Run full suite:

make test

Roundtrip-focused tests only:

make test-roundtrip

make test also writes:

  • artifacts/out_test.md
  • artifacts/out_test.docx

Report Issues

Please open bugs/feature requests at:

https://github.com/Pascal-Kueng/docx-md-comments/issues

When reporting a conversion bug, include:

  • input sample (or minimal repro)
  • command used
  • expected vs actual behavior (Word view)
  • failing failure_bundle path if tests failed

Technical Notes (Brief)

  • Marker style uses ///C<ID>.START/// / ///C<ID>.END/// (optional ==...== wrapper).
  • Reply relationships are reconstructed as native Word threads (commentsExtended.xml paraIdParent + story markers).
  • Validation fails fast on malformed marker edits with line-specific diagnostics.

For maintainer details, see AGENTS.md.

Metadata

Release files for docx-md-comments 1.0.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 docx-md-comments 1.0.1
File Size Uploaded Provenance Actions
docx_md_comments-1.0.1.tar.gz 55.9 kB With provenance Details for docx_md_comments-1.0.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for docx-md-comments 1.0.1
File Interpreter ABI Platform Actions
docx_md_comments-1.0.1-py3-none-any.whl Python 3 none any Details for docx_md_comments-1.0.1-py3-none-any.whl

Total release size: 97.0 kB

Release files / docx_md_comments-1.0.1.tar.gz

Download URL docx_md_comments-1.0.1.tar.gz
Size 55.9 kB
Tags Source
SHA-256 checksum
How to use checksums
286f0093ad70c2450e379e08a2164a58febf79bec78082584aed16c20cf622ed
BLAKE2b-256 checksum
How to use checksums
69314d2282c975003d49b6b9779c867bf776ac08a0596c3bfa995504095fb2db
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 16, 2026.

Transparency log

Release files / docx_md_comments-1.0.1-py3-none-any.whl

Download URL docx_md_comments-1.0.1-py3-none-any.whl
Size 41.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c25730a0719435591268fff9993847fa012878659f8491ac8554f87cd4ab0175
BLAKE2b-256 checksum
How to use checksums
ab6ea307593ca09033fc39ed9b068682644be5c76d337b2a460a1d9c41d7a11b
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 16, 2026.

Transparency log

Security for docx-md-comments 1.0.1

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.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for docx_md_comments-1.0.1.tar.gz

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 16, 2026.

Transparency log

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

1.0.1 This release

2 release files Full 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