openGym workout tracker — self-hosted gym & fitness app
openGym is a self-hosted workout tracker you run on your own server. It plans routines, logs sets, and tracks muscle fatigue — no subscription, no ads, no data leaving your machine. One Docker command gets it running. The catch: you maintain your own server, and passkeys require HTTPS.
What openGym is
openGym is a self-hosted gym and bodyweight tracker. You build a routine per weekday, run guided sessions with weights pre-filled from last time, and the app logs sets while watching for PRs. A muscle map shows volume distribution and recovery status. Progression rules automate loading increases. Passkey login keeps data local, and a PWA works on your phone.
Planning, training, and tracking progress
- ✓Weekly routine builder featuring four starter plans (Push/Pull/Legs, Upper/Lower, Full Body, 5×5) which are provided as editable templates
- ✓1,324-exercise library with animated demos, searchable by muscle group or equipment, browsable on a body map
- ✓Guided workout sessions with pre-filled weights, rest timer, PR detection, and plate math for trap bar, barbell, Smith machine, and EZ bar
- ✓Muscle mapping in three modes: volume distribution, recovery status, and untrained muscles
- ✓Progression rules per routine or exercise — linear, Greyskull LP, double progression through a rep range, or time-based
- ✓Import from FitNotes, Strong, Hevy, and Apple Health weight exports; export everything as JSON
- ✓Passkey (WebAuthn) login with private keys in device secure hardware; optional password fallback; per-profile sync across devices
- ✓PWA install on mobile with offline support; Android APK also available from the releases page
Running it with Docker in under five minutes
Clone the repo, copy `.env.example` to `.env`, run `docker compose pull` to fetch prebuilt images for amd64 and arm64, then `docker compose up -d`. openGym starts on port 8080. On first run it downloads exercise media (around 140 MB). For passkey login on your phone you need HTTPS — two lines in `.env` handle that, and the self-hosting guide covers Cloudflare Tunnel, Caddy, Traefik, and nginx. Kubernetes and LAN-only HTTPS guides are also in the docs.
Strengths
- ✓Data ownership — everything lives in JSON files on your server, passkeys never leave your device, export as JSON anytime
- ✓Feature depth — supersets, warm-up sets, drop sets, rest-pause, timed exercises, cardio, and deload planning in a single app
- ✓Exercise library is large and searchable by muscle or equipment, with animated demos and custom user exercises
- ✓Progression engine with multiple load schemes and automatic deloads on stalls — not just 'add 5 pounds a week'
- ✓Sync works via revision-based merging so two devices editing simultaneously don't overwrite each other
- ✓Modern UX for a self-hosted app — PWA install, passkeys, offline support, 17 languages, REST timer screen flash for loud gyms
Where openGym falls short
- △HTTPS is mandatory for passkey login, which adds complexity for LAN-only setups — the docs cover it but it's not one click
- △AI coach and MCP server are opt-in but require your own API key and some configuration; not plug-and-play
- △The exercise media (images and animations) is third-party content with disputed ownership — not covered by the AGPL license
- △v1.4.0 is planned as a breaking change to migrate from JSON files to a proper database — plan for that migration if you start now
- △Sync is per-profile, and two devices editing the same profile merge by revision — this is revision-based merge but not instantaneous; some manual reconciliation may be needed
- △The phone app for iOS requires building with Xcode since Apple blocks sideloading; Android gets a ready-made APK but openGym deliberately avoids the Play Store
Other self-hosted fitness trackers
Frequently asked questions
Yes. openGym is licensed under AGPL-3.0 with no paid tier, no features held back for sponsors, and nothing that stops working if you don't donate. Run it as long as you want on your own server.
openGym imports from FitNotes, Strong, and Hevy via CSV or API key, plus Apple Health weight exports. Export everything as JSON for a full backup at any time.
Yes. The PWA caches the interface and recent data locally. You can log workouts offline; new sessions queue and sync when connectivity returns. A banner shows whenever the app is working offline.
Passkey private keys stay in your phone's secure hardware and never reach the server, which only stores public keys. openGym runs entirely on your own server with nothing sent to third parties. Optional password login is available if you prefer not to use passkeys.
Yes. The Docker images include both amd64 and arm64 builds, so a Raspberry Pi works. The self-hosting guide covers low-power setups, though performance depends on your hardware.
Your data stays in JSON files you control. Export everything as JSON anytime, and the codebase remains available under AGPL-3.0 — anyone can fork it and continue development.
The problem it solves
Most fitness apps keep your training history behind a subscription or on servers you don't control. If the company shuts down, pivots, or raises prices, your data goes with it. openGym solves the ownership problem by putting everything under your own roof — but that means you're the one setting up Docker, handling HTTPS for passkeys, and maintaining the instance.
Best use cases
- •Lifters who want to own their training data instead of trusting a third-party service
- •Users migrating from FitNotes, Strong, or Hevy with existing workout history
- •Self-hosters running a home gym or small training group with optional admin dashboard and invite-only signup
- •Athletes tracking bodyweight exercises, progressive calisthenics, and timed holds alongside barbell work
- •Trainers wanting an offline-capable PWA that works on any phone without an App Store install
- •Anyone burned by a fitness app that raised prices, added telemetry, or shut down
Who should try it — and who should skip
Pick up openGym if you've abandoned a paid fitness app and want your training data back under your control. It works well for lifters who track barbell work alongside cardio and bodyweight, and for anyone who wants a PWA that runs offline without an App Store. Skip it if you want zero maintenance — running Docker, handling HTTPS for passkeys, and upgrading occasionally is on you. Also skip if a polished mobile app from the Play Store matters more than data ownership.
Related repositories
Curious whether openGym is right for you?
Let ChatGPT, Claude, or Perplexity look into it — click below and see what AI actually says about openGym.
