⚠️ Warning — early developmentGrom is under active development and is closer to an MVP than production software. It is not ready for production use.
Configuration formats, APIs, storage layouts, and other interfaces may and will change without a stable migration path. Expect bugs. Use at your own risk.
Self-hosted workout tracker with an optional ActivityPub federation layer. Record or import workouts, manage equipment, follow other athletes (local or federated), 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.
- 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
- Federation — optional ActivityPub so instances can follow each other across the network
- Strava import — bulk-import a Strava data export ZIP
- 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
make grom # swagger + Flutter web + Go binary → cmd/grom/grom
cd cmd/grom && go run . --config config-examples/config.dev.notls.yamlSet auth.jwt_secret in your config (required). Example profiles: cmd/grom/config-examples/.
Then open http://localhost:8080/ for the web UI, or http://localhost:8080/api/docs/ for Swagger API docs (default dev port).
- Docs index — user and admin guides
- User overview — client screens (workouts, recording, equipment)
- Install and run — build and start the server
- Configuration — TLS, storage, federation, logging
- API docs —
/api/docs/on a running server (OpenAPI sources inapi/docs/)
GPL-3.0
If you’d like to support development, see DONATIONS.md.


