Achiever
Steam-style achievements for VS Code. Code like you normally would and unlock tiered badges as you hit milestones.
What it does
Achiever tracks everyday editor activity in the background: typing, saving, deleting files, debugging, running terminal commands, and more. When you cross a milestone you get a popup with artwork and a sound, and your full collection lives in the Achiever view in the Activity Bar. Every badge has a progress bar showing how far you are from the next tier (e.g. 500 / 1,000 keystrokes to Silver).
There are currently over 40 achievements.


Tiers
Every achievement has five tiers:
| Tier |
Numeral |
Color |
| Bronze |
I |
#CD7F32 |
| Silver |
II |
#C0C0C0 |
| Gold |
III |
#FFD700 |
| Diamond |
IV |
#5DE0E6 |
| Platinum |
V |
#C9A7FF |
Achievements
Typing & Editing: Keyboard Warrior (keystrokes), Prolific Coder (lines written), Serial Saver (file saves), Speed Demon (105+ WPM bursts), Scroll Bar Wizard (200+ character lines), Overcomplicated (10+ saves of one file in a sitting)
Time & Sessions: In The Zone (active editor time), Creature of Habit (daily streak), Marathon Coder (longest single session), Night Owl (active 10pm to 4am), Early Bird (active 4am to 7am), Weekend Warrior (weekend days coded), Livin' like Larry (active Friday 2pm to 6pm), Locked In (30 unbroken minutes in one file), One for the Books (time spent editing Markdown)
File Operations: Architect (files created), Marie Kondo (files deleted), Identity Crisis (files renamed)
Editor Actions: Clicky Clicky (mouse clicks), Terminal Velocity (terminal commands run), Bug Hunter (debug sessions started)
Editing Behavior: Ctrl+Z Enjoyer (undos), Multi-Cursor Madness (3+ cursors at once), Polyglot (different languages edited), Copy-Paste Wizard (big pastes), Deleter (characters deleted one at a time), Jarvis, Delete That (characters deleted in bulk), Emoji Coder (emoji typed into code), Vibe Coder (code that showed up without you typing it), Code Janitor (days where deletes beat writes), Orchestrator (most files edited in one sitting), "Tomorrow", right? (TODO and FIXME comments written)
Debugging & Quality: Exterminator (clearing a file's errors and warnings to zero), Red to Green (debug sessions finished without an unhandled exception), Test Driver (test file saves), Breakpoint Bandit (breakpoints set)
Source Control: Committed (git commits)
Customization & Exploration: Theme Hopper (theme switches), Tab Hoarder (most tabs open at once), Indentation Rebel (tabs vs. spaces changes), Tinkerer (settings changed), Split Personality (most editor groups side by side), Magnifying Glass (zoom changes)
Project Scope: Nomad (different workspace folders opened)
Dev Time
Run Achiever: View Time Stats from the Command Palette (or use the chart button in the Achiever view title) to open a live workspace-time dashboard.
- Choose an inclusive From/To range and group the chart by day, week, month, or year.
- Daily is the default. All Time shows every detailed sample and automatically chooses a readable grouping.
- Active time is the default metric. It uses the exact same signal as the In The Zone achievement: the VS Code window must be focused, an editor must be active, and keyboard or mouse input must have occurred within the last five minutes.
- Switch to Project Open to see wall-clock time while a workspace folder or loose-file project is open in a running VS Code window. It continues through idle time, minimized/background windows, and computer sleep while VS Code remains running.
- Stacked bars, interactive workspace filters, summary cards, and a searchable totals table update completely for the selected metric.
- Every root in a multi-root workspace accrues Project Open time. Overlapping windows for the same project are unioned and counted once, while different projects open at the same time each accrue time - so workspace totals can exceed elapsed wall-clock time.
- Detailed history stays on the local machine. It stores hashed project IDs, display names, local dates, durations, and anonymous timing/merge markers; full project paths and source code are never stored.
Detailed Active history begins when the Dev Time feature is installed. Existing lifetime Active Time remains on the profile, but it is not assigned to made-up dates or workspaces. Project Open history begins with the dual-metric release because earlier open duration cannot be reconstructed accurately.
Commands
- Achiever: View Achievement Stats opens the Achiever Activity Bar view.
- Achiever: Open Profile opens a full-page profile with your score, tier breakdown, active time, streak, and the complete achievement list.
- Achiever: View Time Stats opens the live, per-workspace coding-time dashboard.
- Achiever: Test Achievement Popup fires a sample popup so you can check the sound and visuals without grinding 50,000 keystrokes.
- Achiever: Sync Status shows when progress was last received from another device and last uploaded from this one.
- Achiever: Reset All Progress wipes all stats and unlocks (asks for confirmation first).
Settings
achiever.soundEnabled (default true)
achiever.popupEnabled (default true)
achiever.syncEnabled (default false) mirrors achievement progress across your devices. It rides on VS Code Settings Sync, so that has to be turned on too. Detailed Dev Time history is never synced.
Good to know
- The unlock popup is a small panel that opens beside your editor for a few seconds and then closes itself. VS Code doesn't give extensions a real floating overlay with images and sound, so this is the closest thing possible. It can nudge your layout briefly.
- Keystrokes are counted as characters inserted into a document, so autocomplete and pastes count too. Extensions can't see raw key presses.
- Clicks are counted as mouse-driven selection changes, since extensions can't see actual OS clicks.
- Terminal Velocity needs VS Code's shell integration to be active in the integrated terminal.
- Vibe Coder looks for multi-line insertions that didn't happen at your cursor, which is how AI agents writing to your files show up. Git pulls, merges, and checkouts are filtered out so they don't count, though the occasional
git stash pop can slip through.
- Achievement progress is stored globally, so it accumulates across every workspace you open. Detailed Dev Time history is stored locally because it grows over time and includes workspace display names.
- Sync status is shown on the profile and via Achiever: Sync Status. Settings Sync gives extensions no upload callback, so the times shown are when Achiever handed a snapshot to Settings Sync and when it last merged one in, not the exact moment the transfer happened. Incoming progress is merged when a window starts up.
- With sync on, resetting progress resets it everywhere. The reset wins over a merge on your other devices the next time they start up.
Support
If you're enjoying Achiever, you can support development on Patreon or Buy Me a Coffee. Leaving a review on the Marketplace helps a lot too!
Running from source
npm install
npm run compile
Then press F5 with this folder open to launch an Extension Development Host with Achiever loaded.