The Problem: Four Products, Zero CLI

If you run an Atlassian Cloud stack, you know the drill. Jira for issues, Confluence for documentation, Bitbucket for code, JSM for service requests. Each product has its own web UI, its own API, and its own quirks. When you need to automate something—close 200 stale tickets, export a Confluence space, trigger a Bitbucket pipeline—you either write throwaway curl scripts or hunt for a product-specific CLI that only covers one piece of the puzzle.

The result is a patchwork of tools, each with different config files, different auth mechanisms, and different output formats. Your CI/CD pipeline ends up with four separate credential setups. Your runbooks reference three different binaries. And every new team member has to install and learn all of them.

atlassian-cli solves this by putting Jira, Confluence, Bitbucket, and JSM behind a single command-line interface. One binary. One config. One set of credentials per Atlassian instance.

What Is atlassian-cli?

atlassian-cli is an open-source, MIT-licensed CLI built in Rust. It ships as a single native binary with no runtime dependencies—no JVM, no Node, no Python interpreter. It supports four Atlassian Cloud products out of the box:

Every command supports multiple output formats (table, JSON, CSV, YAML, quiet), profile-based multi-instance auth, and dry-run mode for destructive operations. It is designed for both interactive terminal use and headless CI/CD automation.

Installation

Three ways to install. Pick whichever fits your toolchain.

Homebrew (macOS and Linux)

# Add the tap and install
brew tap omar16100/atlassian-cli
brew install atlassian-cli

# Verify
atlassian-cli --version

Cargo (Rust toolchain)

cargo install atlassian-cli

Pre-built Binary

Download the latest release for your platform from the GitHub Releases page. Binaries are available for Linux (x86_64, aarch64), macOS (Intel, Apple Silicon), and Windows.

Configuration: Profiles and Auth

atlassian-cli uses a profile system stored in ~/.atlassian-cli/config.yaml. Each profile maps to an Atlassian Cloud instance and holds a base URL, email, and encrypted API token. You can have as many profiles as you need—one for production, one for staging, one for a client's instance.

Adding a Jira/Confluence Profile

# Interactive login (prompts for token)
atlassian-cli auth login \
  --profile work \
  --base-url your-domain.atlassian.net \
  --email you@company.com \
  --default

Adding a Bitbucket Profile

Bitbucket uses scoped API tokens separate from Jira/Confluence. The CLI checks environment variables in priority order: ATLASSIAN_CLI_BITBUCKET_TOKEN_{PROFILE}, ATLASSIAN_BITBUCKET_TOKEN, BITBUCKET_TOKEN, then falls back to the regular profile token.

# Set up a Bitbucket Bearer token profile
atlassian-cli auth login \
  --profile bb-ci \
  --bitbucket --bearer \
  --workspace myteam

# Verify connection
atlassian-cli auth test --bitbucket --profile bb-ci

# List all configured profiles
atlassian-cli auth list

Credentials are encrypted with AES-256-GCM. No keychain dependency, no plaintext tokens on disk.

Product-by-Product Walkthrough

Jira: Issues, Bulk Ops, and Automation

The Jira subcommand covers the full issue lifecycle plus project administration. Here are the commands you will reach for most often.

# Search issues with JQL
atlassian-cli jira search \
  --jql "project = DEV AND status = 'In Progress'" \
  --limit 20

# Create an issue
atlassian-cli jira create \
  --project DEV \
  --issue-type Task \
  --summary "Automate deployment pipeline"

# Bulk transition with dry-run safety
atlassian-cli jira bulk transition \
  --jql "project = DEV AND status = Open" \
  --transition "In Progress" \
  --dry-run

The --dry-run flag previews which issues would be affected without making changes. Remove it to execute. See the Jira bulk transition runbook for a full walkthrough.

Confluence: Search, Export, Backup

The Confluence subcommand lets you manage pages, spaces, and attachments. CQL-based search gives you the same power as the Confluence web search, but with structured output.

# Search pages by CQL
atlassian-cli confluence search cql \
  --cql "space = DOCS and type = page" \
  --limit 10

# Bulk export an entire space to JSON
atlassian-cli confluence bulk export \
  --space DOCS \
  --output backup.json \
  --format json

# Download an attachment
atlassian-cli confluence attachment download \
  --id 11111 \
  --output ./diagram.png

For automated Confluence backups, see the Confluence backup runbook.

Bitbucket: PRs, Pipelines, Branches

The Bitbucket subcommand (also available as the bb alias) covers repository management, pull requests, pipelines, and branch protection.

# List open pull requests
atlassian-cli bitbucket --workspace myteam pr list api-service \
  --state OPEN --limit 5

# Trigger a pipeline on main
atlassian-cli bitbucket --workspace myteam pipeline trigger api-service \
  --ref-name main

# Bulk delete merged branches (dry-run first)
atlassian-cli bitbucket --workspace myteam bulk delete-branches api-service \
  --exclude feature/keep \
  --dry-run

The Bitbucket branch cleanup runbook shows how to automate stale branch removal on a schedule.

JSM: Service Desk Operations

The JSM subcommand handles service desk listing, request management, and customer operations.

# List service desks
atlassian-cli jsm servicedesk list --limit 10

# Get a specific request
atlassian-cli jsm request get SD-123

Real-World Workflows

Sprint Cleanup

At the end of every sprint, close stale tickets and export a summary. One script, two commands:

# Close all "Won't Do" tickets in the current sprint
atlassian-cli jira bulk transition \
  --jql "project = DEV AND sprint in openSprints() AND status = 'Won\\'t Do'" \
  --transition "Done" \
  --profile prod

# Export sprint issues to CSV for retro
atlassian-cli jira bulk export \
  --jql "project = DEV AND sprint in openSprints()" \
  --output sprint-report.csv \
  --format csv

Documentation Sync

Back up a Confluence space and its attachments nightly. Pair with cron or a GitHub Actions schedule:

# Export full space to JSON
atlassian-cli confluence bulk export \
  --space DOCS \
  --output /backups/confluence-$(date +%Y%m%d).json \
  --format json

# Check space stats
atlassian-cli confluence analytics space-stats --space DOCS

Release Automation

After merging a release PR in Bitbucket, trigger the deployment pipeline and transition all related Jira tickets to "Released":

# Merge the release PR
atlassian-cli bb --workspace myteam pr merge api-service 42 \
  --strategy merge_commit

# Trigger deployment pipeline
atlassian-cli bb --workspace myteam pipeline trigger api-service \
  --ref-name main

# Transition Jira issues to Released
atlassian-cli jira bulk transition \
  --jql "project = DEV AND fixVersion = '2.1.0'" \
  --transition "Released"

Why atlassian-cli Over Separate Tools?

There are good standalone CLIs for individual Atlassian products. jira-cli by ankitpokhrel is excellent for Jira-only workflows. But if you work across multiple Atlassian products daily, a unified approach pays off fast:

Getting Started

Ready to try it? Install atlassian-cli in under a minute:

brew install omar16100/atlassian-cli/atlassian-cli

Then explore the product-specific guides:

For production automation recipes, check the runbooks:

Install atlassian-cli

One CLI for your entire Atlassian Cloud stack. Open source, MIT licensed.

Get Started