OpenTracks is a sport tracking application that completely respects your privacy. https://OpenTracksApp.com
  • Java 99.7%
  • Shell 0.3%
Find a file
CI/CD Bot by pstorch 958697bcb3
Some checks failed
Android Test / Android Lint (pull_request) Failing after 35s
Android Test / android-check (pull_request) Failing after 35s
Android Test / Android Lint (push) Failing after 33s
Android Test / android-check (push) Failing after 34s
Update dependency com.android.tools.build:gradle to v9
2026-01-15 17:42:07 +00:00
.forgejo/workflows Update actions/checkout action to v6 2025-11-30 14:34:10 +00:00
.gitea codeberg migration 2025-08-24 20:48:53 +02:00
.idea Revert "AndroidStudio: set line width (for autoformatting) to 200." 2025-11-09 22:45:41 +01:00
doc ActivityType non-localized: import and export for GPX, KML, and KMZ. 2023-10-08 14:07:29 +02:00
drawable-svg Marker: replaced orange pushpin. 2025-06-25 19:44:38 +02:00
fastlane Translated using Weblate (Italian) 2026-01-10 21:48:12 +01:00
gradle/wrapper Update dependency gradle to v9.2.1 2025-11-17 14:35:53 +00:00
promotion Sticker: added printable PDF 2025-12-27 08:38:01 +01:00
screenshots-svg Update screenshots with new UI (#1857) 2024-02-14 19:53:43 +01:00
src Translated using Weblate (Italian) 2026-01-10 21:48:12 +01:00
.editorconfig AndroidStudio: set line width (for autoformatting) to 200. 2025-11-09 22:45:50 +01:00
.gitignore TrackRecordingService: must be stopped via TrackRecordingServiceConnection and handles Preference changes. 2023-08-13 21:11:24 +02:00
build.gradle Update dependency com.android.tools.build:gradle to v9 2026-01-15 17:42:07 +00:00
CONTRIBUTING.md Before codeberg migration (#2159) 2025-08-24 08:36:08 +02:00
Gemfile Added automation for Google Play publication (using fastlane). 2019-12-06 22:26:40 +01:00
gradle.properties AGP: generate local_config.xml 2023-04-12 19:30:57 +02:00
gradlew Update dependency gradle to v9.2.1 2025-11-17 14:35:53 +00:00
gradlew.bat Update dependency gradle to v9.2.1 2025-11-17 14:35:53 +00:00
LICENSE License: use non-Markdown, so Github-API identifies it. 2020-09-26 23:16:19 +02:00
lint.xml Lint: make missing plural quantity a warning as they have to be properly translated. 2022-01-27 21:59:37 +01:00
PREPARE_FASTLANE_PLAYSTORE.sh PlayStore/Fastlane: add script for checking completeness/support of translations for PlayStore. 2024-03-01 19:18:48 +01:00
README.md README: description for KML/KMZ vs. GPX. 2025-12-06 09:31:36 +01:00
README_API.md Before codeberg migration (#2159) 2025-08-24 08:36:08 +02:00
README_RELEASE.md codeberg migration 2025-08-24 20:48:53 +02:00
README_TESTED_SENSORS.md Before codeberg migration (#2159) 2025-08-24 08:36:08 +02:00
RELEASE.sh codeberg migration 2025-08-24 20:48:53 +02:00
RELEASE_BUILD.sh Reproducible builds: use OpenJDK-21 (build script only). 2025-08-28 21:55:10 +02:00
renovate.json Add renovate.json 2025-11-08 20:33:45 +00:00
UPDATE_SCREENSHOTS.sh New screenshots after UI refactoring. 2022-05-09 20:38:25 +02:00

OpenTracks logo OpenTracks: a sport tracker

OpenTracks is a sport tracking application that completely respects your privacy.

Awesome Humane Tech

Free (F-Droid) Free (Nightly for F-Droid) Donations
Get it on F-Droid Nightly builds (for F-Droid client) Donate using Liberapay
OpenTracks version published on F-Droid Get it on Google Play

Translations are hosted on translate.codeberg.org/projects/opentracks/. Translation status

Screenshots

Features

  • Tracking: track your sport and outdoor activities

  • Voice announcements

  • Photos and Markers: mark interesting locations while tracking

  • Export:

    • export tracks either as KMZ 2.3 (incl. photos), KML 2.3, or GPX 1.1
    • export automatically after each recording (e.g., to sync via Nextcloud)
    • avoid duplication: each exported file contain a random unique identifier (i.e., opentracks:trackid)
  • Altitude:

    • gain/loss via barometric sensor (internal if present or via Bluetooth's Environmental Sensing Service)
    • shown in EGM2008 (above mean sea level); exported as WGS84
  • Bluetooth LE sensors:

    • heart rate
    • cycling: speed and distance
    • cycling: cadence
    • cycling: power meter
    • running: speed and cadence
    • support for BLE sensor training only (i.e., without GPS) for indoor training

    An overview of tested sensors: README_TESTED_SENSORS.md

Gadgetbridge integration

OpenTracks can be used with Gadgetbridge:

  • shows statistics via notification on smart watches (requires Gadgetbridge 0.56.1 or later), and
  • Gadgetbridge's GPX exporter generates opentracks:trackid to avoid duplication (Gadgetbridge 0.53.0 or later).

Privacy

  • No Internet access: Internet is not used
  • No advertising
  • No in-app analytics
  • No use of Google Play Services

Only required permissions:

  • ACCESS_FINE_LOCATION: required to use the GPS.
  • ACCESS_BACKGROUND_LOCATION: required to start recording with GPS while phone is in standby. (e.g. when triggered by Public API from an external device)

Public API

OpenTracks includes an API for starting/stopping recording by another installed application (e.g., Automate, Tasker, or Easer). The API is disabled by default to protect the user's privacy, but it can easily be enabled in the settings. Once enabled, the API can be invoked by sending an explicit Intent to start an activity.

Package (depends on the variant installed):

  • F-Droid: de.dennisguse.opentracks
  • GooglePlay: de.dennisguse.opentracks.playStore
  • Debug: de.dennisguse.opentracks.debug
  • Nightly: de.dennisguse.opentracks.nightly

Classes:

  • Start a recording: de.dennisguse.opentracks.publicapi.StartRecording
    • Set track data: TRACK_NAME, TRACK_DESCRIPTION, TRACK_CATEGORY, and TRACK_ICON ( see ActivityType.id defined in /src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java#L38). NOTE: if TRACK_ICON is not present, TRACK_CATEGORY will be used to determine the icon ( localized).
    • Send recorded data to another application via Dashboard API: STATS_TARGET_PACKAGE and STATS_TARGET_CLASS
  • Stop a recording: de.dennisguse.opentracks.publicapi.StopRecording
  • Create a marker: de.dennisguse.opentracks.publicapi.CreateMarker

For testing the API using adb, the general command syntax is:

adb shell am start -e someParameter someValue -n "package/class"

Depending on the package and class, a complete command could look something like this:

adb shell am start -n "de.dennisguse.opentracks.playstore/de.dennisguse.opentracks.publicapi.StartRecording"

File formats compatibility with open-source software

KML/KMZ can be used to export indoor activities (no GPS present). GPX exports only those points that have a GPS coordinate present (sensor data is aggregated though).

GPX 1.1 KML 2.3 KMZ 2.3
OpenLayers 7.1.0 ? no no
Golden Cheetah 3.5 ? no no
GpxPod ? ? ?
OsmAnd ? no no
FitTrackee yes n/a n/a
SportsTracker yes, single tracks only no no
ExifTool yes no no
Wanderer yes yes yes
[GPX.Studio]https://gpx.studio/) yes no no

Dashboard API (incl. map)

As of v3.3.1, OpenTracks supports custom dashboards for displaying previously recorded and live tracks.

The reference implementation is OSMDashboard, which presents an OpenStreetMap map (showing the current track, incl. updates). The Dashboard API is also used by Gadgetbridge for displaying live track statistics on supported wearables.

Alternatively, recorded tracks can be shared as KMZ/GPX with installed applications ( e.g., OsmAnd). However, this is rather slow and does not provide updates while recording.

The developer documentation is in README_API.md.

Backup

OpenTracks stores the data in the app-internal space: /data/data/de.dennisguse.opentracks[|.playstore]

There is a SQLite database database.db that contains the tracks as well as the markers. Pictures attached to markers are stored as separate files.

For backup and recovery, the best approach is to export as one KMZ file. This will contain all the tracks, pictures and the data as similar as possible as stored internally. In difference to backing up the database directly, a KMZ allows to be imported into a different ( e.g., newer) version of OpenTracks.

Project history

OpenTracks is based upon Google My Tracks app (code). My Tracks was initially released by Google in 2010 as open-source software. In 2016, Google decided to discontinue My Tracks and stopped distributing it via the Google Play store in April 2016. Then Plonk42 conducted some maintenance work until 2016, so My Tracks could still be used (based upon version Google's MyTracks version 2.0.6). Plonk42's version is available here. In 2019, OpenTracks was forked from Plonk42's My Tracks and major rework was conducted.

Rework of OpenTracks included:

  • removing Google's analytics code,
  • removing integration into Google Drive,
  • removing Google Maps integration,
  • removing Google Earth integration,
  • removing use of Google Play service,
  • removing calorie estimation and activity estimation,
  • removing support for ANT+ and Classic Bluetooth,
  • adding support for Bluetooth LE heart rate sensors,
  • removing Protobuf (store sensor data in SQLite columns directly), and
  • removing Android Service API for other apps.

Artwork, logos and user interface remained more or less unchanged.

More information about Google My Tracks: