{"id":13486962,"url":"https://github.com/OpenTracksApp/OpenTracks","last_synced_at":"2025-03-27T21:31:48.436Z","repository":{"id":36999075,"uuid":"198041727","full_name":"OpenTracksApp/OpenTracks","owner":"OpenTracksApp","description":"OpenTracks is a sport tracking application that completely respects your privacy.","archived":false,"fork":false,"pushed_at":"2024-05-21T04:30:57.000Z","size":94038,"stargazers_count":928,"open_issues_count":83,"forks_count":180,"subscribers_count":22,"default_branch":"main","last_synced_at":"2024-05-22T04:37:39.499Z","etag":null,"topics":["android","bluetooth-low-energy","gps","heartrate","offline","outdoor","privacy","sport","tracking"],"latest_commit_sha":null,"homepage":"https://OpenTracksApp.com","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenTracksApp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"liberapay":"OpenTracks","github":["rgmf","pstorch","dennisguse"],"custom":"https://play.google.com/store/apps/details?id=de.dennisguse.opentracks.playstore"}},"created_at":"2019-07-21T10:14:34.000Z","updated_at":"2024-05-30T08:13:17.899Z","dependencies_parsed_at":"2023-10-15T09:00:27.729Z","dependency_job_id":"e2d3c656-bc36-4968-8b2b-165417b6bdf3","html_url":"https://github.com/OpenTracksApp/OpenTracks","commit_stats":null,"previous_names":[],"tags_count":186,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenTracksApp%2FOpenTracks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenTracksApp%2FOpenTracks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenTracksApp%2FOpenTracks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenTracksApp%2FOpenTracks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenTracksApp","download_url":"https://codeload.github.com/OpenTracksApp/OpenTracks/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245927286,"owners_count":20695204,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","bluetooth-low-energy","gps","heartrate","offline","outdoor","privacy","sport","tracking"],"created_at":"2024-07-31T18:00:53.699Z","updated_at":"2025-03-27T21:31:48.414Z","avatar_url":"https://github.com/OpenTracksApp.png","language":"Java","funding_links":["https://liberapay.com/OpenTracks","https://github.com/sponsors/rgmf","https://github.com/sponsors/pstorch","https://github.com/sponsors/dennisguse","https://play.google.com/store/apps/details?id=de.dennisguse.opentracks.playstore","https://liberapay.com/OpenTracks/donate"],"categories":["Java","Android Apps","Awesome health \u0026 fitness Free/Open Source projects"],"sub_categories":["Android Health \u0026 Fitness"],"readme":"# \u003cimg src=\"drawable-svg/LOGO.svg\" alt=\"OpenTracks logo\" height=\"40\"\u003e\u003c/img\u003e OpenTracks: a sport tracker\n\n_OpenTracks_ is a sport tracking application that completely respects your privacy.\n\n[![Awesome Humane Tech](https://codeberg.org/teaserbot-labs/delightful-humane-design/raw/branch/main/humane-tech-badge.svg)](https://delightful.club/delightful-humane-design/#health)\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003cth\u003eFree (F-Droid)\u003c/th\u003e\n        \u003cth\u003eFree (Nightly for F-Droid)\u003c/th\u003e\n        \u003cth\u003eDonations\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"center\"\u003e\n            \u003ca href=\"https://f-droid.org/packages/de.dennisguse.opentracks.playstore\"\u003e\n                \u003cimg alt=\"Get it on F-Droid\" src=\"https://fdroid.gitlab.io/artwork/badge/get-it-on.png\" height=\"60\" align=\"middle\"\u003e\n            \u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\n            \u003ca href=\"https://fdroid.storchp.de/fdroid/repo?fingerprint=99985A7E73DCB0B16C9BDDCE7A0B4996F88068AE7C771ED53E217E69CD1FF196\"\u003e\n                \u003cimg alt=\"Nightly builds (for F-Droid client)\" src=\"https://opentracksapp.com/static/img/fdroid.storchp.de.png\" height=\"90\" align=\"middle\"\u003e\n            \u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\n            \u003ca href=\"https://liberapay.com/OpenTracks/donate\"\u003e\n                \u003cimg alt=\"Donate using Liberapay\" src=\"https://liberapay.com/assets/widgets/donate.svg\" height=\"45\" align=\"middle\"\u003e\n            \u003c/a\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd align=\"center\"\u003e\n            \u003cimg alt=\"OpenTracks version published on F-Droid\" src=\"https://img.shields.io/f-droid/v/de.dennisguse.opentracks.playstore.svg\" align=\"middle\" \u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd align=\"center\"\u003e\n            \u003ca href=\"https://play.google.com/store/apps/details?id=de.dennisguse.opentracks.playstore\"\u003e\n                \u003cimg alt=\"Get it on Google Play\" src=\"https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png\" height=\"60\" align=\"middle\"\u003e\n            \u003c/a\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\nTranslations are hosted on \u003ca href=\"https://hosted.weblate.org/engage/opentracks/\"\u003e\nhosted.weblate.org\u003c/a\u003e.\n\u003ca href=\"https://hosted.weblate.org/engage/opentracks/\"\u003e\n\u003cimg src=\"https://hosted.weblate.org/widgets/opentracks/-/horizontal-auto.svg\" alt=\"Translation status\" /\u003e\n\u003c/a\u003e\n\n## Screenshots\n\n\u003cdiv\u003e\n    \u003cimg width=\"23%\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot1.png\"\u003e\n    \u003cimg width=\"23%\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot2.png\"\u003e\n    \u003cimg width=\"23%\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot3.png\"\u003e\n    \u003cimg width=\"23%\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot4.png\"\u003e\n\u003c/div\u003e\n\u003cdiv\u003e\n\t\u003cimg width=\"23%\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot5.png\"\u003e\n    \u003cimg width=\"23%\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot6.png\"\u003e\n\t\u003cimg width=\"23%\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot7.png\"\u003e\n\t\u003cimg width=\"23%\" src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot8.png\"\u003e\n\u003c/div\u003e\n\n## Features\n* __Tracking:__ track your sport and outdoor activities\n* __Voice announcements__\n* __Photos and Markers:__ mark interesting locations while tracking\n* __Export:__\n    * export tracks either as [KMZ 2.3](https://docs.opengeospatial.org/is/12-007r2/12-007r2.html) (incl. photos), [KML 2.3](https://docs.opengeospatial.org/is/12-007r2/12-007r2.html), or [GPX 1.1](https://www.topografix.com/GPX/1/1/)\n    * export automatically after each recording (e.g., to sync via [Nextcloud](https://nextcloud.com/))\n    * avoid duplication: each exported file contain a random unique identifier (i.e., `opentracks:trackid`)\n* __Altitude:__\n    * gain/loss via barometric sensor (internal if present or via Bluetooth's Environmental Sensing Service)\n    * shown in EGM2008 (above mean sea level); exported as WGS84\n* __Bluetooth LE sensors:__\n    * heart rate\n    * cycling: speed and distance\n    * cycling: cadence\n    * cycling: power meter\n    * running: speed and cadence\n    * support for BLE sensor training only (i.e., without GPS) for indoor training\n\n  An overview of tested sensors: [README_TESTED_SENSORS.md](README_TESTED_SENSORS.md)\n\n### Gadgetbridge integration\n\nOpenTracks can be used with [Gadgetbridge](https://www.gadgetbridge.org/):\n* shows statistics via notification on smart watches (requires Gadgetbridge 0.56.1 or later), and\n* Gadgetbridge's GPX exporter generates `opentracks:trackid` to avoid duplication (Gadgetbridge 0.53.0 or later).\n\n### Privacy\n* __No Internet access:__ Internet is not used\n* __No advertising__\n* __No in-app analytics__\n* __No use of Google Play Services__\n\n__Only required permissions:__\n* _ACCESS_FINE_LOCATION_: required to use the GPS.\n* _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)\n\n### Public API\n\nOpenTracks includes an API for starting/stopping recording by another installed application (e.g., [Automate](https://llamalab.com/automate/), [Tasker](https://tasker.joaoapps.com), or [Easer](https://github.com/renyuneyun/Easer)).\nThe API can be invoked by sending an explicit Intent to start an activity.\n\n`Package`  (depends on the variant installed):\n* F-Droid: `de.dennisguse.opentracks`\n* GooglePlay: `de.dennisguse.opentracks.playStore`\n* Debug: `de.dennisguse.opentracks.debug`\n* Nightly: `de.dennisguse.opentracks.nightly`\n\n`Classes`:\n* **Start a recording:**  `de.dennisguse.opentracks.publicapi.StartRecording`\n    * Set track data: `TRACK_NAME`, `TRACK_DESCRIPTION`, `TRACK_CATEGORY`, and `TRACK_ICON` (\n      non-localized identifier\n      see [/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java#L38](/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java#L38)).\n      NOTE: if `TRACK_ICON` is not present, `TRACK_CATEGORY` will be used to determine the icon (\n      localized).\n    * Send recorded data to another application via _Dashboard API_: `STATS_TARGET_PACKAGE` and\n      `STATS_TARGET_CLASS`\n* **Stop a recording:**  `de.dennisguse.opentracks.publicapi.StopRecording`\n* **Create a marker:**  `de.dennisguse.opentracks.publicapi.CreateMarker`\n\nFor testing via adb: `adb shell am start -e someParameter someValue -n \"package/class\"`\n\nThe Public API is disabled by default to protect the user's privacy, but it can easily be enabled in the settings.\n\n## File formats compatibility with open-source software\n|                                                           | [GPX 1.1](https://www.topografix.com/GPX/1/1/)                                 | [KML 2.3](https://docs.opengeospatial.org/is/12-007r2/12-007r2.html) | [KMZ 2.3](https://docs.opengeospatial.org/is/12-007r2/12-007r2.html) |\n|-----------------------------------------------------------|--------------------------------------------------------------------------------|----------------------------------------------------------------------|----------------------------------------------------------------------|\n| [OpenLayers 7.1.0](https://openlayers.org/)               | ?                                                                              | [no](https://github.com/openlayers/openlayers/issues/14104)          | [no](https://github.com/openlayers/openlayers/issues/14104)          |\n| [Golden Cheetah 3.5](https://www.goldencheetah.org/)      | ?                                                                              | [no](https://github.com/GoldenCheetah/GoldenCheetah/issues/4271)     | [no](https://github.com/GoldenCheetah/GoldenCheetah/issues/4271)     |\n| [GpxPod](https://apps.nextcloud.com/apps/gpxpod)          | ?                                                                              | ?                                                                    | ?                                                                    |\n| [OsmAnd](https://github.com/osmandapp/OsmAnd)             | ?                                                                              | [no](https://github.com/osmandapp/OsmAnd/issues/15271)               | [no](https://github.com/osmandapp/OsmAnd/issues/15271)               |\n| [FitTrackee](https://github.com/SamR1/FitTrackee)         | yes                                                                            | n/a                                                                  | n/a                                                                  |\n| [SportsTracker](https://github.com/ssaring/sportstracker) | yes, [single tracks only](https://github.com/ssaring/sportstracker/issues/260) | no                                                                   | no                                                                   |\n| [ExifTool](https://exiftool.org)                          | [yes](https://exiftool.org/forum/index.php?topic=15972.0)                      | no                                                                   | no                                                                   |\n\n\n## Dashboard API (incl. map)\n\nAs of v3.3.1, OpenTracks supports custom dashboards for displaying previously recorded and live\ntracks.\n\nThe reference implementation is [OSMDashboard](https://github.com/OpenTracksApp/OSMDashboard), which\npresents an OpenStreetMap map (showing the current track, incl. updates). The Dashboard API is also\nused by [Gadgetbridge](https://codeberg.org/Freeyourgadget/Gadgetbridge/) for displaying live track\nstatistics on supported wearables.\n\nAlternatively, recorded tracks can be shared as KMZ/GPX with installed applications (\ne.g., [OsmAnd](https://play.google.com/store/apps/details?id=net.osmand)). However, this is rather\nslow and does not provide updates while recording.\n\nThe developer documentation is in [README_API.md](README_API.md).\n\n## Backup\n\nOpenTracks stores the data in the app-internal space:\n`/data/data/de.dennisguse.opentracks[|.playstore]`\n\nThere is a SQLite database `database.db` that contains the tracks as well as the markers.\nPictures attached to markers are stored as separate files.\n\nFor backup and recovery, the best approach is to export as one KMZ file.\nThis will contain all the tracks, pictures and the data as similar as possible as stored internally.\nIn difference to backing up the database directly, a KMZ allows to be imported into a different (\ne.g., newer) version of OpenTracks.\n\n## Project history\n\n_OpenTracks_ is based upon Google _My Tracks app_ ([code](https://code.google.com/archive/p/mytracks/)).\n_My Tracks_ was initially released by Google in 2010 as [open-source software](http://google-latlong.blogspot.fr/2010/05/code-for-my-tracks-is-now-yours.html).\nIn 2016, [Google decided to discontinue](https://support.google.com/maps/answer/6333516) _My Tracks_ and stopped distributing it via the Google Play store in April 2016.\nThen [Plonk42](https://github.com/plonk42) conducted some maintenance work until 2016, so _My Tracks_ could still be used (based upon version _Google's MyTracks_ version 2.0.6).\nPlonk42's version is available [here](https://github.com/Plonk42/mytracks).\nIn 2019, _OpenTracks_ was forked from Plonk42's _My Tracks_ and major rework was conducted.\n\nRework of _OpenTracks_ included:\n* removing Google's analytics code,\n* removing integration into Google Drive,\n* removing Google Maps integration,\n* removing Google Earth integration,\n* removing use of Google Play service,\n* removing calorie estimation and activity estimation,\n* removing support for ANT+ and Classic Bluetooth,\n* adding support for Bluetooth LE heart rate sensors,\n* removing Protobuf (store sensor data in SQLite columns directly), and\n* removing Android Service API for other apps.\n\nArtwork, logos and user interface remained more or less unchanged.\n\nMore information about _Google My Tracks_:\n* [Wikipedia page](https://en.wikipedia.org/wiki/MyTracks)\n* [Google code archive](https://code.google.com/archive/p/mytracks/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOpenTracksApp%2FOpenTracks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FOpenTracksApp%2FOpenTracks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOpenTracksApp%2FOpenTracks/lists"}