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, 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).
- 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). Failures are surfaced and logged to the JATT output channel.
- 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 open the ticket in the browser, clear the timer, manually adjust tracked time, and view the output 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)
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.
- 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.
Usage
- Configure your JIRA settings in VS Code settings under
Just Another Time Tracker.
- Ensure your branch name contains a JIRA ticket number matching your regex.
- The extension will track your active time on the ticket. Timers are per-ticket and persist when switching branches.
- Use the
Jatt: Submit Time to JIRA command from the Command Palette to submit your time. You will be prompted for a worklog comment (optional).
- If auto-submit is enabled, time will be submitted automatically at the scheduled time each day.
- Use the
Jatt: Open JIRA Ticket in Browser command to quickly open the current ticket in your browser.
- Use the
Jatt: Clear Current Ticket Timer command to reset the timer for the current ticket (with confirmation).
- Use the
Jatt: Adjust Current Ticket Time command to manually set the tracked time (e.g. "1h 30m").
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
0.1.0
- Fixed spurious repeated "1m" auto-submissions (auto-submit now fires once per day).
- Fixed silent failures and wrong-ticket resets on branch switch (switch is now awaited and serialized).
- Idle detection now tracks real activity (edits, selection, saves, focus) instead of only window focus.
- Added support for all JIRA auth methods (
basic and bearer/PAT) via jatt.authMethod.
- Time is tracked in seconds and submitted via
timeSpentSeconds with a started timestamp; time tracked during a submit is preserved. Added an output log, a "Show Output Log" command, and a "Adjust Current Ticket Time" command.
0.0.10
- All time submissions to JIRA now use the full number of minutes and are formatted as "Xh Ym" (e.g., "7h 20m") for both the API and notifications.
- Fixed a bug where only the hour portion or incorrect minutes were submitted to JIRA on branch switch, auto-submit, or manual submit.
- Code and documentation now consistently use minutes for all time calculations and display.
0.0.9
- Status bar and pop-up notifications now show time in "1h 23m" format, omitting hours if zero.
- Status bar updates immediately after time is submitted.
- Added commands to open JIRA ticket in browser and clear current ticket timer.
- Improved timer logic, branch watcher, and auto-submit configuration.
- Secure password storage and migration guidance.
0.0.8 and earlier
- See CHANGELOG.md for full history.
Following extension guidelines
Ensure that you've read through the extensions guidelines and follow the best practices for creating your extension.
Enjoy!
| |