Stopwatch & Timer — With Pomodoro & Laps
Browser stopwatch with lap times, countdown timer with presets and beep alarm, and a Pomodoro 25/5 cycler — all background-tab accurate via performance.now().
About this tool
Most browser stopwatches drift in background tabs because they use setInterval to increment a counter, and modern browsers throttle that interval down to once per second (or less) when the tab loses focus. We avoid that pitfall: timekeeping is computed every animation frame as the difference between the original Start time and the current performance.now(). Whatever the browser does to background ticks, when the tab comes back into view the display catches up instantly.
The Stopwatch tab counts up with hundredths-of-a-second precision and supports lap markers — each lap shows the split (since the previous lap) and the total time. The Timer tab counts down, has 1/5/10/15/25-minute one-tap presets, beeps and flashes when complete, and supports a custom HH:MM:SS input. The Pomodoro tab cycles through 25-minute focus and 5-minute break phases, auto-progresses, and keeps a session count.
Audio uses the Web Audio API (no external sound file). Everything is in-browser — no signup, no uploads.
How to use it (5 steps)
- Choose Stopwatch, Timer or Pomodoro. Three tabs — Stopwatch (counts up), Timer (counts down), Pomodoro (25/5 work-break cycles).
- Start. Tap Start. The big display shows hours, minutes, seconds and hundredths. Stopwatch lap button records the split + total.
- Use presets (Timer only). 1, 5, 10, 15 or 25 minute one-tap presets, or set a custom HH:MM:SS.
- Hear the alarm. When the timer or pomodoro phase completes you'll hear a short beep (Web Audio) and the page flashes.
- Reset or stop. Stop pauses the count; Reset clears it (and the lap list).
Frequently asked questions
+−Does it run accurately in a background tab?
Yes. Browsers throttle setInterval/setTimeout in background tabs (down to once per second or less), but we don't rely on tick increments. Time is computed every animation frame as the difference between performance.now() and the start time, so when the tab returns to focus the display jumps to the correct value instantly.
+−Will the alarm fire if the tab is inactive?
Mostly yes. Browsers allow audio playback to fire from background tabs as long as the user has interacted with the page first (i.e. clicked Start). The visual flash and the page-title countdown also work in the background. If sound doesn't play, check your browser's autoplay/audio settings for this site.
+−Are lap times saved between sessions?
Lap times persist while the tab stays open. They're not written to localStorage by default — once you close the tab they're gone. We can add an export button if there's demand. Tap each lap time to copy it to clipboard.
+−Where does the Pomodoro technique come from?
Francesco Cirillo invented it in the late 1980s, named after the tomato-shaped kitchen timer (pomodoro = tomato in Italian) he used as a student. Standard cycle: 25 minutes focused work, 5 minutes break. After four cycles, take a longer 15-30 minute break. Our Pomodoro tab auto-progresses through the cycle.
+−Is anything saved or sent anywhere?
No. The stopwatch and timer run entirely in your browser using performance.now() for timekeeping. Nothing is uploaded, logged or stored on any server. The Pomodoro session count resets when you reload the page.
+−Does it work on mobile?
Yes. The stopwatch and timer work on iOS Safari and Android Chrome. On iOS, leaving the page or locking the screen will eventually pause the JavaScript runtime — Apple is strict about this. On Android the timing keeps running and the alarm should still fire.
Related on WRRK Tools
Beautify SQL — uppercase keywords, line breaks
ToolBMI with healthy weight range
ToolTip + bill split
CategoryBrowse the full developer tools category
ArticleJSON formatting is essential for debugging and readability. Discover how to format JSON online quickly using free tools and best practices.
CompareHonest comparison: features, pricing, signup