Stopwatch App: Laps, Splits, and Timing You Can Keep
A stopwatch app earns its place when it does more than count. It has to record what happened, show it back in a form you can read at a glance, and hand the numbers over when the session ends. The stopwatch on this site runs in a browser tab, keeps centisecond precision, records every lap you press, and exports the full lap table as a CSV file. It opens with one click, needs no account, and behaves the same on a phone, a tablet, and a laptop.
What turns a stopwatch into an app
Counting seconds is the easy part, and a display that only counts leaves the useful work undone, because the moment a session ends the numbers are gone and the memory of the session is all that remains. Three jobs separate a timing display from an app: measure elapsed time without drift, split that time at the boundaries you choose, and keep the record long enough to compare one session with the next. This stopwatch covers all three, and the parts that matter most are the ones people discover last.
The display shows centiseconds (00:00:00.00), the resolution printed on sports stopwatches and the standard in swimming, athletics, and speedcubing. The timing underneath is not a counter that ticks upward and hopes to keep pace. When you press start, the app captures a timestamp from performance.now() and computes the elapsed time as the difference between that timestamp and the current one, refreshing the numbers every 10 milliseconds. A slow frame, a busy processor, or a heavy page cannot make the clock run fast or slow, because the clock is never counted; it is subtracted, and subtraction does not drift.
Laps get the same treatment. Each press of the lap button stores two values: the interval since the previous lap, called the lap time, and the time since the start, called the total. Both are useful, and they answer different questions. The lap time tells you how one segment went, while the total tells you where you stood at that moment in the session. A runner reading 00:00:48.35 on lap six learns how the segment itself went; the same row's total of 00:04:53.35 shows how much of the session had already elapsed.
Keep it one tap away
The practical difference between a stopwatch page and a stopwatch app is how little stands between you and the first press. The site ships a web app manifest and a service worker, so browsers offer to install it from the address bar or the browser menu under a name like Install app or Add to Home Screen. Once installed, the site opens in its own window without tabs or address bar, and it keeps working after the network drops, because the service worker caches pages as you visit them and serves the cached copy when the request fails.
What you avoid by installing it this way is worth naming. There is no store listing to update, no account to create, no subscription, and no permission prompt beyond the browser's own offer to install the page. The app does not ask for your location, your contacts, or access to a camera, because it needs none of them to measure time. The trade is the opposite of the usual one: instead of granting an app a broad set of permissions for one small function, you grant the browser nothing and keep the timer on a page that can only do what the page says it does.
Installing is also the fastest way to get a stopwatch onto a phone that is already in your pocket. On a desktop, the same page lives in a pinned tab that survives the day's other work. Either way, the first press takes one gesture rather than a search through an app drawer, and that difference decides whether timing becomes a habit or stays an occasional ceremony.
The lap button is the part worth learning
Most people start the stopwatch, work, stop it, and read one number. That single number answers how long the whole thing took, and nothing about how it went. The lap button splits the session without stopping it, and the habit worth building is to press it at every boundary you care about: the end of a work interval, the moment a rest period ends, the second a build finishes, the turn of a page you are timing.
The keyboard makes this cleaner than the buttons. Space starts and pauses, L records a lap, and R resets. Those keys are ignored while the cursor sits inside a text field, so you can type elsewhere on the page without disturbing the timer. One safety detail helps during long sessions: reset only works while the stopwatch is paused, so a stray keystroke cannot wipe a running session. The lap button follows the same logic and records nothing unless the clock is running, which stops accidental empty laps at the start.
The lap table grows downward with the newest lap at the top, which suits the way people check a session in progress, and the numbering stays fixed to the moment each lap was recorded, so lap 1 remains lap 1 no matter where the row sits. Reading the table takes one glance: the lap number, the interval, the running total. Once two laps exist, the fastest row is marked Best and the slowest is marked Slowest, and the marking moves as the session continues, so a split that looked strong in the first half can be overtaken later.
Reading a lap table without squinting
A lap table is more useful than a stopwatch reading because it exposes pacing, and pacing is where sessions are won or lost. Take a session of six laps recorded in the app:
| Lap # | Lap time | Total time |
|---|---|---|
| 1 | 00:00:48.20 | 00:00:48.20 |
| 2 | 00:00:47.55 | 00:01:35.75 |
| 3 | 00:00:48.90 | 00:02:24.65 |
| 4 | 00:00:52.40 | 00:03:17.05 |
| 5 | 00:00:47.95 | 00:04:05.00 |
| 6 | 00:00:48.35 | 00:04:53.35 |
The total reads 00:04:53.35, and the average lap works out to 48.89 seconds. Two numbers, and the story of the session is nearly complete. The fastest lap (47.55) and the slowest (52.40) are already marked in the app, and the gap between them, 4.85 seconds, measures consistency better than any single split can. A spread under five seconds across six laps means the pacing held; a spread of fifteen seconds would mean the session fell apart somewhere and the lap table shows exactly where.
The useful skill is spotting the outlier rather than the extreme. Lap four sat 7.2 percent above the session average, and the lap before it was the fastest of the set, which is the classic signature of going out too hard and paying for it. Compare that with lap six: 48.35 on legs that have already run five laps is a stronger sign of control than the 47.55 recorded while fresh. Average and spread, read together, put the outlier in context that a single total time hides.
Session recipes worth reusing
The same two numbers, interval and total, do different work depending on what you time. The table below maps the common cases onto what to lap and what the splits will show.
| Activity | Press lap at | Typical lap | What the splits reveal |
|---|---|---|---|
| Interval training | End of each work and rest period | 30-60 s work, 60-90 s rest | Whether rest periods are consistent, and how much work time falls away in the last intervals |
| Strength sets | End of each set, then the rest | 30-45 s set, 90-180 s rest | Recovery drift across the session and the point where rest stops being enough |
| Cooking and baking | Each stage, then each batch | Varies by recipe | Whether a stage takes longer than the recipe claims, which explains the results |
| Software builds and deploys | End of each run | Seconds to minutes | Whether a slow run is an outlier or the new normal after a change |
| Study and exam practice | End of each question or unit | 1-3 min per unit | Which topics consume disproportionate time and need a second pass |
Interval work shows the pattern best, and a single calibration session is enough to make the numbers personal. Record eight rounds with the lap button and split work from rest, and the table gives an average work time of 40.92 seconds against an average rest of 80.34 seconds, a ratio close to 1:2 over a session that ran 970 seconds in total. Those averages are the numbers to program into a fixed interval timer later, because they reflect real capacity instead of an optimistic guess made before the first round.
Exporting the laps and finishing in a spreadsheet
The lap table is readable on screen; the CSV export is what makes it analysable. Press the export button and the browser downloads stopwatch-laps.csv, a plain text file with three columns, Lap #, Lap Time, and Total Time, one row per lap and a header on the first line. Opening it in Excel, Google Sheets, or LibreOffice Calc drops each value into its own column, which is where the arithmetic a stopwatch cannot do becomes trivial.
The export is written in session order, from the first lap to the last, even though the on-screen table shows the newest lap at the top. That ordering is deliberate on both sides: newest first while you are still working, chronological once you want to chart the shape of a session. Add one column of your own, the difference between each lap time and the session average, and a session that looked even on screen shows its drift as a column of signed numbers, several seconds wide in the middle and near zero at the end.
Two limits are worth knowing before you close the tab. The export only works when at least one lap exists, since an empty file would say nothing; and the laps live in the page itself, so reloading or closing clears them. Nothing is uploaded while you use the stopwatch, which is the reason the numbers are yours alone, and the same design means the exported file is the only copy that survives the session.
Keyboard, touch, and realistic accuracy
On a desktop the keyboard is faster than the mouse, because Space, L, and R cover start, lap, and reset without leaving the work at hand. On a phone the buttons are sized for touch, and the display scales to the screen, so a lap can be recorded with a thumb while the other hand holds a bar, a pan, or a page. Both paths lead to the same table.
Accuracy deserves a plain answer. Browser timing comes from performance.now() and resolves to fractions of a millisecond on modern hardware, which is far finer than the events people time. Human reaction time runs roughly 200 to 250 milliseconds, so a lap recorded by hand carries an uncertainty a fifth of a second wide at each end. Centiseconds are therefore the honest resolution for human-timed activity: milliseconds would suggest a precision the hand cannot deliver and the display would update too quickly to read. The numbers are exact as measured; the measurement includes you.
Frequently Asked Questions
?Is this stopwatch app free, and do I need an account?
It is free and there is no account, sign-up, or payment step anywhere in the flow. You open the page, press start, and the stopwatch runs in your browser. Installing it as an app through the browser menu is optional and changes nothing about how the timing works.
?Can I use it offline on a phone?
After the first visit, yes. The service worker caches the pages, styles, and scripts as you use them, so the stopwatch loads from the cache when the network is unavailable. Install it to the home screen first if you expect to be offline, since that guarantees a page you can reach without a search.
?What is the difference between lap time and total time?
The lap time is the interval since the previous lap, so it measures one segment on its own. The total time is everything since you pressed start, so it measures your position at that moment. Both appear in the same row of the table and in the exported CSV.
?How accurate is the timing, really?
The clock is computed from high-resolution timestamps, so it does not drift over long sessions, and the display refreshes every 10 milliseconds. The practical limit is the person pressing the button: reaction time adds roughly 0.2 seconds at each end of a hand-timed interval, which is why centiseconds are the useful resolution.
?Can I export the laps and open them in a spreadsheet?
Yes. The export button downloads a CSV file with a header row and three columns, the lap number, the lap time, and the total time, written in session order. Excel, Google Sheets, and LibreOffice Calc all open it directly, splitting the values into columns, ready for a difference column or a chart.
?Does the stopwatch keep running if I switch tabs?
It does, because elapsed time is computed from timestamps rather than counted ticks, so time continues to pass correctly while the tab is in the background. The display resumes at the right value when you return. Laps and the current time are not saved across a reload, so export the session before you leave the page.
Moorhead, MN, United States · SO reputation 1999 · Badges: 5🥇24🥈25🥉 · SO member since 2009