Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Jira LinkifyNew to Visual Studio Code? Get it now.
Jira Linkify

Jira Linkify

Bootstrap360

|
2 installs
| (0) | Free
Turns Jira ticket references (ABC-123, abc-123, abc_123) into clickable links in the editor and the integrated terminal.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Jira Linkify

Turns Jira ticket references into clickable links — in the editor and in the integrated terminal.

Most Jira link extensions do one or the other, and only recognise the canonical uppercase-with-hyphen form. This one covers both surfaces and normalises the variants that show up in real branch names, log lines and commit messages:

You write It links to
ABC-123 <baseUrl>/ABC-123
abc-123 <baseUrl>/ABC-123
abc_123 <baseUrl>/ABC-123
AbC_123 <baseUrl>/ABC-123

In the editor, ctrl+click (cmd+click on macOS) the reference. In the terminal, hover and click — the link opens in your default browser, where your existing Jira session applies.

Configuration

Run Jira Linkify: Setup from the command palette to be walked through both settings, or set them by hand as below. The setup command accepts a bare host and fills in the rest.

Both settings must be set; with either left empty the extension contributes no links at all. That is deliberate — an unrestricted match would linkify UTF_8 and SHA-1.

Setting Type Description
jiraLinks.baseUrl string Jira site or base URL a key is appended to. A bare host such as yourorg.atlassian.net is accepted and becomes https://yourorg.atlassian.net/browse
jiraLinks.projectKeys string[] The project keys to linkify, e.g. ["ABC", "XY"]
jiraLinks.branchStatusBar boolean Show status-bar links for the current branch's tickets. Default true

Both are resource-scoped, so per-repository .vscode/settings.json wins over your user settings — useful when you work across Jira instances.

// .vscode/settings.json
{
  "jiraLinks.baseUrl": "https://yourorg.atlassian.net/browse/",
  "jiraLinks.projectKeys": ["ABC", "XY", "PLATFORM"]
}

Keys are matched case-insensitively, and configured keys are normalised (trimmed, uppercased, de-duplicated), so ["abc", "ABC "] behaves as ["ABC"]. Changes take effect immediately — no reload.

Finding your project keys

Jira has no anonymous project list, but you can fetch your own with an API token. The token stays in your shell — the extension never sees it and stores no credentials.

export JIRA_SITE=yourorg.atlassian.net
export JIRA_EMAIL=you@example.com
export JIRA_API_TOKEN=...

The projects you have used recently, which is usually what you want:

curl -fsSL -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
  "https://$JIRA_SITE/rest/api/3/project/recent?maxResults=20" \
  | jq '[.[].key] | sort'

Every project you can see. project/search is paginated and caps at 50 per page, so a single unpaginated call silently truncates:

start=0; while :; do
  page=$(curl -fsSL -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
    "https://$JIRA_SITE/rest/api/3/project/search?startAt=$start&maxResults=50")
  jq -r '.values[].key' <<<"$page"
  [ "$(jq -r .isLast <<<"$page")" = true ] && break
  start=$((start + 50))
done | sort -u | jq -R . | jq -s .

Both print a JSON array ready to paste into jiraLinks.projectKeys.

Paste only the keys you actually use. A large Jira site can expose hundreds of projects, many with two-letter keys, and adding them all makes the extension linkify unrelated strings such as AR-15. Keeping the list narrow is the whole point of the whitelist.

What is and isn't matched

  • Separator: - or _; the number is 1–10 digits.
  • Anything may follow the number, so ABC-123-some-slug, ABC-123_some_slug, ABC-123abc and feature/ABC-123_sdfsd all link ABC-123. Every reference in the string is matched, not just the first.
  • Anything except a letter or digit may precede the key, so FOO_ABC-123 and bugfix/ABC-123 both match.
  • MYABC-123 and 9ABC-123 do not match: a letter or digit immediately before the key means the key is part of a longer word, not a reference.
  • The number is greedy, so ABC-1234 links ABC-1234, never a truncated ABC-123 with a stray 4.
  • The whitelist is what prevents false positives, not the surrounding text: UTF_8 and SHA-1 linkify only if you configure UTF or SHA as keys.
  • A reference inside a URL is left alone, because VS Code already links the whole URL. Two overlapping links over the same characters would leave it unclickable. A reference elsewhere on the same line still links, and a markdown label like [ABC-1](https://…/ABC-1) links while its target does not.
  • The longest configured key wins, so ABCDEF-1 links as ABCDEF-1 even when both ABC and ABCDEF are configured.
  • Leading zeros are preserved: ABC-0384 links to ABC-0384.

Branch links

The ticket for the branch you are on appears in the status bar, and clicking it opens the ticket. The key may sit anywhere in the branch name, so feature/ABC-123_some-slug works as well as ABC-123-some-slug.

A branch naming more than one ticket gets one item per key, in the order they appear. Past four they collapse into a single entry that opens a pick list. Nothing is shown on a detached HEAD, on a branch with no reference, or while the extension is unconfigured.

Jira Linkify: Open ticket for current branch does the same from the command palette, and offers a pick list when the branch names several. Set jiraLinks.branchStatusBar to false to keep editor and terminal links only.

Limitations

  • The VS Code API exposes link providers for text documents and terminals only. The Output panel and Debug Console are not covered — there is no extension API for them.
  • Very large documents (over 2 MB) are skipped to keep the editor responsive, and at most 5000 references are linked per document.

Privacy

No network requests, no credentials, no telemetry. The extension only builds a URL string and asks VS Code to open it.

Development

npm install
npm run compile   # tsc -> out/
npm test          # compile + node --test out/test/
npm run lint
npm run package   # vsce package -> jira-linkify-<version>.vsix

Press F5 in VS Code to launch an Extension Development Host with the extension loaded.

Releasing

Publishing is automated by .github/workflows/publish.yml and runs on a version tag:

# bump "version" in package.json and update CHANGELOG.md first
git tag v1.0.1
git push origin v1.0.1

The workflow lints, tests, checks the tag against package.json (a mismatch fails the run), packages the .vsix and publishes it. A manual run from the Actions tab does everything except publish, uploading the .vsix as an artefact — useful for rehearsing a release.

It needs one repository secret, VSCE_PAT: an Azure DevOps token scoped to Marketplace → Manage across all accessible organisations. Set it with gh secret set VSCE_PAT (paste at the prompt, never as a command argument).

⚠️ Marketplace versions can never be reused — a bad publish means bumping the patch version, not replacing the tag. Note also that global Azure DevOps PATs stop working on 2026-12-01; publishing then moves to Microsoft Entra ID via vsce publish --azure-credential, which needs @vscode/vsce 3.9.2 or newer.

Licence

MIT

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft