A powerful command-line interface for Atlassian Confluence that allows you to read, search, and manage your Confluence content from the terminal.
- π Read pages - Get page content in text or HTML format
- π Search - Find pages using Confluence's powerful search
- βΉοΈ Page info - Get detailed information about pages
- π List spaces - View all available Confluence spaces
- βοΈ Create pages - Create new pages with support for Markdown, HTML, or Storage format
- π Update pages - Update existing page content and titles
- π Attachments - List or download page attachments
- π¦ Export - Save a page and its attachments to a local folder
- π οΈ Edit workflow - Export page content for editing and re-import
- π§ Easy setup - Simple configuration with environment variables or interactive setup
npm install -g confluence-cliOr run directly with npx:
npx confluence-cli-
Initialize configuration:
confluence init
-
Read a page:
confluence read 123456789 -
Search for pages:
confluence search "my search term" -
Create a new page:
confluence create "My New Page" SPACEKEY --content "Hello World!"
-
Update a page:
confluence update 123456789 --content "Updated content"
confluence initThe wizard now helps you choose the right API endpoint and authentication method. It recommends /wiki/rest/api for Atlassian Cloud domains (e.g., *.atlassian.net) and /rest/api for self-hosted/Data Center instances, then prompts for Basic (email + token) or Bearer authentication.
export CONFLUENCE_DOMAIN="your-domain.atlassian.net"
export CONFLUENCE_API_TOKEN="your-api-token"
export CONFLUENCE_EMAIL="[email protected]" # required when using Atlassian Cloud
export CONFLUENCE_API_PATH="/wiki/rest/api" # Cloud default; use /rest/api for Server/DC
# Optional: set to 'bearer' for self-hosted/Data Center instances
export CONFLUENCE_AUTH_TYPE="basic"CONFLUENCE_API_PATH defaults to /wiki/rest/api for Atlassian Cloud domains and /rest/api otherwise. Override it when your site lives under a custom reverse proxy or on-premises path. CONFLUENCE_AUTH_TYPE defaults to basic when an email is present and falls back to bearer otherwise.
- Go to Atlassian Account Settings
- Click "Create API token"
- Give it a label (e.g., "confluence-cli")
- Copy the generated token
# Read by page ID
confluence read 123456789
# Read in markdown format
confluence read 123456789 --format markdown
# Read by URL (must contain pageId parameter)
confluence read "https://your-domain.atlassian.net/wiki/viewpage.action?pageId=123456789"confluence info 123456789# Basic search
confluence search "search term"
# Limit results
confluence search "search term" --limit 5# List all attachments on a page
confluence attachments 123456789
# Filter by filename and limit the number returned
confluence attachments 123456789 --pattern "*.png" --limit 5
# Download matching attachments to a directory
confluence attachments 123456789 --pattern "*.png" --download --dest ./downloads# Export page content (markdown by default) and all attachments
confluence export 123456789 --dest ./exports
# Custom content format/filename and attachment filtering
confluence export 123456789 --format html --file content.html --pattern "*.png"
# Skip attachments if you only need the content file
confluence export 123456789 --skip-attachmentsconfluence spaces# Find page by title
confluence find "Project Documentation"
# Find page by title in a specific space
confluence find "Project Documentation" --space MYTEAM# Create with inline content and markdown format
confluence create "My New Page" SPACEKEY --content "**Hello** World!" --format markdown
# Create from a file
confluence create "Documentation" SPACEKEY --file ./content.md --format markdown# Create child page with inline content
confluence create-child "Meeting Notes" 123456789 --content "This is a child page"
# Create child page from a file
confluence create-child "Tech Specs" 123456789 --file ./specs.md --format markdown# Copy a page and all its children to a new location
confluence copy-tree 123456789 987654321 "Project Docs (Copy)"
# Copy with maximum depth limit (only 3 levels deep)
confluence copy-tree 123456789 987654321 --max-depth 3
# Exclude pages by title (supports wildcards * and ?; case-insensitive)
confluence copy-tree 123456789 987654321 --exclude "temp*,test*,*draft*"
# Control pacing and naming
confluence copy-tree 123456789 987654321 --delay-ms 150 --copy-suffix " (Backup)"
# Dry run (preview only)
confluence copy-tree 123456789 987654321 --dry-run
# Quiet mode (suppress progress output)
confluence copy-tree 123456789 987654321 --quietNotes:
- Preserves the original parent-child hierarchy when copying.
- Continues on errors: failed pages are logged and the copy proceeds.
- Exclude patterns use simple globbing:
*matches any sequence,?matches any single character, and special regex characters are treated literally. - Large trees may take time; the CLI applies a small delay between sibling page creations to avoid rate limits (configurable via
--delay-ms). - Root title suffix defaults to
(Copy); override with--copy-suffix. Child pages keep their original titles. - Use
--fail-on-errorto exit non-zero if any page fails to copy.
# Update title only
confluence update 123456789 --title "A Newer Title for the Page"
# Update content only from a string
confluence update 123456789 --content "Updated page content."
# Update content from a file
confluence update 123456789 --file ./updated-content.md --format markdown
# Update both title and content
confluence update 123456789 --title "New Title" --content "And new content"The edit and update commands work together to create a seamless editing workflow.
# 1. Export page content to a file (in Confluence storage format)
confluence edit 123456789 --output ./page-to-edit.xml
# 2. Edit the file with your preferred editor
vim ./page-to-edit.xml
# 3. Update the page with your changes
confluence update 123456789 --file ./page-to-edit.xml --format storageconfluence stats| Command | Description | Options |
|---|---|---|
init |
Initialize CLI configuration | |
read <pageId_or_url> |
Read page content | --format <html|text|markdown> |
info <pageId_or_url> |
Get page information | |
search <query> |
Search for pages | --limit <number> |
spaces |
List all available spaces | |
find <title> |
Find a page by its title | --space <spaceKey> |
create <title> <spaceKey> |
Create a new page | --content <string>, --file <path>, --format <storage|html|markdown> |
create-child <title> <parentId> |
Create a child page | --content <string>, --file <path>, --format <storage|html|markdown> |
copy-tree <sourcePageId> <targetParentId> [newTitle] |
Copy page tree with all children | --max-depth <number>, --exclude <patterns>, --delay-ms <ms>, --copy-suffix <text>, --dry-run, --fail-on-error, --quiet |
update <pageId> |
Update a page's title or content | --title <string>, --content <string>, --file <path>, --format <storage|html|markdown> |
edit <pageId> |
Export page content for editing | --output <file> |
stats |
View your usage statistics |
# Setup
confluence init
# Read a page as text
confluence read 123456789
# Read a page as HTML
confluence read 123456789 --format html
# Get page details
confluence info 123456789
# Search with limit
confluence search "API documentation" --limit 3
# List all spaces
confluence spaces
# View usage statistics
confluence stats# Clone the repository
git clone https://github.com/pchuri/confluence-cli.git
cd confluence-cli
# Install dependencies
npm install
# Run locally
npm start -- --help
# Run tests
npm test
# Lint code
npm run lint- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Create and update pages β
- Page templates
- Bulk operations
- Export pages to different formats
- Integration with other Atlassian tools (Jira)
- Page attachments management
- Comments and reviews
Your feedback helps make confluence-cli better for everyone. Here's how you can share your thoughts:
- Check the Issues page
- Create a new bug report
- Create a feature request
- Join our Discussions to chat with the community
- Share your experience with a feedback issue
- Rate us on NPM
- Star the repo if you find it useful! β
Check out our Contributing Guide - all contributions are welcome!
To help us understand how confluence-cli is being used and improve it, we collect anonymous usage statistics. This includes:
- Command usage frequency (no personal data)
- Error patterns (to fix bugs faster)
- Feature adoption metrics
You can opt-out anytime by setting: export CONFLUENCE_CLI_ANALYTICS=false
Made with β€οΈ for the Confluence community