obsidian-publish-confluence
Publish Obsidian-flavored Markdown to Confluence over Kerberos.
Versioning is derived from Git tags for releases.
Features
- Create or update Confluence pages from Markdown.
- Store the Confluence page URL in note frontmatter.
- Upload attachments on both page create and update.
- Convert Obsidian image embeds like
![[image.png]]and![[image.png|400]]. - Convert Obsidian Canvas embeds like
![[board.canvas]]to SVG attachments while preserving node coordinates. - Convert fenced code blocks to Confluence code macros.
- Convert PlantUML blocks to the native Confluence
plantumlmacro. - Support
--dry-runto inspect conversion and publish actions without changing Confluence.
Requirements
- Python 3.10+
curlkinitandklist- A Confluence instance that accepts Kerberos auth via
curl --negotiate
Installation
pip install obsidian-publish-confluence
For local development:
python -m pip install -e .
Configuration
Set these environment variables:
OBSIDIAN_PUBLISH_CONFLUENCE_BASE_URLOBSIDIAN_PUBLISH_CONFLUENCE_SPACEOBSIDIAN_PUBLISH_CONFLUENCE_PARENT_ID
Usage
export OBSIDIAN_PUBLISH_CONFLUENCE_BASE_URL="https://confluence.example.com"
export OBSIDIAN_PUBLISH_CONFLUENCE_SPACE="DOCS"
export OBSIDIAN_PUBLISH_CONFLUENCE_PARENT_ID="123456"
obsidian-publish-confluence note.md
obsidian-publish-confluence note.md --title "Custom title"
obsidian-publish-confluence note.md --page-url "https://confluence.example.com/spaces/DOCS/pages/123456"
obsidian-publish-confluence note.md --space DEV --parent-id 987654
obsidian-publish-confluence note.md --dry-run
--dry-run converts the note, prints the intended action and attachment list, and skips Confluence API calls.
The Confluence page URL is stored in the note frontmatter as confluence_url. An explicit --page-url takes precedence and is saved to the note after a successful publish.
Kerberos
The CLI expects a valid Kerberos ticket:
kinit YOUR_LOGIN@REALM.EXAMPLE
PlantUML
PlantUML fenced blocks are converted to the native Confluence plantuml macro.
This requires a Confluence instance with a compatible plantuml macro installed.
Release versioning
The package version comes from the Git tag used for the release.
For PyPI releases, create a tag like v0.1.0 before publishing a GitHub Release.
Limitations
- Image and Canvas Obsidian embeds are converted to Confluence attachments.
- Canvas embeds are rendered as SVG with text, file, link, group, and edge data; embedded files are shown as labels.
- Attachment names are namespaced automatically to avoid collisions between files with the same basename.
- Numeric Obsidian image suffixes like
![[image.png|640]]become Confluence image widths. - Non-image wiki links stay plain text.
- PDF embeds are not converted.
- Auth mode is Kerberos-only.
- If a note has no
confluence_urland--page-urlis not provided, a new Confluence page is created. - PlantUML publishing depends on the Confluence-side
plantumlmacro being available.
Publishing
This repository includes GitHub Actions for:
- building distributions on push and pull request
- publishing to PyPI on GitHub Release
published
PyPI publishing is configured for Trusted Publishing.
Metadata
Release files for obsidian-publish-confluence 0.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| obsidian_publish_confluence-0.1.7.tar.gz | 18.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| obsidian_publish_confluence-0.1.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.5 kB
Release files / obsidian_publish_confluence-0.1.7.tar.gz
| Download URL | obsidian_publish_confluence-0.1.7.tar.gz |
|---|---|
| Size | 18.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d016e5a3661c98a1d89193b12709969373c55365df25000110ad66224a64a77f
|
|
BLAKE2b-256 checksum How to use checksums |
82704441ad71ccb35837a129431cd49e64cb6c768e95ed7e774e7ef254f31829
|
| 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 Sep 15, 2026.
Transparency logRelease files / obsidian_publish_confluence-0.1.7-py3-none-any.whl
| Download URL | obsidian_publish_confluence-0.1.7-py3-none-any.whl |
|---|---|
| Size | 14.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0ae1ec175f32233abf78e5ee6c67332d4344f56d9de031aefc70b4ca5e87fa10
|
|
BLAKE2b-256 checksum How to use checksums |
93b81e9a883198c4ec5d03e9edcb9dd38fb92b2960639a94ef0f949bca77c3db
|
| 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 Sep 15, 2026.
Transparency log