Export Confluence pages to Markdown files because using Confluence (or any other Atlassian product for that matter, like Jira) sucks. Works as a CLI tool and as a Python library.
uv syncCopy config.yaml.example to config.yaml and adjust it to your Confluence instance:
confluence:
url: https://your-instance.atlassian.net/wiki
token: your-personal-access-token
username: your-email@example.com
output:
directory: ./export
filename_pattern: "{title}"
include_children: false
include_labels: true
include_metadata: trueThe token can also be set via the CONFLUENCE2MD_TOKEN environment variable. The username can be set via CONFLUENCE2MD_USERNAME.
For Confluence Cloud, both username (your email) and token (API token) are required. For Confluence Server/Data Center with personal access tokens, only token is needed.
Export pages matching a CQL query:
confluence2md export --cql "space = DEV AND label = api"Export a single page by ID:
confluence2md export --page-id 12345Export a page and its children:
confluence2md export --page-id 12345 --include-childrenExport all pages from a space:
confluence2md export --space DEVOverride the output directory:
confluence2md export --cql "space = DEV" --output-dir ./docsUse a specific config file:
confluence2md -c path/to/config.yaml export --space DEVList available spaces:
confluence2md list-spaces
confluence2md list-spaces --search "dev"from confluence2md import load_config, connect, fetch_pages_by_cql, export_pages
config = load_config("config.yaml")
confluence = connect(config.confluence)
pages = fetch_pages_by_cql(confluence, "space = DEV", max_results=100)
paths = export_pages(pages, config.output)You can also render Markdown without writing files:
from confluence2md import render_page
markdown = render_page(page, config.output)
print(markdown)./scripts/release.sh patch # 0.1.0 → 0.1.1
./scripts/release.sh minor # 0.1.0 → 0.2.0
./scripts/release.sh major # 0.1.0 → 1.0.0This bumps the version in pyproject.toml, commits, tags, and pushes. The push triggers a GitHub Actions workflow that publishes the package to PyPI.
MIT