Reading an activity file inside the browser
Why the file never goes to a server, what each format holds, and where every number on the summary comes from.
What not uploading actually means
An activity file records where you were, second by second. A run that starts and ends at your front door tells anyone holding it where you live. Uploading one is not the same as uploading a photo.
This tool never receives the file. Your browser reads it into this device's memory, and the parsing, the maths and the drawing all happen there. Our server only learns that a page was opened and that a file was picked.
You do not have to take our word for it. Open your browser's developer tools, watch the network tab, and pick a file. Nothing goes out except requests to this page. There is also a counter further down the home page that reads your browser's own log back to you.
GPX, TCX and FIT
GPX is the common one, and it is plain XML. Open it in a text editor and you can read it. Inside is a list of track points, each with a latitude and longitude, and often an altitude and a timestamp. Heart rate lives in an extension block, which is why devices disagree about where to put it.
TCX is Garmin's XML format. It sits closer to training than GPX does, with laps, heart rate and calories in named places. Coordinates live inside a Position element under each Trackpoint.
FIT is Garmin's binary format. It is bytes rather than text, so a text editor shows garbage, and it packs the same ride into far less space. Strava's Export Original usually hands you one of these. The format is documented publicly, so we read it directly.
GPX and TCX are open XML standards with nothing in the way. FIT is a Garmin specification, and devices differ in which fields they write, so we read coordinates, altitude, timestamps and heart rate and skip the rest. Some files will not open, and when that happens the page says so.
What this tool actually does
It picks the format from the extension first. With no extension, or an unfamiliar one, it looks at the first bytes: a FIT file carries the marker .FIT starting at byte nine, and GPX and TCX are told apart by their opening tag.
Once the points are in, it measures each neighbouring pair with the haversine formula and adds them up. That treats the Earth as a sphere of radius 6,371,008.8m, which is accurate to well under half a percent over the few kilometres an activity covers.
Elevation gain uses a 3m threshold. It walks the points, and only a rise or fall bigger than the threshold counts, at which point that height becomes the new reference. Without a threshold, GPS jitter piles up hundreds of metres on flat ground.
Splits are cut every 1km. Each time the running distance crosses that mark it closes a row and records the time and the climb inside it. The final split is usually shorter, and it is shown as it is.
Average pace is total time divided by total distance, stops included. Some apps subtract time you spent standing still, but what counts as standing still differs between apps, so we leave the clock alone and show the splits instead.
The route is drawn as a line. Latitude goes down the page and longitude across, with longitude scaled by the cosine of the latitude so the shape does not stretch. Above 2,000 points the track is thinned evenly, always keeping the first and last.
Leaving out the basemap is a deliberate choice. Fetching tiles means telling a tile server which part of the world you are looking at, and that single request would break the promise this page makes. So you get the shape of the route and a scale, and nothing goes out.
Getting the file off your device
Strava exports only from the website. On an activity page, open the three-dot menu and choose Export Original for the file as it was uploaded, usually FIT, or Export GPX. The mobile app has no such menu.
For everything at once, go to Settings, then My Account, then Download Your Account. A link arrives by email after a few hours.
Garmin Connect lets you download the original file from an activity page, and it comes as FIT. Apple's Health app does not hand out GPX directly, so the quickest route is to connect the workout to Strava or a similar app and export from there.
Files from hiking apps work too as long as they are GPX. Each app hides its export in a different place, so check that app's help.
Why your watch shows different numbers
Feed the same file to several apps and the distances differ slightly. Everyone joins the points with straight lines; what differs is how aggressively each app throws away jittery points. We throw away none, so the page agrees with the file it was given.
Elevation gain differs far more, because the threshold drives the result by a factor of several. Ours is 3m and it is printed on the page. Most device makers pick their own and do not publish it.
A watch with a barometer records much steadier altitude than one relying on GPS. The same climb comes out smooth from one and saw-toothed from the other. The file does not say which it was, so neither do we.
If the average pace looks slower than you remember, it is usually the stops. As above, we do not subtract them. The split table shows you exactly which kilometre swallowed the time.
Where people get stuck
If a file will not open, check the extension first. A gpx still inside a zip cannot be read. Unzip it and pick the file itself.
Some GPX files hold a route but no timestamps, which is normal for a hiking course somebody else drew. You will get distance and elevation, and the time and pace fields will say the values are not in the file. We do not invent them.
Some files carry no altitude at all. Then there is no profile, and elevation gain is reported as missing rather than as zero.
If a FIT file fails, that device writes fields we do not read. Export the same activity as GPX or TCX instead. On Strava, adding export_tcx to the end of the activity URL gives you a TCX.
The result lives on this page only. Reload and it is gone, and nothing remains on any server. Take a screenshot if you want to keep it.
Sources and dates checked
- Strava support, exporting an activity (2026-09-16)
- OpenStreetMap Foundation, tile usage policy (2026-09-16)
- topografix, the GPX 1.1 schema (2026-09-16)
- Garmin developer docs, FIT overview (2026-09-16)
- IUGG mean Earth radius, 6,371,008.8m (2026-09-16)