Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Just Another Time TrackerNew to Visual Studio Code? Get it now.
Just Another Time Tracker

Just Another Time Tracker

VOSS Solutions

|
10 installs
| (0) | Free
Tracks time spent on JIRA tickets based on branch name, with idle timeout and JIRA integration.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Track your time with JATT

This VS Code extension tracks time spent on JIRA tickets based on the current branch name, with idle timeout, per-ticket timers, and JIRA integration.

Features

  • Configurable regex pattern to match a JIRA ticket number from the current branch name.
  • Tracks active editing time while the branch is checked out, with per-ticket timers (switching branches preserves time).
  • Real activity-based idle detection: the timer pauses after the configured idle timeout of no edits, selection changes, saves, terminal commands, debug activity, or focus, and resumes on activity. Optionally keep counting while the window is unfocused.
  • Works with any JIRA flavor: HTTP Basic (username + API token/password) or Bearer (Personal Access Token for Server/Data Center), selectable via jatt.authMethod.
  • Secure credential storage using VS Code Secret Storage (never visible in settings), kept separately per auth method so switching methods doesn't reuse the wrong secret. Newly entered credentials are verified to have persisted.
  • Manual, scheduled (auto), and on-branch-switch submission, with configurable schedule, time-zone offset, and worklog comment prompt. Auto-submit fires exactly once per day.
  • Robust submission: time is sent as timeSpentSeconds with a proper started timestamp, and only the submitted amount is deducted (time tracked during the network call is preserved). A response is only trusted as success if it's an actual JIRA worklog reply — if the request is bounced to a SAML/SSO login page (e.g. off VPN), it reports a clear error and keeps your time instead of silently discarding it.
  • Persistent log: all submissions and failures are written to the JATT output channel and to a log file that survives restarts.
  • Status bar showing the current ticket and timer (with a pause icon when idle), clickable to submit. Time is shown in "1h 23m" format, omitting hours if zero.
  • Commands to submit time, open the ticket in the browser, clear/adjust the timer, set or revoke the stored credential, and view the log.

Requirements

  • Git must be installed and the workspace must be a git repository.
  • JIRA server accessible from your environment.

Extension Settings

