Jake193 downloadsPublish notes to Atlassian Confluence and pull changes made in Confluence back into your vault.
Confluence Integration Plus publishes notes from your Obsidian vault to Atlassian Confluence Cloud, and pulls changes that people make in Confluence back into your notes. The plugin converts each note to Atlassian Document Format (ADF) with the @markdown-confluence/lib library, which the markdown-confluence project maintains. This repository contains only the Obsidian plugin.
The plugin runs on desktop only and requires Obsidian 1.11.4 or later.
Obsidian's developer policies require plugins to disclose the following behavior:
*.atlassian.com) into your vault. Confluence credentials are never sent to the media service. It contacts auth.atlassian.com and api.atlassian.com only to sign in with OAuth and to refresh tokens. If you turn on Kroki or PlantUML rendering, the plugin sends diagram source to the server that you configure. The plugin doesn't collect telemetry.127.0.0.1 at the callback port that you configure. The listener accepts one matching sign-in response, and then stops. It also stops when you cancel sign-in or after five minutes.sync folder inside the plugin's folder. The first time it loads, if it has no settings yet, it reads the settings of the original Confluence Integration plugin, if that plugin is installed. The plugin doesn't read or write files outside the vault.@electron/remote module, which communicates with Obsidian's main process over Electron IPC. Each window loads only the diagram or equation that it renders, and closes when rendering finishes.localStorage. The plugin itself doesn't use localStorage or sessionStorage.data.json file. The original Confluence Integration plugin stored the API token and the service-account client secret in data.json. If this plugin finds those values, it moves them into secret storage and removes them from data.json.You can install the plugin from Obsidian's community plugin directory, or manually from GitHub.
You can also open the plugin's page in the community plugin directory and click Install.
main.js, manifest.json, and styles.css..obsidian/plugins/confluence-integration-plus.If you used the original Confluence Integration plugin in this vault, this plugin imports its settings the first time it loads. Pages that the original plugin published stay linked to your notes through connie-page-id. To avoid publishing from both plugins, turn off the original plugin.
To connect, choose an authentication method, set it up, and then tell the plugin where to publish.
Find the ID of the Confluence page that you want to publish notes under. The ID is the number after /pages/ in the page URL. For example, the ID in https://example.atlassian.net/wiki/spaces/DOCS/pages/123456/Home is 123456.
The plugin supports four authentication methods:
| Method | Use it when | What you need |
|---|---|---|
| API token (basic) | You publish as yourself. This method is the quickest to set up. | Your Atlassian email address and an API token. |
| Bearer token or PAT | You have a token that Confluence accepts as a bearer token, such as a service account's API token. | The token. |
| OAuth service account | Your organization publishes through a service account instead of a person. | A client ID and client secret from Atlassian Administration. |
| OAuth browser sign-in | You want to sign in with your Atlassian account instead of storing a long-lived token. | An OAuth app that you register in the Atlassian developer console. |
Some methods need your site's cloud ID. To find it, open https://SITE.atlassian.net/_edge/tenant_info in a browser, and replace SITE with your site's name. The page shows a cloudId value.
The plugin keeps tokens and secrets in Obsidian secret storage, never in data.json. When a setting asks for a secret, select an existing secret or create one, and then paste the value into it.
If your token or app asks you to choose scopes, give it the following Confluence scopes:
read:page:confluence and write:page:confluenceread:attachment:confluence and write:attachment:confluenceread:label:confluence and write:label:confluenceread:content.restriction:confluence and write:content.restriction:confluenceread:space:confluenceread:content.metadata:confluenceread:content-details:confluenceread:confluence-userhttps://example.atlassian.net.https://api.atlassian.com/ex/confluence/CLOUD_ID. Replace CLOUD_ID with your site's cloud ID.The plugin sends the token in an Authorization: Bearer header. Use this method for a service account's API token, or for another token that your site accepts as a bearer token.
https://example.atlassian.net.https://api.atlassian.com/ex/confluence/CLOUD_ID. Replace CLOUD_ID with your site's cloud ID.With this method, the plugin uses the service account's client ID and client secret to request a new access token each time that you publish or pull. Pages that you publish this way are created and edited by the service account.
https://example.atlassian.net.https://api.atlassian.com/ex/confluence/CLOUD_ID. Replace CLOUD_ID with your site's cloud ID. This method requires this setting.With this method, you sign in to Atlassian in your browser and choose a site. The plugin keeps the access and refresh tokens in secret storage and renews them for you.
This method needs an OAuth 2.0 (3LO) app that's registered with Atlassian. You register the app once, and then each person signs in with their own Atlassian account.
offline_access; the plugin requests it when you sign in, so that it can renew your tokens.http://127.0.0.1:8766/callback. If another program uses port 8766 on your computer, choose a different port, and enter the same URL in the plugin's Callback URL setting later.http://127.0.0.1:PORT/callback.To sign out, click Disconnect, which removes this vault's tokens. To revoke the plugin's access completely, also remove the app from Connected apps in your Atlassian account settings. The app settings are locked while you're connected; to change them, disconnect first.
After you set up authentication, do the following on the same settings tab:
If a setting needs attention, the plugin lists it at the top of the settings tab.
To publish notes, do any of the following:
After a note is published, the plugin adds connie-page-id and connie-page-url to its frontmatter.
To manage an existing Confluence page from Obsidian, create a note and set its connie-page-id property to the page ID.
Publish changes sends only the notes that changed since a publish or pull last left them in sync with Confluence. A note counts as changed when any of the following is true:
Pulling keeps this up to date. A note that was in sync before a pull stays in sync if Confluence's changes merge cleanly. A note that has your unpublished edits stays marked as changed after a pull.
To also publish the folder pages above them, Publish changes sends the folder notes of the folders that changed notes are in. Those folder notes aren't listed in the results unless they fail, but they go through the same checks as changed notes: a folder note with conflict markers or unpulled Confluence changes stops the publish. Apply page ordering runs only with Republish all notes.
Run Republish all notes after you change your Obsidian theme or CSS snippets, which the plugin can't detect, or whenever you want every page to match your notes.
Note: The plugin doesn't publish over changes in Confluence that you haven't pulled. To bring those changes into your notes, see Pull changes from Confluence. To overwrite them instead, turn on Overwrite other users' edits; the other user's changes are lost.
The plugin publishes a note if any of the following are true:
connie-publish: true.Two rules take priority:
connie-publish: false is never published.connie-publish: true.To include or exclude the active note, run Enable publishing for current note or Disable publishing for current note. To edit the note's Confluence properties, such as its title, labels, and content type, run Edit page settings for current note.
The parent page is the root of the published tree, and each folder becomes a page. To give a folder page its own content, add a folder note named after the folder, or named index.md, README.md, or readme.md.
Pull brings edits that people make in Confluence into your notes, so you can work like you do with Git: pull, edit, and then publish.
Each time you publish or pull a page, the plugin saves a snapshot of the page as it is in Confluence. When you pull, the plugin compares the page with that snapshot to find what changed in Confluence, and then applies only those changes to your note. Changes that you made in Obsidian are kept, including Mermaid source, embeds, and links that look different in Confluence.
To pull, do one of the following:
When the pull finishes, a dialog lists the notes that were updated, imported, or have conflicts. If a note has conflicts, the dialog opens even when Show results after publishing is off.
If a page's title changed in Confluence, the plugin sets the note's connie-title property to the new title. It doesn't rename the note file.
If a page was deleted in Confluence, the plugin reports it and keeps your note.
Images and other attachments are downloaded into the Image folder (by default, images at the root of your vault), and notes embed them, such as ![[diagram.png]]. Each attachment is downloaded once; later pulls reuse the file. If a file with the same name already exists, the plugin adds a number to the new file's name. When you publish, the image is uploaded to the page again.
Links to other Confluence pages become Obsidian wikilinks when the linked page has a note, such as [[Local Admin Access]] or [[Local Admin Access|the admin page]]. A link to a section becomes a heading link, such as [[Local Admin Access#Steps to follow]]. Links to pages that don't have a note yet stay web links; after a later pull imports those pages, the next pull turns the links into wikilinks. When you publish, wikilinks become links to the Confluence pages again.
A conflict happens when a block changed both in Obsidian and in Confluence. The plugin keeps both versions in the note, between Git-style markers:
<<<<<<< Obsidian
The text in your note.
=======
The text in Confluence.
>>>>>>> Confluence
To resolve a conflict:
<<<<<<< Obsidian.The plugin doesn't publish or pull a note that still contains conflict markers.
Like git push, publishing stops if Confluence has changes that you haven't pulled:
Note: Pages that you published before you installed this version have no snapshot yet. If you're the last person who edited the page, the first pull records a snapshot and doesn't change the note. If someone else edited it, the first pull can't tell which changes are whose, so it marks every difference as a conflict.
When Import new pages when pulling is on, Pull all notes also creates notes for pages that were added under the parent page in Confluence:
The plugin adds connie-page-id to each imported note. If the page title contains characters that aren't allowed in file names, the plugin replaces them in the file name, and keeps the original title in connie-title.
The plugin skips a page, and says why in the results dialog, in these cases:
connie-page-id to the note.adf code block, and the results dialog says why. Images inside tables and other blocks that Markdown can't represent also stay in adf code blocks.adf code block. Edit these blocks in Confluence.dataviewjs and js-engine, become plain text code blocks, and Dataview inline JavaScript (`$= ...`) is disabled. This prevents anyone who can edit a Confluence page from running code in your vault. Code blocks that you wrote in Obsidian aren't changed.https://example.atlassian.net/wiki/x/AbCd, don't contain a page ID, so they stay web links.[[Local Admin Access|the admin page]], publishes as an ordinary link with that text.[[Release Checklist]], become links to their Confluence pages, even when Publish changes doesn't republish the linked note. Links to notes that aren't published become plain text.![[Shared Notes/Release Checklist]], before publishing.![[diagram.png|400]] or . The height follows from the image's shape. To set both, use WIDTHxHEIGHT, such as ![[diagram.png|400x300]]. Your notes aren't changed.[!failure]. A callout without a title publishes only its text, because the panel's icon shows its type. A callout with a title publishes the title as the panel's first line. Other callout types publish as info panels or custom panels.kroki-* code blocks) and PlantUML (plantuml, puml, and uml code blocks) are off by default. When you turn them on, the plugin sends diagram source to the server that you configure. Use a server that you trust, such as a self-hosted instance.TABLE, LIST, and TASK queries. DataviewJS and inline queries aren't supported.To report a problem with converting or publishing content, open an issue in the markdown-confluence repository, where the shared library is developed. To report a problem that's specific to this plugin, open an issue in this repository.
Confluence Integration Plus is a fork of the Confluence Integration plugin from the markdown-confluence project, and it uses that project's @markdown-confluence/lib library. The Apache 2.0 License requires this notice:
Copyright © 2022 Atlassian Pty Ltd.
Copyright © 2022 Atlassian US, Inc.
This project is licensed under the Apache 2.0 License.
The Apache license applies only to this plugin. It doesn't apply to any third party's services, websites, content, or platforms that the plugin lets you connect to. The licensors listed in this document don't grant you a license to access any third-party service, website, content, or platform. You're responsible for getting licenses from those third parties and for complying with their terms. Don't disclose passwords, credentials, or tokens to any third-party service in your contributions to this project.