Publish MkDocs Material pages to Confluence Cloud — admonitions, Mermaid diagrams, tabs, page properties and more
Project description
mk2conf — MkDocs / Zensical to Confluence
A Python CLI tool that compiles MkDocs-flavoured Markdown into native Confluence storage XHTML and publishes it directly to Confluence Cloud. It is a compiler/transpiler, not an HTML converter — every construct maps to its native Confluence equivalent, so pages look and behave like hand-authored Confluence content.
It also bridges the gap between Confluence reviewers and developers: the sync-comments command turns open Confluence page comments into GitHub pull request review threads, and auto-resolves them in Confluence when the PR is merged.
Zensical compatible — Zensical is the modern successor to MkDocs + Material for MkDocs. Since it uses the same
mkdocs.ymlformat and Python Markdown extensions, your Zensical project works with mk2conf today with no changes required.
Installation
Requires Python 3.12+. The PyPI package is mkdocs2confluence; the CLI command is mk2conf.
pip install mkdocs2confluence
# or, for an isolated install:
pipx install mkdocs2confluence
From source (see Setup.md):
git clone https://github.com/jeckyl2010/mkdocs2confluence.git
cd mkdocs2confluence && uv sync
GitHub Actions
Publish docs automatically on every push — no local install needed:
- name: Publish docs to Confluence
uses: jeckyl2010/mkdocs2confluence@v1
with:
token: ${{ secrets.CONFLUENCE_API_TOKEN }}
Full workflow — triggers on changes to docs/ or mkdocs.yml:
name: Publish docs
on:
push:
branches: [main]
paths: ['docs/**', 'mkdocs.yml']
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: jeckyl2010/mkdocs2confluence@v1
with:
token: ${{ secrets.CONFLUENCE_API_TOKEN }}
prune: 'true'
Available inputs: token (required), config, version, dry-run, section, page, prune, quiet. See docs/commands.md for details.
Quick start
# Preview a page locally (no Confluence API calls)
mk2conf preview --page index.md --watch
# Dry-run: see what would be published
mk2conf publish --dry-run
# Publish all nav pages
mk2conf publish
# Export a section to PDF
mk2conf pdf --section Guide --out guide.pdf
# Sync Confluence comments to GitHub PR review threads
mk2conf sync-comments
Configuration
Add a confluence: block to your mkdocs.yml:
confluence:
base_url: https://yourorg.atlassian.net
space_key: TECH
email: user@example.com
token: !ENV CONFLUENCE_API_TOKEN # never hardcode the token
parent_page_id: "123456" # optional root page
mermaid_render: kroki # "kroki" (default) | "kroki:https://your-kroki" | "none"
full_width: true # default: true
The confluence: block is also accepted under extra: for MkDocs strict-mode compatibility. The API token is read from token: in mkdocs.yml, then CONFLUENCE_API_TOKEN, then MK2CONF_TOKEN.
Your first publish:
export CONFLUENCE_API_TOKEN=your_api_token_here
mk2conf preview --page docs/index.md --watch # verify output locally
mk2conf publish --dry-run # check the plan
mk2conf publish # go live
Documentation
| docs/commands.md | Full flag reference for all four commands |
| docs/features.md | Supported Markdown / Material features and known limitations |
| Setup.md | Development environment setup |
Architecture
Pipeline stages: loader → preprocess → IR → transforms → emitter → publisher. The plan phase makes all API read calls; the execute phase makes all write calls in nav order so parent pages always exist before their children.
Development
uv run pytest -q
uv run ruff check src tests
uv run mypy src
uv run vulture src --min-confidence 80
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mkdocs2confluence-0.11.1.tar.gz.
File metadata
- Download URL: mkdocs2confluence-0.11.1.tar.gz
- Upload date:
- Size: 189.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
308d76731a4b0f1af789f86d6383f0fa24159a720f0c2395981b669e34684ce0
|
|
| MD5 |
62c585fa924dc6f05894d9c4f669fec0
|
|
| BLAKE2b-256 |
3231e0a927a851b28af7988b3c19beba6abf2a7a698f6d5c558178c23014e775
|
File details
Details for the file mkdocs2confluence-0.11.1-py3-none-any.whl.
File metadata
- Download URL: mkdocs2confluence-0.11.1-py3-none-any.whl
- Upload date:
- Size: 127.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c22ee495b0e2ee5860f69557e4a71b8870d663bf835fdf1e1f7fe07c045264f1
|
|
| MD5 |
651c95549a23eeff112a77dbbd897fe3
|
|
| BLAKE2b-256 |
9e21625c9ffbe0ab1d419b53d20d72674fd82cd979f1bf2eba86fb57a753e834
|