Markweave: Markdown to DOCX, PDF and PowerPoint
Markweave turns a Markdown file into DOCX, PDF, or an editable PowerPoint presentation from a small browser interface. It keeps your Word and PowerPoint templates and completed jobs on local persistent storage. It scans every upload with ClamAV by default and can explicitly delegate that boundary to a trusted upstream proxy.
Experimental 2md converts supported office documents and text PDFs back to Markdown, including slide-oriented Markdown or Marp from edited PPTX files. It requires a separately configured external broker. See the capability matrix for inputs, outputs, limits and guides.
The project is licensed under Apache-2.0. The source package version is 0.7.4.
The default public quickstart remains pinned to the matched published 0.7.3 backend and Next.js
frontend images by their verified registry digests until 0.7.4 publication completes and records
new receipts. Do not substitute candidate or inferred digests; candidate testing may override both
image references together with another matched immutable pair.
The documentation index provides longer guides organized by role. You do not need to read them before trying the local profile.
Try it locally
You need OpenSSL, flock, about 6 GiB of available memory, and Docker Compose or
rootless Podman with a Compose provider. Published images support Linux/AMD64.
git clone https://github.com/Guillaume-Lombardo/simple-md-to-docx-converter.git
cd simple-md-to-docx-converter
scripts/quickstart-simple.sh up
scripts/quickstart-simple.sh password
Open http://localhost:8080 and sign in as admin with the displayed password.
In 2docx, upload examples/quickstart-source.md, keep Pandoc default,
choose DOCX, PDF, or both, and start the conversion. Download the result when ready.
The first startup can take several minutes while ClamAV loads its signatures.
For editable PowerPoint, open 2pptx and follow the PowerPoint guide.
The ordinary quickstart supports both forward workflows; 2md requires the external broker.
The currently pinned published 0.7.3 images keep Composer model setup disabled. An explicitly
supplied, matched Composer-capable backend/frontend pair can opt in with
MARKWEAVE_SIMPLE_COMPOSER_SETUP=true; the helper then includes
compose.simple-composer.yaml. Its administrator can
then open Administration → LLM settings to approve an HTTPS destination, enter a write-only
credential, select and test a model, and grant access. The candidate quickstart keeps its Composer
key in a separate persistent private volume. See the
administration guide.
scripts/quickstart-simple.sh ps
scripts/quickstart-simple.sh logs
scripts/quickstart-simple.sh down
Normal shutdown preserves accounts, templates, results and the administrator password. Results in this evaluation profile expire after 10 minutes.
This is a local evaluation profile, bound to loopback. Its disposable /work volume
has no physical capacity cap. Do not expose it as a production service. The
quickstart operations guide explains the bounded secure profile,
Docker/Podman selection, custom ports and HTTPS proxy origins, Word templates, recovery,
and the explicit trusted-upstream and insecure SSH-tunnel modes with their restrictions.
Convert a file without a server
With the bundled engines of the final image, or Pandoc and LibreOffice installed on your host,
markweave convert doc.md --local --to docx,pdf -o out/ converts your own file through the same
validation, limits, and engines as the service, without an account or upload. It records the engine
versions in out/doc.traceability.json, warns when one differs from the approved pin, and
--require-pinned makes that a failure. See
local conversion for its settings and
the container command.
Use and operate Markweave
- Command-line interface
- Python package and optional dependencies
- Provision users from a startup CSV and require password renewal
- Conversion interface
- Composer workspace, author directory, and typed Word filling
- PowerPoint and Marp workflow
- Template administration
- Supported Markdown and DOCX behavior
- Word templates and fonts
- Jobs, cancellation, retention, and recovery
- Logs, metrics, audit, and readiness
- Release and image update process
- Upgrade and rollback guidance
- Changelog
- Security policy
- Support policy
How it works
The browser and HTTP API authenticate a local user, validate and scan the upload, and record a durable conversion job. A worker claims that job with a renewable lease, resolves the exact immutable template version when one was selected (or uses Pandoc's built-in default reference document), and runs the local Pandoc, Chromium/Mermaid, and LibreOffice engines inside bounded workspaces. Results and traceability metadata are retained for the configured period; document content is not written to logs.
The standalone profile used by Compose keeps SQLite metadata and atomic objects under one /data
volume and runs one embedded worker. The distributed profile separates API and worker processes,
using PostgreSQL and S3-compatible object storage so workers can scale independently. Both profiles
share the same authorization, queue, validation, and retention contracts. See the
architecture guide, API guide, and
complete configuration reference for the deeper design.
Develop and contribute
Development targets Python 3.14 and uses uv, Ruff, ty, Pytest, and the repository's locked
toolchain. Install all groups, then run the canonical checks:
uv sync --all-groups
uv run ruff format --check .
uv run ruff check .
uv run ty check
scripts/javascript/bootstrap-pnpm.sh "$PWD/.pnpm-tools"
export PATH="$PWD/.pnpm-tools/bin:$PATH"
export COREPACK_HOME="$PWD/.pnpm-tools/corepack-home" COREPACK_ENABLE_NETWORK=0
pnpm install --frozen-lockfile --ignore-scripts
pnpm run test:web
uv run pytest -m "not requires_pandoc and not requires_mermaid and not requires_libreoffice and not requires_podman"
uv run pytest
Read CONTRIBUTING.md and the normative product specification before changing behavior. The local-development guide covers the repository layout and deeper setup; the release guide covers protected PyPI and GHCR publication.
Metadata
Release files for markweave 0.7.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| markweave-0.7.4.tar.gz | 540.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| markweave-0.7.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.3 MB
Release files / markweave-0.7.4.tar.gz
| Download URL | markweave-0.7.4.tar.gz |
|---|---|
| Size | 540.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2012258e3ab78375b49e9a46aff4fbf3f8d15a5271b670636c4d04fa5bf849b7
|
|
BLAKE2b-256 checksum How to use checksums |
4700233ec6195918ed66741ae1f4841fccfde4712564967547a24a1d05784cde
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 11, 2026.
Transparency logRelease files / markweave-0.7.4-py3-none-any.whl
| Download URL | markweave-0.7.4-py3-none-any.whl |
|---|---|
| Size | 716.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8a224fb0593e100316c6072c0d714ceb61f17074b6f60ae727cd66f9dab959d0
|
|
BLAKE2b-256 checksum How to use checksums |
dadbadbd613349d32e959142d7d913f066e20e6d20495a630048f187edabc055
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 11, 2026.
Transparency log