Skip to main content
 _                     _  _
| |  __ _  ____ _   _ (_)(_) _ __  __ _
| | / _` ||_  /| | | || || || '__|/ _` |
| || (_| | / / | |_| || || || |  | (_| |
|_| \__,_|/___| \__, ||_||_||_|   \__,_|
                 |___/

Like lazygit, but for Jira. Zero-dependency CLI that makes Jira bearable.

PyPI Python License CI

Installation · Quick Start · Commands · Configuration · Contributing · Promotion


Why lazyjira?

Jira's web UI is slow. Existing CLIs are either abandoned, heavy, or missing features you need.

lazyjira jira-cli go-jira
Language Python Go Go
Dependencies 0 (pure stdlib) Multiple Multiple
Install pip install lazyjira brew / go install go install
Status 🟢 Active 🟢 Active 🔴 Abandoned
Jira Cloud
JPD Support
Markdown → ADF ✅ Built-in
Config env / TOML / token file YAML YAML

Zero dependencies means no requests, no click, no rich — just Python's standard library. Install it anywhere Python runs. No compiling, no cgo, no nonsense.

Installation

# PyPI (recommended)
pip install lazyjira

# pipx (isolated install)
pipx install lazyjira

# uv tool (fast isolated install)
uv tool install lazyjira

# One-liner
curl -fsSL https://raw.githubusercontent.com/exisz/lazyjira/main/install.sh | bash

# From source
git clone https://github.com/exisz/lazyjira.git
cd lazyjira
pip install .

Quick Start

1. Configure your credentials:

export JIRA_URL="https://your-instance.atlassian.net"
export JIRA_EMAIL="you@example.com"
export JIRA_API_TOKEN="your-api-token"

Or use a config file (see Configuration).

2. List your projects:

lazyjira projects

3. Start working:

# Search issues
lazyjira issues list -p MYPROJ

# Create an issue
lazyjira issues create "Fix login timeout" -p MYPROJ -d "Users report 30s delays"

# Move to In Progress
lazyjira move MYPROJ-42 "In Progress"

# Add a comment
lazyjira comments create MYPROJ-42 --body "Root cause found: connection pool exhaustion"

Commands

Issues

lazyjira issues list -p PROJECT          # List issues (table format)
lazyjira issues list -p PROJECT --plain  # List issues (JSON)
lazyjira issues search "login bug" -p P  # Full-text search
lazyjira issues read PROJ-123            # Read full issue details
lazyjira issues create TITLE -p PROJECT  # Create issue
lazyjira issues update KEY --summary X   # Update fields

Status changes and comments have dedicated canonical commands:

lazyjira move KEY "Done"                 # Canonical: transition status
lazyjira comments create KEY --body "..." # Canonical: add comment

Legacy aliases are still supported for compatibility:

lazyjira issues status KEY "Done"         # Alias for lazyjira move
lazyjira issues comment KEY --body "..."  # Alias for lazyjira comments create

Filtering:

lazyjira issues list -p PROJ --status "In Progress"
lazyjira issues list -p PROJ --status-in "To Do,In Progress"
lazyjira issues list -p PROJ --status-ne "Done"
lazyjira issues list -p PROJ --label bug --assignee me
lazyjira issues list -p PROJ --priority 1     # Highest only
lazyjira issues list -p PROJ --order "created DESC"
lazyjira issues list -p PROJ --limit 10

Comments

lazyjira comments create KEY --body "text"   # Add comment
lazyjira comments list KEY                   # List comments

Transitions

lazyjira move KEY "In Progress"    # Transition issue
lazyjira move KEY "Done"           # Close issue

Other

lazyjira projects                  # List all projects
lazyjira labels -p PROJECT         # List labels in project
lazyjira link PROJ-1 PROJ-2       # Link two issues
lazyjira link PROJ-1 PROJ-2 -t "is blocked by"
lazyjira open PROJ-123            # Open in browser
lazyjira query "project=X AND status='To Do' ORDER BY priority"  # Raw JQL

Issue Creation — Full Options

lazyjira issues create "Title" \
  -p PROJECT \
  -d "Description in **markdown** — auto-converted to ADF" \
  --type Story \
  --priority 2 \
  --labels bug urgent \
  --parent PROJ-100 \
  --status "In Progress" \
  --duedate 2025-12-31

Configuration

lazyjira resolves configuration in this order:

1. Environment Variables (highest priority)

export JIRA_URL="https://your-instance.atlassian.net"
export JIRA_EMAIL="you@example.com"
export JIRA_API_TOKEN="your-api-token"
export JIRA_PROJECT="MYPROJ"   # optional default project

2. Config File

mkdir -p ~/.config/lazyjira
cat > ~/.config/lazyjira/config.toml << 'EOF'
[jira]
url = "https://your-instance.atlassian.net"
email = "you@example.com"

[defaults]
project = "MYPROJ"
EOF

3. Token File

echo "your-api-token" > ~/.config/lazyjira/token
chmod 600 ~/.config/lazyjira/token

💡 Tip: Generate your API token at id.atlassian.com/manage-profile/security/api-tokens

Real triage workflow

A typical Jira cleanup goes from browser-clicking to a repeatable terminal loop:

# 1. Find stale work
lazyjira issues list -p PLATFORM --status "To Do" --order "updated ASC" --limit 10

# 2. Inspect one issue without opening Jira
lazyjira issues read PLATFORM-42

# 3. Move the ticket and leave an audit trail
lazyjira move PLATFORM-42 "In Progress"
lazyjira comments create PLATFORM-42 --body "Taking this from CLI triage; first pass is checking API timeouts."

# 4. Link duplicate or blocking work
lazyjira link PLATFORM-42 PLATFORM-17 -t "is blocked by"

Before lazyjira, the same workflow usually means switching between Jira search, ticket pages, transition dialogs, and comment boxes. With lazyjira it is shell history, scripts, and copy-pasteable runbooks.

Release notes / roadmap

Current release: 0.2.1 on PyPI.

Recent improvements:

  • Python 3.9–3.13 CI and release workflow coverage.
  • Canonical move and comments create commands, with legacy aliases kept for compatibility.
  • GitHub Pages docs, style guide, and safe promotion-lead workflow.

Near-term roadmap:

  • Shell completion documentation for Bash, Zsh, and Fish.
  • More adoption proof: terminal GIF/asciinema and real team runbooks.
  • Safer promotion leads with relevance levels and manual-review templates.
  • Homebrew tap evaluation after external usage signals appear.

Markdown → ADF

lazyjira automatically converts Markdown to Atlassian Document Format when creating or updating descriptions and comments.

Write this:

lazyjira issues create "Fix bug" -p PROJ -d "## Steps\n1. Open the app\n2. Click **login**\n3. See error"

Jira sees properly formatted headings, lists, and bold text — not raw markdown.

JPD Support

lazyjira auto-detects Jira Product Discovery projects and handles their unique issue types and workflows. No extra configuration needed.

Shell Completion

# Bash
eval "$(register-python-argcomplete lazyjira 2>/dev/null)" || true

# Or add to ~/.bashrc for persistence

Contributing

See CONTRIBUTING.md for development setup, code style, and PR guidelines.

License

MIT © Exis Z

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lazyjira-0.2.2.tar.gz (33.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lazyjira-0.2.2-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file lazyjira-0.2.2.tar.gz.

File metadata

  • Download URL: lazyjira-0.2.2.tar.gz
  • Upload date:
  • Size: 33.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for lazyjira-0.2.2.tar.gz
Algorithm Hash digest
SHA256 4e2612b36ffaff3c61d8179f6036a854abc736e6f75df63826804de9b7df015d
MD5 2eecdc342b11462ff114d20d729b8054
BLAKE2b-256 1fc0d7edfcc15bf57bcc2b14041af9114ceaba5e1711080a5c40e0735141088e

See more details on using hashes here.

Provenance

The following attestation bundles were made for lazyjira-0.2.2.tar.gz:

Publisher: workflow.yml on exisz/lazyjira

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lazyjira-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: lazyjira-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 20.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for lazyjira-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 3af436d22037eff78436673144d2287aa64975d78241d55ca6cd65ec814cc118
MD5 b2b867117fc4b53c6c657d8441cc3a8f
BLAKE2b-256 8f1699495724709b8e33f91193c122c9a46951252174bc4aecb79099a24e1d1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for lazyjira-0.2.2-py3-none-any.whl:

Publisher: workflow.yml on exisz/lazyjira

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 files

0.2.1

2 files

0.2.0

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page