This extension contributes the following settings:

  • jatt.jiraUrl: JIRA server URL (e.g., https://jira.example.com)
  • jatt.jiraUsername: JIRA username (basic auth only; on Cloud this is your account email). Ignored for bearer.
  • jatt.authMethod: basic (username + API token/password) or bearer (Personal Access Token, Server/DC 8.14+). Default: basic.
  • jatt.branchRegex: Regex pattern to extract JIRA ticket from branch name (default: [A-Z]+-\d+)
  • jatt.idleTimeout: Idle timeout in seconds before timer pauses (default: 300, minimum: 1). Idle is re-evaluated every 10 seconds, so values under 10 behave about the same.
  • jatt.countWhenUnfocused: Keep counting while the window is unfocused, until the idle timeout (default: false)
  • jatt.autoSubmitEnabled: Enable automatic JIRA time submission at a scheduled time (default: false)
  • jatt.autoSubmitSchedule: Auto-submit schedule in the format 'hh:mm' (24h). Leave empty to disable.
  • jatt.autoSubmitTimezone: Fixed UTC offset (e.g., '+02:00', '-0500') for auto-submit (for container/remote support).

Note: Your JIRA credential (API token, PAT, or password) is stored securely using VS Code Secret Storage. You will be prompted for it the first time it is needed, and it is retained until you change or revoke it — it does not expire.

  • JIRA Cloud (*.atlassian.net): set authMethod to basic, jiraUsername to your email, and use an API token as the credential.
  • JIRA Server/Data Center: use bearer with a Personal Access Token, or basic with your username + password.

Set jatt.authMethod in your User settings (not just a workspace) so every window and branch uses the same method — see Troubleshooting.

Commands

All commands are available from the Command Palette under the Jatt category:

  • Jatt: Submit Time to JIRA — submit the current ticket's tracked time (prompts for an optional worklog comment).
  • Jatt: Open JIRA Ticket in Browser — open the current ticket in your browser.
  • Jatt: Clear Current Ticket Timer — reset the current ticket's timer (with confirmation).
  • Jatt: Adjust Current Ticket Time — manually set the tracked time (e.g. "1h 30m", "90m", "45").
  • Jatt: Set/Update JIRA Credential — (re)enter the stored secret for the current auth method; use after rotating a JIRA token.
  • Jatt: Clear/Revoke Stored JIRA Credential — delete the stored secret for the current auth method.
  • Jatt: Show Output Log — open the JATT output channel.
  • Jatt: Open Persistent Log File — open the on-disk log file (survives restarts).

Usage

  1. Configure your JIRA settings in VS Code settings under Just Another Time Tracker.
  2. Ensure your branch name contains a JIRA ticket number matching your regex.
  3. The extension tracks your active time on the ticket. Timers are per-ticket and persist when switching branches.
  4. Run Jatt: Submit Time to JIRA (or click the status bar item) to submit; you'll be prompted for an optional worklog comment.
  5. If auto-submit is enabled, time is submitted automatically at the scheduled time each day.
  6. When you rotate your JIRA token, run Jatt: Set/Update JIRA Credential to replace the stored one.

Troubleshooting

You keep getting re-prompted for your credential / it seems to "forget" your token. The credential itself doesn't expire and isn't cleared by JATT. This almost always means the effective jatt.authMethod differs from the one your token was saved under: credentials are stored per method, so if a window resolves authMethod to a different value, it looks in the wrong (empty) slot and prompts. This commonly happens when authMethod is set only in a workspace's .vscode/settings.json (which can be git-tracked and therefore vary by branch) or diverges via Settings Sync / profiles.

  • Fix: set jatt.authMethod in your User settings so it applies to every window and branch.
  • Diagnose: Jatt: Show Output Log — each credential lookup logs which scope supplied the value, e.g. Auth method resolved to "bearer" from user (bearer) vs ... from unset — defaulting to basic.

On Linux, credentials don't persist across restarts. VS Code Secret Storage relies on an OS keyring (gnome-keyring/kwallet via libsecret). If none is installed or unlocked, secrets can't be saved and you'll be re-prompted. JATT verifies newly entered credentials and warns if the keychain didn't retain them. Install/unlock a keyring, or launch VS Code with a suitable --password-store.

Submitted time doesn't appear in JIRA (e.g. off VPN). Off the VPN, JIRA may redirect the request to a SAML/SSO login page. JATT detects this (the response isn't a real worklog reply), reports an error, and keeps your tracked time so you can resubmit once you're back on the VPN.

Known Issues

  • JIRA API integration assumes the standard JIRA REST API v2 (/rest/api/2). Custom setups may require changes.
  • By default time only accrues while the VS Code window is focused (toggle with jatt.countWhenUnfocused).
  • Auto-submit supports a single time per day (no day-of-week selection).

Release Notes

See CHANGELOG.md for the full history. Recent highlights:

0.2.1

  • Off-VPN submissions that were silently swallowed by a SAML/SSO redirect now report a clear error and keep your tracked time.
  • Persistent log file (survives restarts) plus a Jatt: Open Persistent Log File command.
  • Jatt: Clear/Revoke Stored JIRA Credential command; newly entered credentials are verified to have persisted, with a warning when the OS keychain can't store them.
  • Clearer diagnostics when jatt.authMethod isn't set globally and a credential for the other method exists.

0.1.1

  • Credentials are stored per auth method, so switching between basic and bearer no longer reuses the wrong secret. Added Jatt: Set/Update JIRA Credential.

0.1.0

  • Auto-submit fires once per day; branch-switch submissions are awaited and serialized; idle detection tracks real activity; added basic/bearer auth support; time tracked in seconds with a preserved remainder during submit.
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft