Written by Sarah Mitchell · Reviewed by Jane Smith · July 23, 2026
Precision stopwatch with lap recording — accurate to hundredths of a second.
Press Lap to record a split time.
This is a browser stopwatch with one display format: hours, minutes, seconds, and hundredths of a second. The big readout updates live while the timer runs, and every value is padded to two digits, so ten minutes shows as 00:10:00.00 and a quarter second as 00:00:00.25. There is no countdown, no alarm, and no sound — just a start/stop button, a lap button, a reset, and a list of recorded splits. The single main control doubles as its own status light: it reads Start when idle, flips to Stop and turns red while the clock is running.
Everything happens locally. No account, no upload, no server round-trip; the page does not even need a connection once it has loaded.
The interesting part is what the timer does not do: it never counts ticks. A naive stopwatch increments a counter once per animation frame and drifts whenever the browser throttles that frame. This one records timestamps instead — the browser's high-resolution performance.now() clock — and computes elapsed time by subtracting the start stamp from the current one. While running, the displayed value is the accumulated time plus the difference between now and the moment you last pressed Start.
Pressing Stop adds that final slice to the accumulated total and freezes the number. Pressing Start again takes a fresh timestamp, so a later resume never double-counts the paused gap. Reset performs the full sweep: it halts the clock, empties the lap table, restores the readout to 00:00:00.00, and relabels the button back to Start. The smooth live update rides on requestAnimationFrame, the browser's own redraw loop, which typically fires sixty times per second; each frame only refreshes the text, it never re-derives the math from a tick counter.
Laps are where the timer earns its keep. Press Lap while running and the page records two numbers: the split — time since the previous lap — and the total — time since the whole session began. Each pair lands in a small table with three columns — Lap, Split, Total — that renders with the most recent lap at the top, so the row you just captured is the first one you read.
Try it with a concrete run. Start, wait ten seconds, Lap: split 00:00:10.00, total 00:00:10.00. Wait another fifteen seconds, Lap: split 00:00:15.00, total 00:00:25.00. Stop. The list shows Lap #2 (split 15.00, total 25.00) above Lap #1 (split 10.00, total 10.00) — a split is a segment, a total is a running sum.
One guard rail: Lap is ignored while the timer is stopped. Pressing it before Start does nothing, so you cannot accidentally fabricate a zero-length split.
requestAnimationFrame for hidden tabs to save battery, so the readout may stop updating while you work elsewhere — but the elapsed figure is timestamp-derived, so it jumps to the correct value the moment the tab is visible again.performance.now() can stop advancing. The stopwatch is excellent for normal use, not for lab-grade or safety-critical timing.Because redrawing and timing are separate jobs. Live updates ride on requestAnimationFrame, which browsers suspend for background tabs, while the elapsed math reads the timestamp clock directly. Come back and the readout corrects itself within one frame.
The button checks whether the timer is running and quietly returns if it is not. Start the timer first, then lap — this also prevents accidental zero-length splits when you hit the wrong button mid-setup.
Copy Laps writes a small plain-text block — a header line, then one "Lap #N: Split ... | Total ..." line per lap — to your clipboard and confirms with a toast. Paste it into a note, spreadsheet, or message. There is no built-in persistence, so copy before you reset or leave.
The clock behind it, performance.now(), has sub-millisecond resolution, so the raw measurements are far finer than the display. What you see is that precision rounded to centiseconds and delivered through the browser's normal rendering schedule — superb for training and productivity, not a substitute for a certified timer.
Yes. The hours position pads to two digits and never caps, so a two-hour workout displays as 02:00:00.00 and keeps counting past it.
Reach for it when you need a visible, lappable timer without installing anything: workout splits, speech and presentation practice, timeboxing a task, or measuring how long a slow query or build step really takes. The newest-first lap list and one-click copy make it comfortable for structured sessions where you compare segment after segment.
Leave it on the shelf when the stakes demand precision beyond what a consumer browser can promise — official race timing, legal or medical measurement — or when you need timing to survive the tab being closed entirely; nothing web-based can run on a closed page. For everyday timing, this is about as good as a software stopwatch gets.