Skip to main content

Strava Globe

Your entire Strava history as glowing tracks on a realistic 3D Earth.

Every activity on one globe

Point it at the export zip Strava gives you, and you get a private, local globe (CesiumJS + satellite imagery) you can spin, zoom from orbit down to street level, and fly around:

  • Every GPS track drawn on the globe, colored by activity type, with hover tooltips (name · date · distance · place) — click a track to fly to it.
  • ▶ Tour mode: your activities are clustered into places, named via offline reverse geocoding, ordered by first visit — and the camera flies through your travel history stop by stop, with a card per place and a closing summary.
  • Filters by activity type and year, satellite or street basemap, and an idle globe spin until you grab it.
  • No accounts, no API keys, no upload. Your tracks never leave your machine.

Flight tour flying between places

The tour taking off: home base → Poznań → Vienna, the first three of 41 stops.

From orbit to city… …to street level
A city's worth of tracks Runs along a coastline

Quickstart

  1. Request your archive on strava.com: Settings → My Account → Download or Delete Your Account → Request Your Archive (the zip arrives by email).

  2. Run (with uv, no install needed):

    uvx strava-globe ~/Downloads/export_12345678.zip
    

    or classically:

    pip install strava-globe
    strava-globe ~/Downloads/export_12345678.zip
    

The globe builds and opens at http://localhost:8933. Next time, plain uvx strava-globe reuses the last build (the generated data lives in your user data directory; --port, --no-browser, and --data-dir are available).

How it works

The builder (strava_globe/tracks.py) reads activities.csv from the export — zip or extracted folder — then for every activity file:

  • decodes FIT with fitfast and GPX with a small XML parser (indoor activities without GPS are skipped),
  • splits tracks at GPS dropouts (>500 m between fixes),
  • simplifies each segment with Ramer-Douglas-Peucker (~5 m tolerance, simplification),
  • tags the activity with its nearest city and country — offline GeoNames lookup via reverse-geocoder,
  • and writes one compact activities.json (~1.7 MB for 725 tracks / 1.9 M raw GPS points).

The web app (strava_globe/web/) is dependency-free: CesiumJS 1.131 from the jsdelivr CDN, imagery streamed from Esri World Imagery (satellite) or OpenStreetMap (streets), served by a stdlib static server with caching disabled.

Controls

drag / scroll spin / zoom the globe
hover a track tooltip with name, date, distance, place
click a track fly to that activity
T or ▶ Tour replay your travels place by place
space · ⏮ ⏭ / arrows · Esc pause · previous/next stop · end tour
⌂ Home back to the full globe

Privacy

Your GPS data stays local: the generated activities.json lives in your user data directory (never in this repo or the package), and the app talks only to the CDN and the map tile servers (which necessarily see which map areas you view, as with any online map).

Notes

  • Rendering quirk: msaaSamples = 1 and dynamicAtmosphereLighting = false are deliberate — MSAA and sun-driven atmosphere shading render a black globe on software-GL stacks (e.g. headless/embedded Chromium).
  • Tile imagery: Esri World Imagery is used under its terms for personal/non-commercial viewing; OpenStreetMap tiles per the OSM tile usage policy.
  • Not affiliated with or endorsed by Strava, Garmin, Esri, or OpenStreetMap. "Strava" is used descriptively: the input is the data export Strava provides to its users.

Development

git clone https://github.com/lukaszkolodziejczyk/strava-globe
cd strava-globe
uv run strava-globe path/to/export.zip

Releases: push a v* tag — GitHub Actions builds and publishes to PyPI via trusted publishing (.github/workflows/release.yml).

License

BSD 3-Clause. Place names derived from GeoNames data (CC-BY 4.0) via reverse-geocoder.

Metadata

Release files for strava-globe 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for strava-globe 0.1.0
File Size Uploaded
strava_globe-0.1.0.tar.gz 15.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for strava-globe 0.1.0
File Interpreter ABI Platform
strava_globe-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 34.3 kB

Release files / strava_globe-0.1.0.tar.gz

Download URL strava_globe-0.1.0.tar.gz
Size 15.9 kB
Tags Source
SHA-256 checksum
How to use checksums
9b03b4a1250d7f7a26fa026da99656c29a3059a6002659c665875ec43870eba3
BLAKE2b-256 checksum
How to use checksums
91cf99c3536561aca92383bf882cdcb606dcc196ab68a6976943cf0743f59157
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.

Transparency log

Release files / strava_globe-0.1.0-py3-none-any.whl

Download URL strava_globe-0.1.0-py3-none-any.whl
Size 18.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f543b80f7e0f2afba9cfeaf7fbee2f7fa635603ca867a3dc3a5107d404ef27cd
BLAKE2b-256 checksum
How to use checksums
3fcbeed0b6280fc3f2002148deb275bcf95c595508470074101f5be9cf7ad42d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.0

2 release files

0.2.0

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page