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? letieu#1
- 📋 View active sprint tasks
- 👥 Query tasks by custom JQL
- 📝 Read task as markdown
- 🔄 Change task status
- ⏱️ Log time on tasks
- 👤 Assign tasks
- 🎨 Git integration
- 🎨 Comment
- 🎨 Create, edit task
- ⏱️ Work report
{
"letieu/jira.nvim",
opts = {
-- Your setup options...
jira = {
base = "https://your-domain.atlassian.net", -- Base URL of your Jira instance
email = "your-email@example.com", -- Your Jira email (required for basic auth)
token = "your-api-token", -- Your Jira API token or bearer token
auth_type = "basic", -- "basic" (default) or "bearer"
api_version = "3", -- Jira API version: "2" or "3" (default: "3")
use_jql_post = true, -- Use /search/jql endpoint (default: true). Set to false for /search
resolve_current_user = false, -- Replace currentUser() with accountId in JQL (default: false)
debug = false, -- Enable debug logging for API calls (default: false)
limit = 500, -- Global limit of tasks per view
},
},
}require('jira').setup({
-- Jira connection settings
jira = {
base = "https://your-domain.atlassian.net", -- Base URL of your Jira instance
email = "your-email@example.com", -- Your Jira email (required for basic auth)
token = "your-api-token", -- Your Jira API token or bearer token
auth_type = "basic", -- "basic" (default) or "bearer"
api_version = "3", -- Jira API version: "2" or "3" (default: "3")
use_jql_post = true, -- Use /search/jql endpoint (default: true). Set to false for /search
resolve_current_user = false, -- Replace currentUser() with accountId in JQL (default: false)
debug = false, -- Enable debug logging for API calls (default: false)
limit = 500, -- Global limit of tasks per view
},
-- Saved JQL queries for the JQL tab
-- Use %s as a placeholder for the project key
queries = {
["Backlog"] = "project = '%s' 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" }
},
}
}
})Run the following command to open the Jira board:
"Open board
:Jira <PROJECT_KEY>
"Open one task view
:Jira info ISSUE_KEYIf you don't provide a project key, you will be prompted to enter one.
| Key | Action |
|---|---|
H |
Show help |
- How to get custom field list -> go to
https://your-domain.atlassian.net/rest/api/3/field
make test- Jira sprint board
- Config
- Expand, Collapse
- Read task (Markdown)
- Format time
- Backlog (via JQL Dashboard)
- Custom JQL & Saved Queries
- Change status
- Change assignee
- Log time
- Comment
- Create, Edit task
- Update UI when terminal size change ...
Big thanks for gemini CLI free tier.
MIT © Tieu Le
Thanks goes to these wonderful people (emoji key):
Guennadi Maximov C 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!
