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

Metadata

Release files for lazyjira 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lazyjira 0.2.2
File Size Uploaded
lazyjira-0.2.2.tar.gz 33.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lazyjira 0.2.2
File Interpreter ABI Platform
lazyjira-0.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 53.8 kB

Release files / lazyjira-0.2.2.tar.gz

Download URL lazyjira-0.2.2.tar.gz
Size 33.6 kB
Tags Source
SHA-256 checksum
How to use checksums
4e2612b36ffaff3c61d8179f6036a854abc736e6f75df63826804de9b7df015d
BLAKE2b-256 checksum
How to use checksums
1fc0d7edfcc15bf57bcc2b14041af9114ceaba5e1711080a5c40e0735141088e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 19, 2026.

Transparency log

Release files / lazyjira-0.2.2-py3-none-any.whl

Download URL lazyjira-0.2.2-py3-none-any.whl
Size 20.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3af436d22037eff78436673144d2287aa64975d78241d55ca6cd65ec814cc118
BLAKE2b-256 checksum
How to use checksums
8f1699495724709b8e33f91193c122c9a46951252174bc4aecb79099a24e1d1e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 19, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page