Skip to content

Documentation

Grom is a self-hosted workout tracker with an optional ActivityPub federation layer. Record or import workouts, manage equipment, follow other athletes (local or federated), like and comment on their activities, and browse a social feed — all on infrastructure you control.

The server is a single Go binary; the Flutter client ships as an embedded web UI and as an Android app.

Features

  • Workouts — create and edit activities with stats, notes, media, and map previews
  • GPS tracks — import GPX and FIT; live recording on Android
  • Equipment — track bikes, shoes, and other gear linked to workouts
  • Social feed — follow users and see their workouts in one timeline
  • Workout likes — like others’ activities, see counts and who liked; federated Like / Undo when ActivityPub is enabled
  • Workout comments — comment on own or others’ activities (add/list/delete); federated Create/Delete Note when ActivityPub is enabled
  • Federation — optional ActivityPub so instances can follow each other across the network
  • Strava import — bulk-import a Strava data export ZIP
  • Health Sync — import activities from Google Drive on Android (Health Sync exports)
  • API tokens — scoped personal access tokens (grom_pat_…) for workouts and equipment
  • Clients — same Flutter UI in the browser (served by the server) and as an Android APK
  • Locales — English, Russian, and German in the Flutter UI

Workout list Live recording Equipment

Screen-by-screen tour: User overview. Build and run: Install and run. Source and quick start: repository README.

I want to…

User

Goal Page
See what the client can do (workouts, likes, comments, recording, equipment) User overview
Reset a forgotten password (when the operator enables email) User overview — Sign-in and password reset
Sign in / register when the instance enables captcha User overview — Sign-in and password reset
Use Grom in a browser (same UI as Android) Open the server base URL after install; see User overview
Import a Strava export (UI + how import works) Strava bulk import
Import Health Sync activities from Google Drive (Android) Health Sync + Google Drive
Create API tokens for scripts and external apps Grom API tokens
Delete my account Delete your Grom account

Admin

Goal Page
Build and run the server Install and run
Configure TLS, storage, federation, logging, mailer / password reset, captcha Configuration

Reference

Topic Page
Strava ZIP column mapping and import behavior Strava bulk import
Health Sync Google Drive import (Android client) Health Sync + Google Drive
Full annotated config config.full.yaml
HTTP API (Swagger UI) On a running server: /api/docs/ (e.g. http://localhost:8080/api/docs/); OpenAPI sources in api/docs/
Privacy policy Privacy Policy