changelog

package module
v0.10.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 7, 2026 License: MIT Imports: 6 Imported by: 0

README

jira

Terminal-first Jira CLI for day-to-day developer workflows.

Install

go install github.com/matcra587/jira-cli/cmd/jira@latest

Homebrew and GoReleaser release archives include release version metadata. go install github.com/matcra587/jira-cli/cmd/jira@latest builds from source and reports the module version in jira version (resolved from Go build info; a plain go build reports a commit-derived dev version). Release archives currently target macOS, Linux, and Windows.

See docs/installation.md for release archives, the one-line installer, source builds, and uninstall steps. The examples below assume jira is on PATH.

Quick start

# 1. Create profile metadata
jira config init --no-input \
  --base-url https://company.atlassian.net \
  --email dev@example.com

# 2. Store an API token and verify Jira accepts it
jira auth login
jira auth status

# 3. List your issues
jira issue list

For issue creation, editing, comments, and ADF payloads, start with docs/issue/read.md. For classic API tokens, auth backends, and 1Password, use docs/auth.md.

Configuration

Configuration lives in ~/.config/jira-cli/config.toml (on Windows, %AppData%\jira-cli\config.toml). Use metadata-only profiles; credentials belong in the OS keychain, 1Password, or environment fallbacks.

jira config init --no-input \
  --profile default \
  --base-url https://company.atlassian.net \
  --email dev@example.com

config init requires both --base-url and --email; omitting either exits before writing the config file.

Auth

jira auth status
jira auth login
jira auth token

auth login uses auth_type = token (the only supported value); it covers both classic and scoped (granular) API tokens. Unsupported auth types are rejected instead of being stored as fake authenticated profiles.

The 1Password backend uses the Go SDK when onepassword_account is configured for desktop-app auth or OP_SERVICE_ACCOUNT_TOKEN is present for service-account auth. macOS, Linux, and Windows release archives are built without CGO, so use a CGO-enabled source build for 1Password-backed profiles.

For desktop-app auth, 1Password must be signed in and allowed to serve SDK requests before jira can read items. In the 1Password app, open Settings > Developer and enable Integrate with other apps. If you want biometric approval, also enable the OS unlock option under Settings > Security. Desktop-app SDK authorization is per account and per process, so separate jira invocations may prompt separately even when the app is unlocked. Use the system keychain backend for prompt-free day-to-day commands.

Further reading:

[[profiles]]
name = "work"
base_url = "https://company.atlassian.net"
auth_type = "token"
email = "dev@example.com"
secret_backend = "1password"
onepassword_account = "Team"
vault = "Engineering"
item = "jira-cli-work"
Token support

