2025-09-22 18:45:54 -07:00
2025-09-22 18:45:54 -07:00
2025-09-22 18:45:54 -07:00
2025-09-22 18:45:54 -07:00
2025-09-22 18:45:54 -07:00
2025-09-22 18:45:54 -07:00
2025-09-22 18:45:54 -07:00
2025-09-22 18:45:54 -07:00
2025-09-21 11:03:52 -07:00
2025-09-22 18:45:54 -07:00
2025-09-21 11:03:52 -07:00
2025-09-22 18:45:54 -07:00
2025-09-22 18:45:54 -07:00
2025-09-21 11:03:52 -07:00
2025-09-22 18:45:54 -07:00
2025-09-21 11:03:52 -07:00
2025-09-21 11:03:42 -07:00

Garmin Connect Go Client

Go port of the Garth Python library for accessing Garmin Connect data. Provides full API coverage with improved performance and type safety.

Installation

go get github.com/sstent/garmin-connect/garth

Basic Usage

package main

import (
	"fmt"
	"time"
	"garmin-connect/garth"
)

func main() {
	// Create client and authenticate
	client, err := garth.NewClient("garmin.com")
	if err != nil {
		panic(err)
	}
	
	err = client.Login("your@email.com", "password")
	if err != nil {
		panic(err)
	}

	// Get yesterday's body battery data
	yesterday := time.Now().AddDate(0, 0, -1)
	bb, err := garth.BodyBatteryData{}.Get(yesterday, client)
	if err != nil {
		panic(err)
	}
	
	if bb != nil {
		fmt.Printf("Body Battery: %d\n", bb.BodyBatteryValue)
	}

	// Get weekly steps
	steps := garth.NewDailySteps()
	stepData, err := steps.List(time.Now(), 7, client)
	if err != nil {
		panic(err)
	}
	
	for _, s := range stepData {
		fmt.Printf("%s: %d steps\n", 
			s.(garth.DailySteps).CalendarDate.Format("2006-01-02"),
			*s.(garth.DailySteps).TotalSteps)
	}
}

Data Types

Available data types with Get() methods:

  • BodyBatteryData
  • HRVData
  • SleepData
  • WeightData

Stats Types

Available stats with List() methods:

Daily Stats

  • DailySteps
  • DailyStress
  • DailyHRV
  • DailyHydration
  • DailyIntensityMinutes
  • DailySleep

Weekly Stats

  • WeeklySteps
  • WeeklyStress
  • WeeklyHRV

Error Handling

All methods return errors implementing:

type GarthError interface {
	error
	Message() string
	Cause() error
}

Specific error types:

  • APIError - HTTP/API failures
  • IOError - File/network issues
  • AuthError - Authentication failures

Performance

Benchmarks show 3-5x speed improvement over Python implementation for bulk data operations:

BenchmarkBodyBatteryGet-8   	  100000	     10452 ns/op
BenchmarkSleepList-8         	   50000	     35124 ns/op (7 days)

Documentation

Full API docs: https://pkg.go.dev/garmin-connect/garth

CLI Tool

Includes cmd/garth CLI for data export. Supports both daily and weekly stats:

# Daily steps
go run cmd/garth/main.go --data steps --period daily --start 2023-01-01 --end 2023-01-07

# Weekly stress
go run cmd/garth/main.go --data stress --period weekly --start 2023-01-01 --end 2023-01-28
Description
No description provided
Readme 12 MiB
Languages
Go 99.6%
Shell 0.4%