An Azure DevOps Marketplace extension that adds a Time Log tab to every work item form, enabling team members to record time entries directly inside Azure Boards.
- ⏱ Log time entries (hours + minutes) per work item
- 👤 Automatically captures the current user
- 📅 Date picker for the entry date
- 📋 Displays all entries in a clean table with a running total
- 🗑 Delete any entry inline
- 💾 Data stored directly on the work item (no external services required)
- Node.js ≥ 18
- An Azure DevOps organization
- A Visual Studio Marketplace publisher account
- A custom work item field (see Setup below)
Time entries are stored as JSON in a custom work item field. You need to create this field in your process template:
- Go to Organization Settings → Boards → Process
- Select your process (e.g., Agile, Scrum, CMMI)
- Select a work item type (or add to all types via "All")
- Click New field → Choose Text (multiple lines)
- Set the Reference Name to exactly:
Custom.ADOClockTimeEntries - Set the Name to:
ADO Clock Time Entries - Optional: uncheck "Show field on form" (the extension manages it via its own tab)
npm installnpm run buildOutputs dist/time-tracker.js and dist/time-tracker.css.
Before packaging, update vss-extension.json:
- Set
publisherto your registered marketplace publisher ID - Set
publictotruewhen ready for public release
npm run packageThis generates a .vsix file in the project root.
Via CLI:
npx tfx-cli extension publish --vsix <file>.vsix --token <your-PAT>Or upload directly via Manage Extensions in the marketplace.
adoclock/
├── src/
│ ├── time-tracker.ts # Extension logic (TypeScript)
│ ├── time-tracker.html # iframe host page
│ └── time-tracker.css # Styles
├── dist/ # Built output (generated)
├── images/
│ └── extension-icon.png # Marketplace icon
├── vss-extension.json # Extension manifest
├── package.json
├── tsconfig.json
└── webpack.config.js
Each time entry stored in Custom.ADOClockTimeEntries:
[
{
"id": "lc7f4k2abc",
"user": "Jane Doe",
"date": "2026-03-11",
"hours": 2,
"minutes": 30
}
]MIT