[!CAUTION] Still in early development, will have breaking changes!
A Neovim plugin for managing JIRA tasks with a beautiful UI.
[!NOTE] Disucssion: How do you want to create, edit the jira ticket in this plugin? https://github.com/letieu/jira.nvim/discussions/1
lazy.nvim{
"letieu/jira.nvim",
opts = {
-- Your setup options...
jira = {
limit = 200, -- Global limit of tasks per view (default: 200)
},
},
}
The plugin uses a command-based authentication system. Run the following command to log in:
:Jira auth login
https://your-domain.atlassian.net or https://jira.yourcompany.com)basic (default) or bearer / patbasic):Jira auth info to see the exact path).Other auth commands:
:Jira auth info: Show current authentication status and file location.:Jira auth logout: Remove stored credentials.require('jira').setup({
-- Jira settings
jira = {
api_version = "3", -- API version: "2" (Self-Hosted/Server/DC) or "3" (Cloud, default)
limit = 200, -- Global limit of tasks per view (default: 200)
logging = false, -- Enable HTTP request/response logging (default: false)
-- Optional: configure auth directly in setup instead of :Jira auth login
-- base = "https://jira.yourcompany.com",
-- type = "bearer", -- "basic" (default) or "bearer" / "pat"
-- token = "YOUR_PAT_OR_API_TOKEN",
-- email = "your_email_or_username", -- Required for "basic" auth
},
active_sprint_query = "project = '%s' AND sprint in openSprints() ORDER BY Rank ASC",
-- Saved JQL queries for the JQL tab
-- Use %s as a placeholder for the project key
queries = {
["Next sprint"] = "project = '%s' AND sprint in futureSprints() ORDER BY Rank ASC",
["Backlog"] = "project = '%s' AND (issuetype IN standardIssueTypes() OR issuetype = Sub-task) AND (sprint IS EMPTY OR sprint NOT IN openSprints()) AND statusCategory != Done ORDER BY Rank ASC",
["My Tasks"] = "assignee = currentUser() AND statusCategory != Done ORDER BY updated DESC",
},
-- Project-specific overrides
-- Still think about this config, maybe not good enough
projects = {
["DEV"] = {
story_point_field = "customfield_10035", -- Custom field ID for story points
custom_fields = { -- Custom field to display in markdown view
{ key = "customfield_10016", label = "Acceptance Criteria" }
},
}
}
})
Note: When
logging = true, HTTP requests/responses are logged to~/.local/state/nvim/jira_nvim.logwith sensitive auth tokens redacted.
Run the following command to open the Jira board:
" Authentication
:Jira auth login
:Jira auth info
:Jira auth logout
" Open board
:Jira <PROJECT_KEY>
" Open one task view (info)
:Jira info ISSUE_KEY
" Create new issue
:Jira create [PROJECT_KEY]
" Edit existing issue
:Jira edit ISSUE_KEY
If you don't provide a project key, you will be prompted to enter one.
H — Show help<Tab> — Toggle node (Expand / Collapse)S, J, H — Switch view (Sprint, JQL, Help)q — Close boardr — Refresh current viewi — Create issue / sub-task (under cursor)K — Quick issue details (popup)gd — Read task as infoge — Edit taskgx — Open task in browsergs — Update statusga — Change assigneegw — Add timegb — Checkout / create branchgo — Show child issues (sub-tasks)https://your-domain.atlassian.net/rest/api/3/fieldmake test
Big thanks for gemini CLI free tier.
MIT © Tieu Le
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!