Garmin Explore waypoint and collection sync into a local GeoPackage

Files
README.md

carnet-de-route #

Garmin Explore waypoint and collection sync into a local GeoPackage.

The tool runs a small localhost bridge that pairs with a userscript inside your normal Garmin-authenticated browser. Through that bridge it reads Garmin Explore waypoints and collections, stores them with sync metadata in a SQLite/GeoPackage file, and can push reviewed local changes back to Garmin.

The GeoPackage, browser profile, and approvals file contain private location and account data. Do not share them.

Install / build #

Requirements: Go 1.24+, a Chromium-based browser, and the Tampermonkey userscript manager.

go build ./cmd/carnet-de-route

Running a session #

carnet-de-route                       # start the bridge session
carnet-de-route --db /path/to.gpkg    # use a non-default GeoPackage

On first run:

  1. The CLI prints the bridge URL (defaults to http://127.0.0.1:43117) and a path to the userscript at /userscript.user.js. Install or update it in Tampermonkey.
  2. Open https://explore.garmin.com/Map in your regular Garmin-authenticated browser. The userscript pairs with the bridge and shows a confirmation code.
  3. Back in the terminal, approve the pairing prompt. The pairing is persisted in approved-bridges.json.
  4. Trigger actions from the Tampermonkey menu on the Explore page: fetch, push, push-plan, status.
    • fetch pulls waypoints and collections through the userscript and reconciles them into the GeoPackage.
    • push-plan prints what a push would do without writing to Garmin.
    • push builds the plan, asks for confirmation in the CLI, then applies changes via the userscript.

The Library collection is treated as a system all-waypoints collection locally and is not editable. Deleted local waypoints are moved into a local-only Trashcan collection and kept there after Garmin deletion until an explicit purge path is added. Push never enables MapShare publishing for new waypoints.

Other CLI commands #

carnet-de-route add-waypoint --name "Camp" --lat 43.1 --lon 11.2 --elevation 850 --icon 151
carnet-de-route status                # counts, dirty rows, conflicts
carnet-de-route inspect-db            # validate GeoPackage metadata and app tables
carnet-de-route style --reset         # reset the managed QGIS style row
carnet-de-route style --refresh-icons # refetch the Garmin icon sprite and rebuild QML

All commands accept --db PATH. On macOS, defaults live under ~/Library/Application Support/carnet-de-route/ (browser profile, GeoPackage, approved bridges).

The GeoPackage ships a default QGIS style for the waypoints layer; see docs/qgis.md for behavior and how style --reset works.

Development #

go test ./...
go vet ./...

Integration tests require an authenticated browser profile and are opt-in:

GARMIN_EXPLORE_INTEGRATION=1 go test ./internal/explore -run Integration

Further reading #

License #

carnet-de-route is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later). See LICENSE for the full text. Licensing is declared via the REUSE specification in REUSE.toml, so new files inherit the project license without per-file SPDX headers.

Garmin, Garmin Explore, and inReach are trademarks of Garmin Ltd. This project is not affiliated with or endorsed by Garmin. Icon identifiers and endpoint shapes are documented for interoperability only. The Garmin icon sprite fetched at runtime by style --refresh-icons remains Garmin's copyright; the resulting GeoPackage should not be redistributed.