Task Time Tracker
February 2, 2026 Β· View on GitHub
A powerful Visual Studio Code extension for tracking time spent on tasks directly from your Git branches. Automatically detect ticket IDs from branch names and track your work time with precision.
![]()
π¦ Install from VS Code Marketplace
β¨ Features
π― Automatic Ticket Detection
- Automatically extracts ticket IDs from Git branch names (e.g.,
feat/GDD-750_my-feature) - Supports multiple ticket prefix patterns (configurable)
- Works with any ticket system (Jira, GitHub Issues, Linear, etc.)
β±οΈ Time Tracking
- Precise time calculation in days with configurable increments (0.1, 0.2, 0.5, 1, etc.)
- Detailed time breakdown showing days, hours, minutes, and seconds spent on each ticket
- Multiple work sessions support with automatic pause/resume
- Real-time tracking for active tickets with live time updates
- Configurable working hours (24h or 12h format)
- Customizable time increment for rounding (default: 0.5 days)
- Days off configuration: Exclude specific days of the week from time tracking (e.g., weekends)
- Automatic time calculation based on configured work hours
- Smart period merging to avoid double-counting overlapping work periods
![]()
π Smart Branch Management
- Automatic pause of active tickets when switching branches
- Automatic resume of tracking when switching to a tracked ticket's branch
- One-click branch checkout by double-clicking on a tracked ticket
π Visual Interface
- Custom panel in Source Control view
- Current branch display with ticket information
- Collapsible monthly tracking sections
- Visual indicators for ticket status:
- β Coffee icon: Completed/Paused tickets
- βοΈ Edit session icon: Active tickets
- Quick settings panel showing current configuration
π€ Export to Spreadsheet
- Export monthly tracking to spreadsheet files
- Multiple formats supported:
- XLSX (Excel)
- ODS (OpenDocument Spreadsheet)
- CSV (Comma-separated values)
- Configurable output path for exported files
- Automatic file opening with configured application (optional)
- Comprehensive data including:
- Ticket ID and branch name
- Author information
- Time spent (days and detailed breakdown)
- Status and completion date
![]()
π¨ User Experience
- Quick actions directly from the panel:
- Add ticket to tracking
- Remove ticket from tracking
- Mark ticket as completed
- Resume paused ticket
- Delete ticket
- Open ticket in browser
- Checkout associated branch
- Export month to spreadsheet
- Real-time updates when Git branch changes
- Automatic refresh every minute for active tickets
- Internationalization (i18n): Choose between English and French
- Flexible storage: Save tracking data in workspace settings or user settings
- One-click migration: Easily migrate tracking data between workspace and user settings

βοΈ Configuration
- Ticket base URL: Configure your ticket system URL

