# ankitpokhrel/jira-cli architecture

> Architecture diagram of the GitHub repository ankitpokhrel/jira-cli, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ankitpokhrel/jira-cli
- Repository: https://github.com/ankitpokhrel/jira-cli

## Overview

JiraCLI is an interactive terminal client for Jira. Users invoke commands to search and navigate issues, inspect boards and projects, or perform issue, epic, sprint, and release operations; results are rendered in the terminal, with optional browser navigation. The map follows the documented command-to-Jira workflow and includes configuration, query, rendering, and authentication layers. Several command implementations are unsampled, so links among individual domain operations are not asserted; their capabilities are represented by the command paths in the tree.

Main entry points: [`internal/cmd/root/root.go`](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/root/root.go) (Command root), [`api/client.go`](https://github.com/ankitpokhrel/jira-cli/blob/main/api/client.go) (API adapter), [`internal/cmd/issue/issue.go`](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/issue/issue.go) (Issue operations), [`pkg/jira/client.go`](https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/jira/client.go) (Jira client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI entry"]
  node_main["Executable entry<br/>[main.go]"]
  node_root["Command root<br/>[root.go]"]
end

subgraph group_commands["Jira workflows"]
  node_issue["Issue operations<br/>[issue.go]"]
  node_epic["Epic operations<br/>[epic.go]"]
  node_sprint["Sprint operations<br/>[sprint.go]"]
  node_board["Board listing<br/>[board.go]"]
  node_project["Project operations<br/>[project.go]"]
  node_release["Release listing<br/>[release.go]"]
  node_init["Setup wizard<br/>[init.go]"]
end

subgraph group_support["Configuration and queries"]
  node_query["Issue and sprint queries<br/>[query.go]"]
  node_jql["JQL handling<br/>[jql.go]"]
  node_config["Config generation<br/>[generator.go]"]
  node_credentials["Credential lookup<br/>[client.go]"]
  node_netrc["Netrc credentials<br/>[netrc.go]"]
end

subgraph group_runtime["Jira API runtime"]
  node_api["API adapter<br/>[client.go]"]
  node_jira["Jira client<br/>[client.go]"]
  node_search["Issue search<br/>[search.go]"]
end

subgraph group_presentation["Terminal output"]
  node_views["Domain views<br/>[issue.go]"]
  node_tui["Interactive terminal UI<br/>[preview.go]"]
  node_markdown["Markdown conversion<br/>[markdown.go]"]
  node_browser["Browser navigation<br/>[browser.go]"]
end

node_user(("CLI user"))
node_keyring[("System keyring")]
node_jira_service[("Jira server")]

node_user -->|"runs command"| node_main
node_main -->|"executes"| node_root
node_root -->|"dispatches"| node_issue
node_root -->|"dispatches"| node_epic
node_root -->|"dispatches"| node_sprint
node_root -->|"dispatches"| node_board
node_root -->|"dispatches"| node_project
node_root -->|"dispatches"| node_release
node_root -->|"dispatches"| node_init
node_issue -->|"builds queries"| node_query
node_query -->|"uses"| node_jql
node_issue -->|"requests Jira data"| node_api
node_epic -->|"requests Jira data"| node_api
node_sprint -->|"requests Jira data"| node_api
node_board -->|"requests Jira data"| node_api
node_project -->|"requests Jira data"| node_api
node_release -->|"requests Jira data"| node_api
node_init -->|"generates config"| node_config
node_config -->|"validates server"| node_api
node_api -->|"resolves credentials"| node_credentials
node_credentials -->|"reads fallback"| node_netrc
node_credentials -->|"reads fallback"| node_keyring
node_api -->|"creates client"| node_jira
node_jira -->|"provides search"| node_search
node_search -->|"searches issues"| node_jira_service
node_jira -->|"sends API requests"| node_jira_service
node_issue -->|"renders issue"| node_views
node_views -->|"converts descriptions"| node_markdown
node_issue -->|"opens interactive view"| node_tui
node_issue -.->|"opens web view"| node_browser

click node_main "https://github.com/ankitpokhrel/jira-cli/blob/main/cmd/jira/main.go"
click node_root "https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/root/root.go"
click node_issue "https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/issue/issue.go"
click node_epic "https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/epic/epic.go"
click node_sprint "https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/sprint/sprint.go"
click node_board "https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/board/board.go"
click node_project "https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/project/project.go"
click node_release "https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/release/release.go"
click node_init "https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/init/init.go"
click node_query "https://github.com/ankitpokhrel/jira-cli/blob/main/internal/query/query.go"
click node_jql "https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/jql/jql.go"
click node_config "https://github.com/ankitpokhrel/jira-cli/blob/main/internal/config/generator.go"
click node_credentials "https://github.com/ankitpokhrel/jira-cli/blob/main/api/client.go"
click node_netrc "https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/netrc/netrc.go"
click node_api "https://github.com/ankitpokhrel/jira-cli/blob/main/api/client.go"
click node_jira "https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/jira/client.go"
click node_search "https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/jira/search.go"
click node_views "https://github.com/ankitpokhrel/jira-cli/blob/main/internal/view/issue.go"
click node_tui "https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/tui/preview.go"
click node_markdown "https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/adf/markdown.go"
click node_browser "https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/browser/browser.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_root,node_user toneBlue
class node_issue,node_epic,node_sprint,node_board,node_project,node_release,node_init,node_keyring,node_jira_service toneAmber
class node_query,node_jql,node_config,node_credentials,node_netrc toneMint
class node_api,node_jira,node_search toneRose
class node_views,node_tui,node_markdown,node_browser toneIndigo
```

## Components

### CLI entry

- [Executable entry](https://github.com/ankitpokhrel/jira-cli/blob/main/cmd/jira/main.go): `cmd/jira/main.go`
- [Command root](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/root/root.go): `internal/cmd/root/root.go`

### Jira workflows

- [Issue operations](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/issue/issue.go): `internal/cmd/issue/issue.go`
- [Epic operations](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/epic/epic.go): `internal/cmd/epic/epic.go`
- [Sprint operations](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/sprint/sprint.go): `internal/cmd/sprint/sprint.go`
- [Board listing](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/board/board.go): `internal/cmd/board/board.go`
- [Project operations](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/project/project.go): `internal/cmd/project/project.go`
- [Release listing](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/release/release.go): `internal/cmd/release/release.go`
- [Setup wizard](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/cmd/init/init.go): `internal/cmd/init/init.go`

### Configuration and queries

- [Issue and sprint queries](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/query/query.go): `internal/query/query.go`
- [JQL handling](https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/jql/jql.go): `pkg/jql/jql.go`
- [Config generation](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/config/generator.go): `internal/config/generator.go`
- [Credential lookup](https://github.com/ankitpokhrel/jira-cli/blob/main/api/client.go): `api/client.go`
- [Netrc credentials](https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/netrc/netrc.go): `pkg/netrc/netrc.go`

### Jira API runtime

- [API adapter](https://github.com/ankitpokhrel/jira-cli/blob/main/api/client.go): `api/client.go`
- [Jira client](https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/jira/client.go): `pkg/jira/client.go`
- [Issue search](https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/jira/search.go): `pkg/jira/search.go`

### Terminal output

- [Domain views](https://github.com/ankitpokhrel/jira-cli/blob/main/internal/view/issue.go): `internal/view/issue.go`
- [Interactive terminal UI](https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/tui/preview.go): `pkg/tui/preview.go`
- [Markdown conversion](https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/adf/markdown.go): `pkg/adf/markdown.go`
- [Browser navigation](https://github.com/ankitpokhrel/jira-cli/blob/main/pkg/browser/browser.go): `pkg/browser/browser.go`

### Other components

- **CLI user**
- **System keyring**
- **Jira server**

## Connections

- CLI user → Executable entry: runs command
- Executable entry → Command root: executes
- Command root → Issue operations: dispatches
- Command root → Epic operations: dispatches
- Command root → Sprint operations: dispatches
- Command root → Board listing: dispatches
- Command root → Project operations: dispatches
- Command root → Release listing: dispatches
- Command root → Setup wizard: dispatches
- Issue operations → Issue and sprint queries: builds queries
- Issue and sprint queries → JQL handling: uses
- Issue operations → API adapter: requests Jira data
- Epic operations → API adapter: requests Jira data
- Sprint operations → API adapter: requests Jira data
- Board listing → API adapter: requests Jira data
- Project operations → API adapter: requests Jira data
- Release listing → API adapter: requests Jira data
- Setup wizard → Config generation: generates config
- Config generation → API adapter: validates server
- API adapter → Credential lookup: resolves credentials
- Credential lookup → Netrc credentials: reads fallback
- Credential lookup → System keyring: reads fallback
- API adapter → Jira client: creates client
- Jira client → Issue search: provides search
- Issue search → Jira server: searches issues
- Jira client → Jira server: sends API requests
- Issue operations → Domain views: renders issue
- Domain views → Markdown conversion: converts descriptions
- Issue operations → Interactive terminal UI: opens interactive view
- Issue operations → Browser navigation: opens web view
