Skip to main content

Zero-dependency CLI for Jira Cloud REST API

Project description

 _                     _  _
| |  __ _  ____ _   _ (_)(_) _ __  __ _
| | / _` ||_  /| | | || || || '__|/ _` |
| || (_| | / / | |_| || || || |  | (_| |
|_| \__,_|/___| \__, ||_||_||_|   \__,_|
                 |___/

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

PyPI Python License CI

Installation · Quick Start · Commands · Configuration · Contributing


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

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

# From source
git clone https://github.com/gotexis/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
lazyjira issues status KEY "Done"        # Transition status
lazyjira issues comment KEY --body "..."  # Quick comment

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

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

Project details


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.1.3.tar.gz (28.4 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.1.3-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for lazyjira-0.1.3.tar.gz
Algorithm Hash digest
SHA256 1577d40057db76ee98643ede3b536f62d52bace06b8167b78ba5fa8b588e760c
MD5 550c6554766655cfc20b720fa2aadf0a
BLAKE2b-256 d16a2a4d54b302cdab0f37fd0b468deb11702d7b57517d0d545b40dc6c51ed0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for lazyjira-0.1.3.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.1.3-py3-none-any.whl.

File metadata

  • Download URL: lazyjira-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 19.5 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.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 aaae4db84eaec944a8d2ec53e4fb8e7e7a35cc9cbdc3487edca8c058298b7f99
MD5 ddbb25d02e8faa9a1d0ebdd92f37eb0d
BLAKE2b-256 1d0c3e2e70ff9bc52b1ac1d479ae84d21f957ce52c086a1f22b34abd26db1248

See more details on using hashes here.

Provenance

The following attestation bundles were made for lazyjira-0.1.3-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.

Supported by

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