A lightweight time tracking extension for Azure DevOps that runs directly in your browser. Log time against work items and generate reports - no backend server required.
Log hours directly from any work item's "Time Tracking" tab
View and filter all time entries with summary statistics and CSV export
- Log hours spent on any work item
- Add date and description
- View all time entries for the current work item
- Delete your own entries
- Gentle reminder when closing work items without logged time
- Filter by date range, user, epic, project, client, and tags
- Summary cards showing total hours, entries, users, and work items
- Multiple views:
- All Entries: Detailed list of all time entries
- By User: Hours aggregated per team member
- By Epic: Hours aggregated per epic
- By Project: Hours aggregated per project
- By Client: Hours aggregated per client
- By Tag: Hours aggregated per tag
- Monthly Report: Matrix view for invoicing
- Export to CSV for external processing/invoicing
- Node.js and npm installed
- Azure DevOps organization
- Publisher account on Visual Studio Marketplace
-
Install the TFX CLI
npm install -g tfx-cli
-
Update the manifest
Edit
vss-extension.jsonand replaceYOUR_PUBLISHER_IDwith your actual publisher ID. -
Add an icon
Place a 128x128 PNG icon at
static/icon.png -
Package the extension
tfx extension create --manifest-globs vss-extension.json
-
Upload to your organization
- Go to your Azure DevOps organization settings
- Navigate to Extensions > Browse marketplace > Manage extensions
- Upload the generated
.vsixfile - Or publish to the marketplace:
tfx extension publish --manifest-globs vss-extension.json
- Open any work item (User Story, Bug, Task, etc.)
- Click on the "Time Tracking" tab
- Enter hours, select date, add optional description
- Click "Log Time"
- Go to Boards > Time Reports
- Set your date range and filters
- Switch between different views (All Entries, By User, By Epic, By Tag)
- Click "Export CSV" to download the data
The extension can optionally use custom fields to track Project and Client for each time entry. This is useful for agencies or teams working on multiple projects/clients.
If you want project/client tracking:
- Go to Organization Settings > Process
- Select your process (e.g., Agile, Scrum)
- Click on a work item type (e.g., User Story)
- Add two new fields:
- Name:
Project| Type: Text | Reference name:Custom.Project - Name:
Client| Type: Text | Reference name:Custom.Client
- Name:
If these fields don't exist, the extension will still work - entries will simply show "(No Project)" and "(No Client)".
Time entries are stored using Azure DevOps Extension Data Service with collection-scoped storage. This means:
- All time entries are visible to all team members
- The Scrum Master (or anyone) can export all team data
- Data persists across sessions
- Data is tied to your Azure DevOps organization/collection
- Data is partitioned by month for performance
- Epic association works for standard hierarchy (Epic > Feature > User Story)
- CSV export includes all filtered entries
- Users can only delete their own time entries
- Custom.Project and Custom.Client fields must use exact reference names if you want project/client tracking
To test locally:
# Install dependencies (if adding any)
npm install
# Create the package
tfx extension create --manifest-globs vss-extension.json
# For development, you can use --rev-version to auto-increment
tfx extension create --manifest-globs vss-extension.json --rev-versionazdo-timetracker/
├── vss-extension.json # Extension manifest
├── README.md # This file
├── src/
│ ├── time-entry.html # Work item form page
│ └── time-report.html # Reports hub
└── static/
└── icon.png # Extension icon (add your own)
MIT License - see LICENSE file for details.
This software is provided "as is", without warranty of any kind. Use at your own risk.