OpenTracksApp/OpenTracks
8
111
Fork
You've already forked OpenTracks
21
OpenTracks is a sport tracking application that completely respects your privacy. https://OpenTracksApp.com
  • Java 99.6%
  • Shell 0.3%
ghose f16f2cfc64
Some checks failed
Android Test / Android Lint (pull_request) Failing after 1s
Android Test / android-check (pull_request) Failing after 1s
Android Test / Android Lint (push) Failing after 1s
Android Test / android-check (push) Failing after 1s
Translated using Weblate (Galician)
Currently translated at 100.0% (554 of 554 strings)
Translation: OpenTracks/opentracks.src-main-res-values-strings-xml--main
Translate-URL: https://translate.codeberg.org/projects/opentracks/opentracks-src-main-res-values-strings-xml-main/gl/ 
2026年07月12日 06:07:51 +00:00
.forgejo/workflows Update actions/checkout action to v7 2026年06月19日 05:44:07 +02: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 (Spanish) 2026年07月08日 18:08:04 +00:00
gradle/wrapper Update dependency gradle to v9.6.1 2026年06月28日 12:29:00 +02: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 (Galician) 2026年07月12日 06:07:51 +00: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 Release: v4.28.0 2026年07月06日 18:02:19 +02: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
playstore-privacy-policy.html PlayStore: data retention seems to be a thing now. 2026年05月10日 11:32:02 +02: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 added bosch cadence sensor 2026年05月09日 21:46:44 +02:00
RELEASE.sh Build scripts: add some error handling. 2026年01月21日 18:33:20 +01:00
RELEASE_BUILD.sh Build scripts: add some error handling. 2026年01月18日 15:49:41 +01: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: