atlassian-cli is an independent, community open-source project, not affiliated with, endorsed by, or sponsored by Atlassian, and is not Atlassian's official CLI (acli). Product names are used only to identify compatibility.

This is a one-page reference for the most useful atlassian cli commands across Jira, Confluence, Bitbucket, and Jira Service Management. Bookmark it, print it, or paste it into your team wiki. Every command below is real, copy-pasteable syntax for atlassian-cli, the single Rust binary that talks to all four products. For the exhaustive list see the full command reference; this page is the fast lookup you keep open in a second tab.

How this differs from Atlassian's own CLI. atlassian-cli is an independent, community, MIT-licensed open-source project. It is not Atlassian's official CLI (acli) and is not affiliated with Atlassian. Use the official acli for first-party vendor support; use atlassian-cli if you want a single free Rust binary spanning Jira, Confluence, Bitbucket, and JSM with consistent flags and machine-readable output.

Setup: auth and global flags

Authentication is per profile. Log in once for each Atlassian site you use, mark one as the default, and every command targets it unless you pass --profile. See the authentication guide for token creation and Bitbucket app-password specifics.

# Log in and set this profile as the default
atlassian-cli auth login \
  --profile work \
  --base-url https://your.atlassian.net \
  --email you@example.com \
  --token $TOKEN \
  --default

atlassian-cli auth list        # show configured profiles
atlassian-cli auth status      # is the default profile valid?
atlassian-cli auth whoami --profile work
atlassian-cli auth test --profile work --format quiet && echo OK

Profiles are what make one binary practical across several Atlassian sites. Keep a work profile and a personal profile, or a prod and staging pair, and switch between them with a single flag instead of re-authenticating. The default profile is used whenever you omit --profile, which keeps everyday commands short.

Every command, regardless of product, accepts the same global flags. Learn these once and they work everywhere:

Output formats (the flag that ties it together)

The single most useful habit is switching output format. Table is for humans; JSON is for pipelines. Because the flag is identical across products, the same muscle memory that scripts Jira also scripts Confluence and Bitbucket.

Format Flag Best for
Table-f tableReading in the terminal (default)
JSON-f jsonPiping to jq, feeding scripts
CSV-f csvSpreadsheets and stakeholder reports
YAML-f yamlConfig diffs and reviewable exports
Markdown-f markdownPasting into a PR, ticket, or wiki page
Quiet-f quietExit-code-only gating in CI
# Human-readable (default)
atlassian-cli jira issue search --jql "project = DEV"

# JSON piped to jq
atlassian-cli jira issue search --jql "project = DEV" --format json | jq '.[].key'

# CSV straight to a file
atlassian-cli jira issue search --jql "project = DEV" --format csv --output issues.csv

Jira commands

Jira work centers on issues and the JQL query that selects them. Search, get, create, update, transition, assign, and delete are the seven verbs you will use daily.

# Search, read, and create issues
atlassian-cli jira issue search --jql "project = DEV order by created desc" --limit 5
atlassian-cli jira issue get DEV-123
atlassian-cli jira issue create --project DEV --issue-type Task --summary "Test task"

# Update, transition, assign, delete
atlassian-cli jira issue update DEV-123 --summary "Updated summary"
atlassian-cli jira issue transition DEV-123 --transition "In Progress"
atlassian-cli jira issue assign DEV-123 --assignee user@example.com
atlassian-cli jira issue delete DEV-123

# Assign to a sprint by numeric sprint id
atlassian-cli jira issue update DEV-123 --sprint 25446

The JQL you write for issue search is the same JQL the bulk commands accept, so a query you validate interactively can be reused verbatim in a batch operation. That reuse is the reason it pays to get comfortable with JQL early: one well-tested filter drives reads, exports, and mass updates alike.

Beyond issues, Jira exposes projects, roles, fields, workflows, and audit data:

atlassian-cli jira project list
atlassian-cli jira project get DEV
atlassian-cli jira roles list DEV
atlassian-cli jira fields list                 # find custom field ids
atlassian-cli jira workflows list
atlassian-cli jira automation list
atlassian-cli jira audit list --from 2025-01-01 --limit 100

Confluence commands

Confluence swaps JQL for CQL (Confluence Query Language). The building blocks are spaces, pages, blog posts, folders, and attachments. Search first, then act on the page id you find.

# Search with CQL or plain text
atlassian-cli confluence search cql "space = DEV and type = page" --limit 5
atlassian-cli confluence search text "meeting notes" --limit 10

# Spaces and pages
atlassian-cli confluence space list --limit 10
atlassian-cli confluence page list --space DEV --limit 25
atlassian-cli confluence page get 12345
atlassian-cli confluence page create --space DEV --title "New Page" --body "<p>Content</p>"
atlassian-cli confluence page update 12345 --title "Updated Title"
atlassian-cli confluence page add-label 12345 documentation

# Attachments and analytics
atlassian-cli confluence attachment upload --file ./diagram.png 12345
atlassian-cli confluence analytics space-stats DEV

Bitbucket commands

Bitbucket commands take a --workspace flag before the subcommand. bb is a built-in alias for bitbucket, so every command below works either way. Repositories, branches, pull requests, and pipelines are the core objects.

atlassian-cli bitbucket whoami
atlassian-cli bb whoami                          # bb == bitbucket

# Repositories and branches
atlassian-cli bitbucket --workspace myteam repo list --limit 10
atlassian-cli bitbucket --workspace myteam branch list api-service
atlassian-cli bitbucket --workspace myteam branch create api-service feature/new --from main

# Pull requests
atlassian-cli bitbucket --workspace myteam pr list api-service --state OPEN --limit 5
atlassian-cli bitbucket --workspace myteam pr create api-service \
  --title "Add feature" --source feature/new --destination main
atlassian-cli bitbucket --workspace myteam pr approve api-service 123
atlassian-cli bitbucket --workspace myteam pr merge api-service 123 --strategy merge_commit

# Pipelines
atlassian-cli bitbucket --workspace myteam pipeline trigger api-service --ref-name main

Jira Service Management commands

JSM adds service-desk concepts on top of Jira: service desks, request types, requests, queues, approvals, and SLAs. Requests are identified by their key (like SD-123); service desks and queues by numeric id.

# Service desks and requests
atlassian-cli jsm service-desk list --limit 25
atlassian-cli jsm request list --servicedesk-id 10 --limit 25
atlassian-cli jsm request create --servicedesk-id 10 --request-type-id 7 \
  --summary "Access issue" --description "Can't log in"

# Move a request forward and comment
atlassian-cli jsm request transition SD-123 --transition "In Progress"
atlassian-cli jsm request add-comment SD-123 --body "Investigating" --public

# Queues, SLAs, approvals
atlassian-cli jsm queue list 10
atlassian-cli jsm sla list SD-123
atlassian-cli jsm approval approve SD-123 --approval-id 1

Bulk operations across products

Jira, Confluence, and Bitbucket each expose a bulk command group. The pattern is identical everywhere: preview with --dry-run, confirm the count, then run for real. Bulk commands also accept --concurrency (default 4) and --limit, and they back off automatically on rate-limit responses.

# Jira: preview a mass transition, then execute without --dry-run
atlassian-cli jira bulk transition \
  --jql "project = DEV AND status = Open" \
  --transition "In Progress" \
  --dry-run

# Confluence: export a whole space to JSON
atlassian-cli confluence bulk export --cql "space = DEV" --output backup.json --format json

# Bitbucket: find repos untouched for 180 days (preview only)
atlassian-cli bitbucket --workspace myteam bulk archive-repos --days 180 --dry-run

Because --dry-run and --format behave the same across products, a script that safely cleans up Jira reads almost identically to one that cleans up Confluence. For production-grade examples with confirmation prompts and error handling, see the bulk transition runbook.

That consistency is the thread running through this whole cheat sheet. The same login flow, the same six output formats, the same dry-run-then-execute rhythm, and the same profile switch apply whether you are triaging JSM requests, exporting a Confluence space, or merging a Bitbucket pull request. Learn the shape once and the individual commands become easy to guess. When you need the exact flag for something not listed here, the full command reference has every subcommand grouped by product.

Try atlassian-cli

One free binary for Jira, Confluence, Bitbucket, and JSM. Install it and run your first command in under two minutes.

Install atlassian-cli

FAQ

Is there a single CLI that covers Jira, Confluence, and Bitbucket?

Yes. atlassian-cli is one binary with command groups for all four products: jira, confluence, bitbucket (aliased as bb), and jsm. You authenticate once per profile and reuse the same global flags, the same --format options, and the same bulk patterns across every product. That is the point of the cheat sheet on this page: one command shape to learn instead of four separate tools.

What is the difference between atlassian-cli and acli?

acli is Atlassian's own official CLI and has first-party vendor support. atlassian-cli is an independent, community, MIT-licensed open-source project that is not affiliated with Atlassian. It is a single free binary spanning Jira, Confluence, Bitbucket, and Jira Service Management. Use acli if you want official vendor support; use atlassian-cli if you want one open-source tool across all four products with consistent flags and machine-readable output.

How do I get atlassian-cli output as JSON so I can pipe it to jq?

Add --format json (or -f json) to any command, then pipe to jq. For example: atlassian-cli jira issue search --jql "project = DEV" --format json | jq '.[].key'. Every command supports table, json, csv, yaml, quiet, and markdown output. Add --envelope to wrap list output in a {"data": [...], "count": N} object for easier downstream parsing.

Can I run bulk changes without accidentally breaking a whole project?

Yes. Every bulk subcommand accepts --dry-run, which runs the same query, shows exactly what would change, and exits without modifying anything. Preview first, confirm the count and sample items, then remove --dry-run to execute. Bulk commands also respect --concurrency (default 4) and --limit, and back off automatically when the API returns a rate-limit response.

Related Resources