Your own private Garmin Connect / Strava — self-hosted, for you or your household.
Tracks pulls your activities, sleep and health data straight off your Garmin watch, analyses your training, builds periodized training plans, and shows it all on fully self-hosted maps. It runs on your own hardware, and nothing it holds ever goes to Garmin or anyone else.
It comes in three parts that work together or on their own: the server (this image), an Android app that talks to your watch over Bluetooth and keeps working for days offline, and a watch app that syncs your own music library to the watch.
⚠️ Built for a household, not as a public service. Tracks supports several accounts, each sealed under its own key, but it's meant to run on your network behind your own HTTPS reverse proxy.
docker run -d --name tracks --restart unless-stopped \
-p 4080:80 \
-v tracks-data:/data \
-v tracks-maps:/map-data \
exercisetracks/tracks:latest
Then open http://localhost:4080 and create your admin account — there's
nothing to configure first. On its first start, Tracks generates its own
secrets and database, kept in the tracks-data volume.
Create the admin account before exposing the port. Until one exists, Tracks has no credentials to check, so anyone who can reach it can claim it.
Storage: tracks-data stays small (megabytes per year) and holds your
database and the original files from your watch. tracks-maps is only used
if you turn on self-hosted maps (allow at least 20 GB) — with maps off,
nothing is downloaded.
Using compose.yaml
and, optionally, .env.example
for settings:
docker compose up -d
docker compose pull && docker compose up -d
Database upgrades run automatically — take a backup first (docker exec tracks tracks-backup > tracks-$(date +%F).tar.gz). :latest follows every
release; pin :1 or an exact version (e.g. 1.1.0) if you'd rather update
on your own schedule.
latest, X, X.Y, X.Y.Z — all point at the same releases; pick the
precision you want to track.Full feature list, the Android app, connecting a Garmin watch, backups, configuration and security notes are all in the GitHub README.
License: AGPL-3.0-or-later.
Content type
Image
Digest
sha256:92e925eaa…
Size
258.3 MB
Last updated
3 days ago
docker pull exercisetracks/tracks