confluence-cli
Confluence, readable and scriptable.
Read, search, browse, automate, and edit Confluence Cloud or Data Center—without leaving the terminal.
Install · Quick start · Read and explore · Proof Desk · Commands
confluence-cli makes Confluence directly useful from the shell. Read and browse without creating a local sync directory. Pipe stable JSON into scripts and agents. When content needs to change, work in Markdown and publish through an explicit plan-and-apply boundary.
| Job | Workflow | Result |
|---|---|---|
| Read and browse | space, search, page, blog, tui |
Scannable terminal output and a keyboard-first reader |
| Query and automate | JSON output, --fields, schema |
Stable, token-efficient data for scripts and agents |
| Edit and publish | pull → edit → plan → apply |
Reviewable Markdown changes with remote-drift protection |
Install
Choose the package manager that fits your environment. Every distribution installs the confluence executable.
With uv from PyPI:
uv tool install confluence-cli-rs
With Homebrew:
brew install rvben/tap/confluence-cli
With Cargo:
cargo install confluence-cli
The PyPI distribution is named confluence-cli-rs; the crate is named confluence-cli. Prebuilt macOS and Linux archives for Intel and ARM are available from GitHub Releases.
Quick start
Connect a profile and check access:
confluence init
confluence doctor --space SPACEKEY
Then read, search, or browse immediately—no pull required:
confluence search 'release notes' --space DOCS
confluence page tree 'DOCS:Handbook'
confluence tui --space DOCS
The same commands become structured input when piped:
confluence search 'release notes' --space DOCS \
| jq '.items[] | {title, web_url}'
Proof Desk in its medium-width Browse layout, rendered from the deterministic test fixture. Open full resolution.
When you want to edit, pull a page tree to Markdown and inspect the local plan:
confluence pull tree 'SPACEKEY:Parent Page' ./docs/parent-page
$EDITOR ./docs/parent-page/parent-page--123/index.md
confluence plan ./docs/parent-page --diff
When the plan is correct, apply it:
confluence apply ./docs/parent-page
plan reads only the Markdown and sidecar state on disk. apply validates the complete local tree and checks every remote version before writing. If Confluence changed after the pull, the apply is refused unless you explicitly choose --force.
Read and explore
The direct commands cover everyday Confluence retrieval without requiring a sync directory:
confluence space list
confluence search 'on-call rotation' --space OPS
confluence page get 'OPS:Incident handbook' --show-body
confluence page tree 'OPS:Runbooks'
confluence blog list ENG
References accept a numeric content ID, a Confluence URL, or SPACE:Title. Search accepts plain text by default and full Confluence Query Language with --cql.
On a terminal, search results, lists, and page metadata are formatted for scanning. page get --show-body includes the canonical storage-format body for agents and transformations; Proof Desk turns that content into a readable page for humans.
When stdout is piped, data commands emit one JSON document:
confluence search 'release notes' --space DOCS \
| jq '.items[] | {title, web_url}'
For an interactive reading experience, confluence tui opens Proof Desk on the first visible space. The --space option starts in a specific space, and o opens the selected page in Confluence.
Proof Desk TUI
Proof Desk is a keyboard-first, read-only workspace for reading and browsing Confluence. Add a local path when you also want to review a sync plan:
confluence tui
confluence tui --space DOCS
confluence tui --space DOCS --path ./docs/handbook
Browse mode combines the page hierarchy, a readable Markdown proof, and an outer margin for metadata, labels, attachments, comments, and content properties. Review mode presents the local plan and unified body diffs in the same layout.
The TUI never applies changes and does not contact Confluence to detect drift. confluence apply remains the separate, remote-aware write boundary. Passing --delete-remote only includes attachment deletions in the local review plan.
| Key | Action |
|---|---|
Arrow keys or j / k |
Move through content |
Enter |
Unfold the selected proof |
Tab |
Switch between Browse and Review |
1–4 |
Change the margin evidence |
s |
Choose a space |
p |
Choose a local sync directory |
o |
Open the selected page in Confluence |
? |
Show the complete keyboard map |
Wide terminals show all three regions. Compact terminals reveal complete proofs and margins on demand. Proof Desk requires interactive stdin and stdout and honors --no-color.
Edit and publish with Markdown
Pull
Export one page, a page tree, or an entire space:
confluence pull page 'DOCS:Getting Started' ./docs/getting-started
confluence pull tree 'DOCS:Handbook' ./docs/handbook
confluence pull space DOCS ./docs
Pulls are staged beside the destination and installed as one snapshot. A pull refuses to replace local Markdown changes or unmanaged files. Use --force only when the remote snapshot should replace the entire destination.
Filtered pull space --since ... exports require a new or empty destination because a partial result cannot safely replace a complete snapshot. Attachment names are confined to their page's attachments/ directory.
Edit
Each page has a predictable local layout:
<slug>--<content-id>/
├── index.md
├── .confluence.json
└── attachments/
The Markdown frontmatter contains editable metadata such as title, type, labels, status, and properties. Move a page directory beneath its desired local parent to reparent it; the parent frontmatter field is informational.
The sidecar records remote IDs, versions, hashes, and attachment mappings. It is the baseline that makes offline planning and drift detection possible.
Plan
confluence plan ./docs/handbook --diff
plan validates the complete tree and compares it with the state captured by pull. It never contacts Confluence and never writes remotely.
For an interactive review, open the same directory in the Proof Desk:
confluence tui --space DOCS --path ./docs/handbook
Apply
confluence apply ./docs/handbook
Before its first mutation, apply validates every local document and preflights every remote version. Versioned updates continue to reject drift that occurs during the apply. If an API failure leaves a partial remote mutation, the CLI reports the completed actions in structured error details so automation can reconcile safely.
Remote attachment deletions are opt-in with --delete-remote. Conditional overwrites require an explicit --force or --replace where supported.
Authentication
confluence init starts the guided login flow. It links to the appropriate token
page, discovers scoped-token details, verifies access, and stores credentials in
the operating-system keychain. New profiles start read-only unless you explicitly
enable commands that change Confluence. Cloud and Data Center profiles share the
same workflow.
Scripts and headless machines can use explicit profiles or environment-only credentials. See the authentication guide for Cloud, Data Center, CI, keychain, and environment examples.
Command surface
Reading, browsing, direct updates, and Markdown publishing are all first-class:
| Area | Commands |
|---|---|
| Accounts | auth login|status|logout|migrate, profile add|list|use|remove |
| Discovery | space list|get, search, page list|get|tree, blog list|get |
| Content | page move|create|update|delete, blog create|update|delete |
| Page data | attachment, label, comment, and property command groups |
| Markdown | pull page|tree|space, plan, tui, apply |
| Tooling | doctor, completions, schema |
On a terminal, --output auto produces readable text. When piped, data
commands produce one JSON document. Agents can request one token-efficient,
versioned command contract without loading the complete CLI surface:
confluence schema --command 'page get'
See the CLI reference for output modes, exit codes, shell completions, Markdown fidelity, and the complete command map.
Status and compatibility
The project is an early release, live-verified against Confluence Cloud and Data Center.
| Area | Cloud | Data Center | Evidence |
|---|---|---|---|
| Reading, search, and content CRUD | Verified | Verified | Live end-to-end lifecycle |
| Attachments, labels, properties, comments | Verified | Verified | Live end-to-end lifecycle |
pull → plan → apply |
Verified | Verified | Drift refusal and no-op checks |
| Proof Desk | Shared APIs | Shared APIs | Deterministic responsive render tests |
The deterministic simulator runs on every pull request. Protected live checks exercise real provider lifecycles. The testing guide explains the confidence model and automation.
Known limits
- Unknown provider-specific macros can behave differently between Cloud and Data Center; unsupported storage is preserved instead of silently flattened.
applyrefuses remote-version drift unless--forceis explicit.
Documentation
- Authentication and profiles
- CLI, output, schema, and Markdown reference
- Testing and live-provider confidence
- Release and recovery runbook
Development and releases
make test # deterministic unit, contract, and simulator tests
make release-check # formatting, clippy, tests, smoke checks, and packaging
Live-provider tests and the local Data Center stack are documented in the testing guide.
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 confluence_cli_rs-0.1.30.tar.gz.
File metadata
- Download URL: confluence_cli_rs-0.1.30.tar.gz
- Upload date:
- Size: 411.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","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 |
e52cd937f0358d20cf5388ce16d82fdcdef2d9690906f49723e2b69b69c02e5b
|
|
| MD5 |
9db6ade3b5f437308a828a9d6351e7be
|
|
| BLAKE2b-256 |
378f82f44516044ce3d621f42c6d1c7dc7f2b25ea9a89065be91818a795d793c
|
File details
Details for the file confluence_cli_rs-0.1.30-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: confluence_cli_rs-0.1.30-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 6.9 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","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 |
3484534176a873b36270815fd3bf7c8de13f3a9bdfbf066e7311752f54540815
|
|
| MD5 |
4bef0dff0c25b73417eb42fd434ab7dd
|
|
| BLAKE2b-256 |
59142f5c8e2e883c72a2e5b912600256299e527ad42c3ad613a0e4ac320e1729
|
File details
Details for the file confluence_cli_rs-0.1.30-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: confluence_cli_rs-0.1.30-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 6.5 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","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 |
503a19aef80f14d69a5553d352d5682679f0ab84326c309293f98eeb4ddafb4e
|
|
| MD5 |
82f5692302399e9a162fe7b54de7b91c
|
|
| BLAKE2b-256 |
1328832b1fb37dcdf8bc3d235950f165b4fa7321799b15848a47d6dc0f722c8e
|
File details
Details for the file confluence_cli_rs-0.1.30-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: confluence_cli_rs-0.1.30-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 5.3 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","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 |
7e2e9611aaff010847172d41c9cd24fef3ceb3491871f171211d25b6256cc740
|
|
| MD5 |
45d8ea185103d5cedd439f5a65d598bf
|
|
| BLAKE2b-256 |
d9727e5ae2e5026734d0ec343471cee7692a70b65587a2913991017b6c33cb2f
|
File details
Details for the file confluence_cli_rs-0.1.30-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: confluence_cli_rs-0.1.30-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 5.5 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","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 |
c64a5432dfa7483f5de532ccee7a87dbd3aa5c2dcf710589b886e4f254e475fb
|
|
| MD5 |
eca2e026fed4421d1755d48aae4419f4
|
|
| BLAKE2b-256 |
c90b8b245747c6b15a445ed07d381ed66dade2b3f856ab4bc5630d3ba9bdb1f8
|