CodeSprint
CodeSprint is a lightweight productivity companion for programming students and professional developers. It lives in the VS Code sidebar and helps you build a consistent coding habit with a Pomodoro focus timer, daily goals, streak tracking and simple statistics.
Everything is stored locally. There is no account, no backend and no telemetry, and your source code is never read or transmitted.
Features
- Focus timer - 25 minute focus sessions, 5 minute short breaks and 15 minute long breaks (all configurable). Start, pause, resume, reset and switch between session types.
- Accurate and reliable - the timer runs in the extension host and is calculated from timestamps, so it keeps counting while you switch tabs, close the sidebar or reload VS Code. A session that finishes while VS Code is closed is credited correctly the next time it opens.
- Daily goal - choose a target with presets (30m, 1h, 2h, 3h) or a custom value, and track completed focus time with a progress indicator.
- Statistics - today's focus time, total completed sessions, weekly focus time, goal completion, current streak and longest streak.
- Consistency tracking - a seven day overview, active days this week and in total. Only completed focus sessions count; abandoned or reset sessions never do.
- Motivational reminders - over 35 inspiring, professional developer quotes displayed at configurable intervals (via non-intrusive status bar messages, notifications, or on-demand via the command palette), alongside daily dashboard reminders and milestone messages after completed sessions.
- Status bar timer - always-visible countdown; click to start, pause or resume.
- Notifications - a native VS Code notification when a session ends, with a one-click button to start the suggested break or the next focus session.
- Themes - Light, Dark or System Default (follows your VS Code theme).
- Accessible - full keyboard navigation, visible focus outlines, screen reader labels and a layout designed for narrow sidebars and display scaling.
Installation
From a VSIX file
- Open VS Code.
- Open the Extensions view (
Ctrl+Shift+X / Cmd+Shift+X).
- Select the
... menu at the top of the view and choose Install from VSIX...
- Pick
codesprint-1.3.0.vsix.
Or from a terminal:
code --install-extension codesprint-1.3.0.vsix
From source
npm install
npm run compile
npm run package
Usage
- Click the CodeSprint icon in the Activity Bar to open the dashboard.
- Press Start to begin a focus session. The ring and the status bar show your progress.
- When the session ends you get a notification and the timer switches to the suggested break.
- Set your daily target in the Daily goal section and watch the progress bar fill.
- Open Settings (gear icon in the dashboard header) to change the theme, durations, notifications and break suggestions.
Switching session type while a session is in progress asks for confirmation, because the unfinished session is discarded.
Commands
All commands are available from the Command Palette under the CodeSprint category.
| Command |
Description |
| Start Timer |
Start the current session type |
| Pause Timer |
Pause a running session |
| Resume Timer |
Resume a paused session |
| Reset Timer |
Discard the current session |
| Start, Pause or Resume Timer |
Single toggle (used by the status bar) |
| Switch Session Type... |
Choose focus, short break or long break |
| Show Motivational Quote |
Display an encouraging developer quote on demand |
| Open Dashboard |
Reveal the sidebar dashboard |
| Open Settings |
Open CodeSprint settings in VS Code |
| Clear Stored Data... |
Delete all sessions, statistics and streaks |
Settings
| Setting |
Default |
Description |
codesprint.theme |
system |
system, light or dark |
codesprint.focusMinutes |
25 |
Focus session length (1-180) |
codesprint.shortBreakMinutes |
5 |
Short break length (1-60) |
codesprint.longBreakMinutes |
15 |
Long break length (1-120) |
codesprint.sessionsBeforeLongBreak |
4 |
Focus sessions before a long break (2-10) |
codesprint.dailyGoalMinutes |
120 |
Daily focus target (5-1440) |
codesprint.notifications |
true |
Notify when a session finishes |
codesprint.autoBreakSuggestions |
true |
Switch to a break after a focus session |
codesprint.motivationalIntervalMinutes |
30 |
Interval in minutes between random motivational reminders (0 to disable) |
codesprint.motivationalDisplay |
statusBar |
Display mode: statusBar, notification, or both |
Changing a duration applies to the next session; a session already in progress keeps its original length.
Privacy
CodeSprint stores the timer state, completed sessions, daily totals and interface preferences in VS Code's local extension storage (globalState). It makes no network requests, collects no telemetry and never reads your files or source code. Use CodeSprint: Clear Stored Data to remove everything.
Development
npm install # install dev dependencies
npm run compile # build to ./out
npm test # compile and run the unit tests
npm run package # produce codesprint-<version>.vsix
Press F5 in VS Code to launch an Extension Development Host with CodeSprint loaded.
Project structure
src/
extension.ts activation, wiring and disposal
timer/ timestamp-based timer engine, state validation
services/ timer service, settings, statistics, messages, status bar
storage/ globalState wrapper, history aggregation, validation
commands/ command registration
webview/ sidebar provider, HTML (strict CSP), message validation
util/ date and duration helpers
test/ unit tests (Node test runner, no VS Code needed)
media/
logo.svg, icon.png brand logo and marketplace icon
icons/ Activity Bar glyph and Lucide icons
webview/ dashboard stylesheet and script
Design notes
- The timer engine is a pure state machine with an injectable clock. It stores timestamps (segment start, elapsed time) instead of a countdown, which makes restoration after reloads exact and testable.
- The webview has no authority: it renders the state it receives and sends validated intent messages. The host rejects any message that is not an exact member of the protocol.
- The webview uses a strict Content Security Policy (
default-src 'none', nonce-protected script, no inline styles or remote resources).
- One interval exists only while a session is running. Nothing runs in the background while the timer is idle.
Known limitations
- VS Code stores extension data per user, not per window. If you run the timer in several windows at once, each window keeps its own in-memory timer; use one window for timing.
- Notifications use VS Code's native notification system, so they appear inside VS Code rather than as operating system toasts.
Third-party notices
Interface icons are from Lucide (ISC License).
License
MIT