- Branch prefixes: Customize ticket prefix patterns (e.g.,
EDI,GDD) - Working hours: Set start and end times (24h or 12h format)
- Days off: Configure which days of the week should be excluded from time tracking
- Time format: Choose between 24h and 12h display format
- Language: Choose between English and French for the extension interface
- Storage location: Choose to save tracking data in workspace settings (project-specific) or user settings (global)
- Export settings: Configure export format, output path, and application to open files
π¦ Installation
From VS Code Marketplace
Install from VS Code Marketplace
Or manually:
- Open VS Code
- Go to Extensions (Ctrl+Shift+X / Cmd+Shift+X)
- Search for "Task Time Tracker"
- Click Install
From VSIX File
- Download the
.vsixfile from the Releases page - Open VS Code
- Go to Extensions
- Click the
...menu and select "Install from VSIX..." - Select the downloaded file
π Quick Start
-
Configure your ticket system URL:
- Open VS Code Settings (Ctrl+, / Cmd+,)
- Search for "Task Time Tracker"
- Set
Task Time Tracker: Ticket Base Url(e.g.,https://your-company.atlassian.net/browse)
-
Configure branch prefixes (optional):
- Set
Task Time Tracker: Branch Prefixes(default:["EDI", "GDD"])
- Set
-
Set your working hours:
- Configure
Task Time Tracker: Work Start HourandWork End Hour - Choose your preferred time format (24h or 12h)
- Configure
-
Start tracking:
- Create a branch with a ticket ID (e.g.,
feat/GDD-750_my-feature) - Open the Source Control panel
- Find the "Task Time Tracker" tab
- Click the "Add to tracking" button next to your branch
- Create a branch with a ticket ID (e.g.,
π Usage
Adding a Ticket to Tracking
- Ensure your current branch contains a ticket ID matching your configured prefixes
- In the Task Time Tracker panel, click the "Add to tracking" button (π icon)
- The ticket will be automatically added to the current month's tracking
Managing Tickets
- Mark as completed: Click the checkmark icon on an active ticket
- Resume tracking: Click the refresh icon on a completed ticket
- Delete ticket: Click the trash icon
- Open ticket: Click the external link icon to open the ticket in your browser
- Checkout branch: Double-click on a ticket to checkout its associated branch
Viewing Tracking Data
- Expand the monthly sections (e.g., "Suivi dΓ©cembre 2025") to see all tracked tickets
- Each ticket displays:
- Ticket ID
- Status (En cours / Completion date)
- Time spent in days (rounded to configured increment)
- Precise time breakdown in format:
Xj Yh Zm(days, hours, minutes)- Example:
2j 5h 30mmeans 2 days, 5 hours, and 30 minutes - Only non-zero units are displayed
- Seconds are shown only if all other units are zero
- Example:
- Associated branch name
Exporting Monthly Tracking
- In the Task Time Tracker panel, expand a monthly section (e.g., "Suivi dΓ©cembre 2025")
- Click the table icon (π) next to the month title
- Choose to export only your tickets or all tickets
- The file will be generated in the configured format (XLSX, ODS, or CSV)
- If configured, the file will automatically open with your specified application
- The exported file contains:
- Ticket ID
- Branch name
- Author
- Time spent (days and detailed breakdown)
- Status
- Completion date
Managing Storage Location
- In the Task Time Tracker panel, expand the "Current Settings" section
- Find the "Storage location" line showing either "Workspace" or "User"
- Click on the storage location line to migrate your tracking data
- The extension will automatically:
- Copy all tracking data to the new location
- Update the storage preference
- Remove data from the old location
- This is useful when:
- You want to share tracking data across multiple projects (use User settings)
- You want project-specific tracking (use Workspace settings)
Configuring Days Off
- In the Task Time Tracker panel, expand the "Current Settings" section
- Find the "Days off" line showing your currently configured days off (or "No days off configured")
- Click on the "Days off" line to open the configuration dialog
- Select the days of the week when you don't work (e.g., Saturday and Sunday)
- Selected days will be excluded from all time calculations
- This is useful for:
- Excluding weekends from your time tracking
- Excluding specific weekdays when you don't work
- Ensuring accurate time calculations that only count working days
Automatic Features
- Branch switching: When you switch Git branches, active tickets are automatically paused
- Auto-resume: If you switch to a branch whose ticket is already tracked, tracking automatically resumes
- Real-time updates: Time spent is calculated in real-time for active tickets
βοΈ Configuration Options
| Configuration | Description | Default | Example |
|---|---|---|---|
task-time-tracker.ticketBaseUrl | Base URL for your ticket system. The ticket ID will be appended to this URL. | "" | https://your-company.atlassian.net/browse |
task-time-tracker.branchPrefixes | Array of branch prefixes to detect ticket IDs from. | ["EDI", "GDD"] | ["EDI", "GDD", "TASK"] |
task-time-tracker.workStartHour | Hour when your work day starts (24h format, 0-23). | 9 | 9 |
task-time-tracker.workEndHour | Hour when your work day ends (24h format, 0-23). | 18 | 18 |
task-time-tracker.timeFormat | Time display format: "24h" or "12h". | "24h" | "24h" or "12h" |
task-time-tracker.workStartHour12h | Work start hour in 12h format (1-12). Used when timeFormat is "12h". | 9 | 9 |
task-time-tracker.workStartPeriod | AM/PM period for work start. Used when timeFormat is "12h". | "AM" | "AM" or "PM" |
task-time-tracker.workEndHour12h | Work end hour in 12h format (1-12). Used when timeFormat is "12h". | 6 | 6 |
task-time-tracker.workEndPeriod | AM/PM period for work end. Used when timeFormat is "12h". | "PM" | "AM" or "PM" |
task-time-tracker.timeIncrement | Time increment in days for tracking. Time spent will be rounded to this increment. Minimum: 0.1, Maximum: 1, Must be a multiple of 0.1. | 0.5 | 0.1, 0.2, 0.5, 1 |
task-time-tracker.excelOutputPath | Output directory path for exported spreadsheet files. If empty, files will be saved in the current workspace directory. | "" | /Users/username/Documents/exports |
task-time-tracker.excelExecutable | Path to the executable application to open exported files automatically. If empty, files will not be opened automatically. On macOS, you can use .app bundle paths. | "" | macOS: /Applications/Microsoft Excel.appLinux: /usr/bin/libreofficeWindows: C:\Program Files\Microsoft Office\Office16\EXCEL.EXE |
task-time-tracker.excelExportFormat | Export format for monthly tracking files. Options: "xlsx" (Microsoft Excel), "ods" (OpenDocument), "csv" (Comma-separated values). | "xlsx" | "xlsx", "ods", "csv" |
task-time-tracker.language | Extension language. Options: "en" (English) or "fr" (French). | "en" | "en", "fr" |
task-time-tracker.useGlobalStorage | Save tracking data in user settings instead of workspace settings. When enabled, data is stored globally and shared across all workspaces. | true | true, false |
task-time-tracker.daysOff | Array of days of the week to exclude from time tracking. Values: 0 (Sunday), 1 (Monday), 2 (Tuesday), 3 (Wednesday), 4 (Thursday), 5 (Friday), 6 (Saturday). | [] | [0, 6] (weekends), [1, 2, 3, 4, 5] (weekdays only) |
π― How It Works
Ticket Detection
The extension uses regex patterns to extract ticket IDs from branch names:
- Pattern:
{PREFIX}-{NUMBER}(case-insensitive) - Example:
feat/GDD-750_my-featureβGDD-750
Time Calculation
Time is calculated based on:
- Working hours: Only time within your configured work hours counts
- Days off: Days configured as "days off" are completely excluded from time calculations
- Increments: Time is rounded to your configured increment (default: 0.5 days) for the days display
- Precise calculation: Detailed breakdown (days, hours, minutes, seconds) is calculated separately and shown alongside the rounded days
- Minimum: Minimum tracked time equals your configured time increment
- Multiple sessions: Overlapping periods on the same day are automatically merged to avoid double-counting
- Real-time updates: For active tickets, the precise time is recalculated every minute
Data Storage
Tracking data can be stored in either workspace settings or user settings:
- Workspace settings (default): Data is stored in
.vscode/settings.jsonand is project-specific - User settings: Data is stored globally and shared across all workspaces
- Easy migration: Click on the storage location in the quick settings to migrate data between workspace and user settings
- Organized by month and year
- Each ticket contains:
- Ticket ID and full URL
- Branch name
- Work periods (start/end dates)
- Author information
- Calculated time spent (in days, rounded to increment)
- Precise time spent (days, hours, minutes, seconds) - automatically recalculated on each access
π οΈ Development
Prerequisites
- Node.js 20+
- npm or yarn
- VS Code
Setup
# Clone the repository
git clone https://github.com/MisterGoodDeal/task-time-tracker.git
cd task-time-tracker
# Install dependencies
npm install
# Compile TypeScript
npm run compile
# Run tests
npm test
# Run linter
npm run lint
Building
# Build VSIX package
npm run package
# The VSIX file will be in the build/ directory
Testing
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run linter
npm run lint
# Fix linting issues automatically
npm run lint:fix
π License
MIT License - see LICENSE.md for details
π€ Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Clone the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
π§ Support
If you encounter any issues or have feature requests, please open an issue on GitHub.
π Acknowledgments
- Built with VS Code Extension API
- Icons from Codicons
Made with β€οΈ for developers who want to track their time efficiently