v0.3.0 — Native Authentication
This release replaces the garth dependency with a native authentication engine that uses the same mobile SSO flow as the official Garmin Connect app.
What's new
- Native DI OAuth authentication — Login, token exchange, and auto-refresh are handled internally.
- Cloudflare bypass — multiple TLS impersonation strategies (Safari, Chrome, Edge via
curl_cffi) to work around Garmin's Cloudflare blocking of programmatic logins. - Automatic token refresh — DI OAuth tokens refresh seamlessly in the background. Once logged in, sessions persist indefinitely.
- Random browser fingerprinting — login requests use randomized browser identities to avoid detection.
- New methods:
delete_workout(),unschedule_workout()(#341) - Golf API fix — golf endpoints now work correctly (#320, thanks @rcloran)
- Workout constant fix —
TargetType.HEART_RATEnow maps to the correct Garmin API value (#333) - Regression tests for workout constants to prevent future drift (thanks @ayazhankadessova, PR #340)
- Added descriptions to workouts by @miki134 in #339
Breaking changes
- Saved tokens from previous versions are not compatible. A fresh login is required after upgrading.
- New token format stored as
garmin_tokens.jsonin~/.garminconnect/. - New dependencies:
curl_cffi,ua-generator.
Install
pip install --upgrade garminconnect curl_cffi ua-generatorFull Changelog: https://github.com/cyberjunky/python-garminconnect/commits/0.3.0