docx-md-comments
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:
- start with a Word
.docxcontaining comments - edit content and comments in Markdown (manually or with an LLM)
- 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:
dmcdocx-commentsdocx2md/d2mmd2docx/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
- Convert reviewed Word document to Markdown:
dmc reviewed.docx
- Edit
reviewed.mdmanually or with an LLM. The LLM can update prose and add root comments or threaded replies. - Convert back to Word:
dmc reviewed.md
- Open
reviewed.docxin 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.mdartifacts/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_bundlepath 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.xmlparaIdParent+ 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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.