jira talks to Jira Cloud only; Server/Data Center are not supported. The CLI supports both classic Atlassian API tokens and scoped (granular) API tokens, and jira auth login detects which you have automatically — there are no scoped-specific flags. Classic tokens hit the site REST base URL (https://your-site.atlassian.net/...); scoped tokens are auto-detected at login (verified against the site, then the gateway) and routed through Atlassian's gateway (https://api.atlassian.com/ex/jira/<cloudId>/...) via a stored cloud_id. See docs/auth.md.

TUI

[!WARNING] The dashboard is in alpha: actively developed, and keybindings or configuration may still change between releases. The headless CLI commands remain the stable surface for scripts and agents.

Run jira -i or jira tui in a terminal for a persistent, full-screen dashboard: tabbed JQL views with live counts, quick-filter lenses, an always-visible issue preview, single-key triage verbs with optimistic updates, multi-select bulk actions, and a JQL search workbench with autocomplete and saved-query presets. Tabs, lenses, sections, the preview dock and every keybinding are configurable under [tui] in config.toml.

Core keys: j/k move, enter open, / filter, f facet, ]/[ lens, t transition, a/A assign, c comment, e edit, w worklog, space select, ctrl+o recent, ? help, q quit.

See the TUI documentation for the full tour and configuration reference. Prefer the regular CLI commands for scripts and agent workflows.

Output

Non-TTY and agent environments emit JSON without prompts. Pick a mode explicitly with --output; valid values are auto, human, json, and compact.

jira issue list --output=json
jira issue create --json-input payload.json --no-input --dry-run --output=json
jira agent schema --output=compact

Where payload.json is at minimum:

{"summary": "Fix login", "project_key": "PROJ", "issue_type": "Task"}

project_key and issue_type are required under --no-input. See the embedded agent guide (jira agent guide) for richer payload shapes including ADF descriptions and customfields.

For agent-facing contracts, use the embedded references instead of copying recipes from the README:

jira agent guide
jira agent schema --output=compact
jira agent adf-matrix --output=json
jira agent fieldtypes --output=json

TTY commands render successful results through clog rich output:

INF ℹ️ listed issues count=0 detail=false

Use --output=compact for jq-friendly data-only JSON and --output=human to force clog rich text.

Commands

Command Docs
auth, config auth.md, config.md
issue, epic issue/read.md, epic.md
jql, search jql.md, search.md
worklog worklog.md
cache cache.md
alias alias.md
agent agent.md
output, troubleshooting output.md, troubleshooting.md

JQL

jira issue list defaults to recently-updated issues (updated >= -365d ORDER BY updated DESC). Override with --jql or builder flags:

jira issue list
jira issue list --jql 'project = PROJ AND status = "In Progress"'
jira jql build --project PROJ --assignee me --status "In Progress"

See docs/jql.md for supported builder flags and Atlassian JQL references.

Aliases

jira alias set mine -- issue list --assignee me
jira alias set inbox "issue list --assignee me"
jira alias list
jira alias import aliases.yml
jira alias delete mine

Documentation

Overview

Package changelog embeds jira-cli's own release notes so the binary can show its changelog without reaching the network. The per-change fragments under .changes/ are batched by changie into one Markdown file per version; those files (and the changelog header) are compiled in here, parsed into structured releases, and assembled on demand. This is jira-cli's changelog surfaced to its users, and is unrelated to the `jira release-notes` view of a Jira project's issues.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Full

func Full() string

Full assembles the complete changelog — the header followed by every version, newest first — mirroring the merged CHANGELOG.md.

func Header() string

Header returns the changelog preamble.

Types

type Release

type Release struct {
	// Version is the semantic version without the leading v, e.g. "0.7.7".
	Version string `json:"version"`
	// Tag is the git tag form, e.g. "v0.7.7".
	Tag string `json:"tag"`
	// URL links to the release, taken from the version heading.
	URL string `json:"url,omitempty"`
	// Date is the release date as written in the heading, e.g. "2026-07-05".
	Date string `json:"date,omitempty"`
	// Sections are the change groups (Added, Fixed, …) in file order.
	Sections []Section `json:"sections"`
	// Markdown is the version's notes exactly as batched. It drives the human
	// renderer and is deliberately excluded from JSON.
	Markdown string `json:"-"`
}

Release is one released version's notes, parsed into structured sections.

func Find

func Find(query string) (Release, bool)

Find returns the notes for a single version. The query may carry a leading v or not ("0.7.7" and "v0.7.7" both match).

func Releases

func Releases() []Release

Releases returns every released version, newest first. The returned slice is shared across calls and must be treated as read-only.

type Section

type Section struct {
	Kind    string   `json:"kind"`
	Changes []string `json:"changes"`
}

Section is one change group within a release, e.g. "Fixed".

Directories

Path Synopsis
cmd
check-changie command
Command check-changie fails a feat/fix commit that ships no changelog fragment (and no `Changelog: skip` trailer), so nothing user-facing is missed from the release notes.
Command check-changie fails a feat/fix commit that ships no changelog fragment (and no `Changelog: skip` trailer), so nothing user-facing is missed from the release notes.
gen-docs command
Command gen-docs renders the jira command tree into Markdown reference pages for the docs site.
Command gen-docs renders the jira command tree into Markdown reference pages for the docs site.
jira command
internal
adf
browser
Package browser builds Jira web URLs and opens them in the OS default browser.
Package browser builds Jira web URLs and opens them in the OS default browser.
cache
Package cache is a tiny per-profile JSON file store for Jira metadata (labels, epics, projects, …) that's cheap to look up — used by the `jira cache <resource>` commands and (eventually) by Cobra shell completion functions.
Package cache is a tiny per-profile JSON file store for Jira metadata (labels, epics, projects, …) that's cheap to look up — used by the `jira cache <resource>` commands and (eventually) by Cobra shell completion functions.
cli
Plain-text renderer for `jira alias list`: one aligned `name → expansion` line per alias, natural-ordered by name, so the human output shows the same map the JSON envelope carries.
Plain-text renderer for `jira alias list`: one aligned `name → expansion` line per alias, natural-ordered by name, so the human output shows the same map the JSON envelope carries.
cli/adfcmd
Package adfcmd implements the `jira adf` command group: standalone Markdown→ADF conversion and linting, plus the explicitly-lossy ADF→Markdown projection.
Package adfcmd implements the `jira adf` command group: standalone Markdown→ADF conversion and linting, plus the explicitly-lossy ADF→Markdown projection.
cli/adfmode
Package adfmode resolves the strict vs best-effort ADF mode for a given CLI invocation, applying both the precedence ladder and per-path defaults.
Package adfmode resolves the strict vs best-effort ADF mode for a given CLI invocation, applying both the precedence ladder and per-path defaults.
cli/boards
`jira boards` command tree.
`jira boards` command tree.
cli/boardscope
Package boardscope resolves the `--board NAME` / `--board-id N` flag pair against the local board cache and renders the result into JQL clauses and envelope data.
Package boardscope resolves the `--board NAME` / `--board-id N` flag pair against the local board cache and renders the result into JQL clauses and envelope data.
cli/cache/registry
Package registry is the single source of truth for the cacheable Jira metadata resources: their identity, default freshness window, and fetch.
Package registry is the single source of truth for the cacheable Jira metadata resources: their identity, default freshness window, and fetch.
cli/cmdutil
Package cmdutil holds the cross-cutting helper layer shared by every jira-cli command: envelope writers, client/profile accessors, output-mode resolution, mutation gates, the credential-warning sink, and small generic value helpers.
Package cmdutil holds the cross-cutting helper layer shared by every jira-cli command: envelope writers, client/profile accessors, output-mode resolution, mutation gates, the credential-warning sink, and small generic value helpers.
cli/config
Package config implements the `jira config` cobra command tree, which manages the local configuration file, profiles, and theme settings.
Package config implements the `jira config` cobra command tree, which manages the local configuration file, profiles, and theme settings.
cli/issue
`jira issue link` command tree.
`jira issue link` command tree.
cli/releasenotes
Package releasenotes implements `jira release-notes`, which prints jira-cli's own changelog — embedded in the binary — so a user can see what changed in the tool without opening GitHub or the docs site.
Package releasenotes implements `jira release-notes`, which prints jira-cli's own changelog — embedded in the binary — so a user can see what changed in the tool without opening GitHub or the docs site.
cli/runtime
Package runtime is the dependency boundary between the binary shell in cmd/jira and the command implementations.
Package runtime is the dependency boundary between the binary shell in cmd/jira and the command implementations.
cli/startup
Package startup parses jira's global flags and first subcommand out of the raw argv before cobra runs.
Package startup parses jira's global flags and first subcommand out of the raw argv before cobra runs.
cli/stdin
Package stdin is the ONLY place in the source tree allowed to read os.Stdin.
Package stdin is the ONLY place in the source tree allowed to read os.Stdin.
cli/tui
Package tui wires the `jira tui` command to the section-based dashboard.
Package tui wires the `jira tui` command to the section-based dashboard.
cli/update
Package update implements the `jira update` cobra command, which self-updates a release-archive binary in place and points Scoop and go-install binaries at the command their channel manages updates with.
Package update implements the `jira update` cobra command, which self-updates a release-archive binary in place and points Scoop and go-install binaries at the command their channel manages updates with.
cli/version
Package version implements the `jira version` cobra command: a bare version string for humans (and tooling that probes `<binary> version`), a labeled metadata block behind --detailed, and the structured envelope in machine modes.
Package version implements the `jira version` cobra command: a bare version string for humans (and tooling that probes `<binary> version`), a labeled metadata block behind --detailed, and the structured envelope in machine modes.
docs
Package docs renders a Cobra command tree to byte-stable Markdown for the jira-cli documentation site.
Package docs renders a Cobra command tree to byte-stable Markdown for the jira-cli documentation site.
errtax
Package errtax is the CLI's error taxonomy: the stable error types and codes the JSON envelope emits, and the registry that binds every code to its classification.
Package errtax is the CLI's error taxonomy: the stable error types and codes the JSON envelope emits, and the registry that binds every code to its classification.
jira
Package jira — Board service for /rest/agile/1.0.
Package jira — Board service for /rest/agile/1.0.
jira/customfield
Package customfield is the Jira custom-field type registry.
Package customfield is the Jira custom-field type registry.
jql
Package jql builds and composes Jira Query Language strings from structured inputs.
Package jql builds and composes Jira Query Language strings from structured inputs.
pipeline
Package pipeline implements the deterministic 5-stage validation pipeline that gates every Jira mutation submission.
Package pipeline implements the deterministic 5-stage validation pipeline that gates every Jira mutation submission.
selfupdate
Package selfupdate resolves which install channel delivered the running binary and builds the matching gechr/clive updater for it.
Package selfupdate resolves which install channel delivered the running binary and builds the matching gechr/clive updater for it.
tui/components/action
Package action provides a single controller that collects input for the Jira verbs (transition, comment, assign, labels, worklog, edit) through one Mode-dispatched component, instead of a bespoke flow per action.
Package action provides a single controller that collects input for the Jira verbs (transition, comment, assign, labels, worklog, edit) through one Mode-dispatched component, instead of a bespoke flow per action.
tui/components/carousel
Package carousel renders a horizontal strip of labels with one active, and wraps navigation around the ends.
Package carousel renders a horizontal strip of labels with one active, and wraps navigation around the ends.
tui/components/input
Package input is the TUI's shared text-entry substrate: thin themed wrappers over bubbles/textinput and textarea, plus the external-editor hop.
Package input is the TUI's shared text-entry substrate: thin themed wrappers over bubbles/textinput and textarea, plus the external-editor hop.
tui/components/listviewport
Package listviewport is a scrollable, single-selection list of pre-rendered rows.
Package listviewport is a scrollable, single-selection list of pre-rendered rows.
tui/components/markdown
Package markdown renders GFM (produced by internal/adf) for the TUI through glamour, with a style derived from the active clib theme so issue bodies and comments match the rest of the dashboard.
Package markdown renders GFM (produced by internal/adf) for the TUI through glamour, with a style derived from the active clib theme so issue bodies and comments match the rest of the dashboard.
tui/components/modalstack
Package modalstack manages a stack of overlay layers (confirm, input, filter, help) so more than one can be open at once and they dismiss in LIFO order.
Package modalstack manages a stack of overlay layers (confirm, input, filter, help) so more than one can be open at once and they dismiss in LIFO order.
tui/components/picker
Package picker is a vertical, type-to-filter select list for modal choices (workflow transitions today; assignees, labels and facet values next).
Package picker is a vertical, type-to-filter select list for modal choices (workflow transitions today; assignees, labels and facet values next).
tui/core
Package core defines the contracts every TUI view is built on: the Section interface, the shared ProgramContext, the async task manager, the section registry and the typed message set.
Package core defines the contracts every TUI view is built on: the Section interface, the shared ProgramContext, the async task manager, the section registry and the typed message set.
tui/keys
Package keys holds the global key map for the section-based TUI and the config-driven rebinding that lets users override any binding by name.
Package keys holds the global key map for the section-based TUI and the config-driven rebinding that lets users override any binding by name.
tui/sections/issues
JQL completion engine for the search editor: a small tokenizer classifies where the cursor is in the query (field, operator, value, or connective position) and builds full-line candidates from the instance's autocomplete reference data, so the textinput's whole-line ghost suggestion completes just the token being typed.
JQL completion engine for the search editor: a small tokenizer classifies where the cursor is in the query (field, operator, value, or connective position) and builds full-line candidates from the instance's autocomplete reference data, so the textinput's whole-line ghost suggestion completes just the token being typed.
tui/sections/settings
Package settings is the dashboard's configuration view: it shows where the active config came from and what it resolved to, offers a manual reload, and watches the file (on the shared refresh heartbeat) so edits hot-apply without restarting the TUI.
Package settings is the dashboard's configuration view: it shows where the active config came from and what it resolved to, offers a manual reload, and watches the file (on the shared refresh heartbeat) so edits hot-apply without restarting the TUI.
tui/theme
Package theme defines lipgloss styles shared across the Jira TUI.
Package theme defines lipgloss styles shared across the Jira TUI.
version
Package version resolves build metadata for the running binary.
Package version resolves build metadata for the running binary.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL