vTime
Track how long you actively spend coding in each file — stored entirely on your machine.
No accounts. No API keys. No telemetry. No network requests.
Features
- Per-file time tracking — active coding time tracked per absolute file path, including remote IBM i files
- Idle detection — 30-second heartbeat prevents idle time from inflating counts
- Language detection — determined from VS Code
languageId with file extension fallback; supports 40+ languages including RPG, RPGLE, SQLRPGLE, and CLLE
- Hover tooltip — hover anywhere in a file to see total time, today's time, and last active timestamp
- Dashboard — a full breakdown with stat cards, ASCII language chart, sortable files table, and search/filter
- Streak counter — tracks consecutive days of coding activity
- Daily goal — set a daily coding goal in settings and track your progress with a goal bar
- Workspace grouping — group tracked files by VS Code workspace folder
- Export — export all tracked data as CSV or JSON
- Daily reset — the "today" counter resets automatically each new day
- IBM i support — tracks files opened via the IBM i VS Code extension (member, streamfile)
- Fully offline — no outbound connections of any kind, ever
Getting Started
- Install the extension.
- Open any file. Tracking starts automatically.
- Hover over the file to see elapsed time inline.
- Press
Ctrl+Shift+T (Cmd+Shift+T on macOS) to open the dashboard, or run vTime: Open Dashboard from the command palette.
- Check the status bar (bottom-right) for a live today total.
Dashboard
The dashboard opens as a VS Code webview tab and shows:
- Summary cards — total all-time, today's total, current streak, and languages detected
- Today's goal bar — visual progress toward your daily coding goal (if configured)
- Language chart — ASCII bar chart per language showing total and today's time
- Files table — all tracked files with per-file totals, today's time, and relative last-active time
Table controls
| Control |
Description |
| Click any column header |
Sort the table by that column |
| Search box |
Filter rows by filename, language, or workspace |
| Group button |
Toggle workspace folder grouping |
| Export button |
Save all data as CSV or JSON |
Commands
| Command |
Shortcut |
Description |
vTime: Open Dashboard |
Ctrl+Shift+T / Cmd+Shift+T |
Opens the time tracking dashboard |
vTime: Show File Time |
Right-click a file in Explorer |
Shows a quick summary for a single file |
vTime: Export Data |
Command palette |
Exports all tracked data to CSV or JSON |
Settings
| Setting |
Default |
Description |
vtime.dailyGoalHours |
0 |
Daily coding goal in hours. Set to 0 to hide the goal bar. |
How Tracking Works
The tracker listens to two VS Code events:
| Event |
Purpose |
onDidChangeActiveTextEditor |
Switches the active tracking session to the new file |
onDidChangeTextDocument |
Records a heartbeat to confirm active coding |
Time is only committed when the gap between the last heartbeat and the current moment is within 30 seconds. Switching away from a file or sitting idle longer than 30 seconds stops the clock.
Supported URI schemes: file, member, streamfile, vscode-remote, ssh, sftp, ftp.
Data Storage
All data lives in a single JSON file on your machine:
$XDG_CONFIG_HOME/Code/User/globalStorage/vtime/vtime-data.json
Each file entry has the following shape:
{
"__v": 2,
"activeDates": ["2026-07-15", "2026-07-16"],
"files": {
"/absolute/path/to/file.ts": {
"language": "typescript",
"totalSeconds": 3720,
"secondsToday": 540,
"lastActive": 1720000000000,
"lastActiveDate": "2026-07-16"
}
}
}
You can inspect, back up, or delete this file at any time.
Project Structure
src/
extension.ts entry point — registers all providers and commands
tracker.ts heartbeat-based time tracking engine
storage.ts local JSON file storage with streak tracking
hoverProvider.ts hover tooltip showing per-file time stats
dashboardPanel.ts webview dashboard with charts, table, and export
utils.ts shared helpers (formatDuration, formatRelativeTime, etc.)
Privacy
- No network requests of any kind.
- No telemetry. VS Code built-in telemetry is not used.
- No accounts, no sign-in, no sync.
- Data stays in your VS Code global storage folder and nowhere else.
License
MIT