Stopwatch
Start, stop, reset, and record laps — millisecond precision, all in your browser.
Mode:
00:00.00
About this stopwatch
This browser-based stopwatch uses requestAnimationFrame for smooth millisecond-precision display. Lap times show both the split (time since last lap) and cumulative total. The stopwatch runs entirely in your browser — no data is sent anywhere, and it works offline. Reloading the page resets the timer.
Built and maintained by Meet Shah · Last updated
What this tool is used for
- Timing a manual process to find out how long it really takes.
- Recording lap times for repeated attempts at the same task.
- Timing a build or a deploy when the tooling does not report it.
- Measuring an interval during a demo or a test.
- Comparing two approaches by timing both.
Frequently Asked Questions
- How accurate is a browser stopwatch?
- Good to a few milliseconds, using performance.now() — a monotonic clock that is immune to system time changes. Date.now() is wrong for timing because an NTP correction or a DST change can make it jump backwards.
- Why do timers drift in a background tab?
- Browsers throttle setInterval in inactive tabs — often to once per second or less — to save battery. Counting ticks therefore loses time; computing elapsed time from a start timestamp does not, and stays correct across throttling.
- What is the difference between lap and split times?
- A split is the total elapsed at that point; a lap is the time since the previous mark. Four 60-second laps give splits of 1:00, 2:00, 3:00, 4:00. Confusing them is why reported race times sometimes look impossible.
- Why is timer resolution deliberately reduced?
- Because high-resolution timers enabled Spectre-class side-channel attacks. Browsers now coarsen performance.now() and add jitter, which is why sub-millisecond precision is not available and should not be relied on.
- Does it keep time if I close the tab?
- No — state lives in the page. A refresh or close ends it unless the elapsed time was persisted. This is a genuine limitation of browser tools compared with a native app that can run in the background.
- Why measure elapsed time from a timestamp rather than by counting?
- Because a timer that fires late loses the difference permanently, and the errors accumulate. Recording a start time and subtracting means a delayed frame shows the correct elapsed time on the next one.
- Which clock should be used?
- A monotonic one such as `performance.now()`, because the wall clock can jump backwards when the system syncs time or crosses a daylight-saving boundary — producing a negative elapsed time on an otherwise normal run.
- How precise is the displayed value really?
- Browsers deliberately coarsen high-resolution timestamps to limit timing side-channel attacks, so hundredths are honest and finer digits are not. Displaying milliseconds implies a precision the platform does not offer.
Common errors and gotchas
- Trusting millisecond precision for a human-started measurement, where reaction time dominates the error.
- Leaving the page in a background tab, where timers may be throttled by the browser.
- Losing the recorded laps by navigating away, since they are held in the page.
- Using it to benchmark code, where a proper profiler measures what actually matters.
- Comparing timings taken under different conditions as if they were controlled.
Related Developer Utilities tools
RegExp Tester
Test regular expressions and inspect matches locally.
Regex Visualizer
Visual regex pattern diagram with live match highlighting and capture group annotations.
Subnet Calculator
Compute CIDR subnets, usable hosts, and network ranges.
Cron Parser
Translate cron syntax into plain English.
URL Parser
Break a URL into protocol, host, path, and query parts.
HTML Previewer
Paste HTML and see it rendered live in a safe, sandboxed preview.
HTTP Status Code Reference
Search and look up every HTTP status code and its meaning.
MIME Type Lookup
Find the MIME type for a file extension, or the extensions for a MIME type.