self-hosted 4 min read

opengym: a self-hosted gym and bodyweight tracker

opengym is an AGPL-3.0 self-hosted workout tracker that plans routines, logs supersets, tracks muscle fatigue and imports from FitNotes, Strong and Hevy.

By
Share: X in
GitHub social preview card for DuarteSantos8/openGym

TL;DR: opengym is a self-hosted workout tracker that plans routines, logs sets including supersets, warm-ups and cardio, and shows which muscles are trained, fatigued or detrained. It imports from FitNotes, Strong and Hevy, authenticates with passkeys, and runs under AGPL-3.0.

What the project is

Most workout apps sync your history to someone else’s database. opengym’s description ends with the reason it exists, your data on your server. That is the product decision everything else supports, and it explains the Docker topic.

The feature list is longer than most projects of this size put in a description:

  • Routine planning, so a workout is designed rather than improvised at the rack
  • Logging for supersets, warm-ups and cardio, not just straight sets
  • Muscle state tracking that separates trained, fatigued and detrained
  • Import from FitNotes, Strong and Hevy, so an existing history is not stranded
  • Passkey login instead of password handling

The muscle state tracking is the piece with real substance behind it. “Which muscles are fatigued” is a derived value, computed from your recent history, and it answers the question that actually changes a session: what should I train today. Detraining is the same computation run in reverse, and surfacing it is what distinguishes a tracker from a spreadsheet.

How to try it

There is a live instance at https://opengym.duarte-santos.ch, which is the fastest way to decide whether the interface works for you.

For self-hosting, the repository publishes a docker topic, so a container is the expected deployment path. Check the project instructions for the exact image reference rather than guessing at one:

git clone https://github.com/DuarteSantos8/openGym.git
cd openGym
ls

Import order matters when you bring history across. Load FitNotes, Strong or Hevy first and let the tracker compute muscle state from real training data, otherwise you are looking at a body model built from nothing.

curl -s https://api.github.com/repos/DuarteSantos8/openGym \
  | jq '{topics: .topics, license: .license.spdx_id, homepage}'

The metadata

FieldValue
Stars4,261
Forks657
Open issues133
Primary languageJavaScript
LicenseAGPL-3.0
Created18 Jul 2026
Last push4 Oct 2026
Repository sizeabout 15.9 MB

The seven published topics, bodyweight, docker, fitness, fitness-tracker, gym, health, are unusually complete for a personal project, and they line up exactly with what the description claims. That is a small signal about maintenance habits worth trusting.

Passkey login is worth flagging as a security choice, since a self-hosted service is one fewer credential store for you to worry about and one fewer shared secret if the instance is ever exposed.

When to use it

It fits if your training history already lives in one of the three import formats, or if you are starting fresh and want to own the database outright. A 15.9 MB JavaScript repository with a container workflow is a light thing to run on a home server.

The detrained and fatigued indicators also suit anyone training on a plan and wanting the app to argue with the plan.

When NOT to use it

Check the license before you build on it. AGPL-3.0 is the most demanding of the common open source licenses, and if you intend to modify it and offer that version to others over a network, you owe them the source.

Skip it if you need a phone app with offline logging and no server to reach. The description says self-hosted, and nothing in it suggests a local-only mode.

One hundred thirty three open issues is normal for a project two and a half months old, but it means you are adopting something in motion. Self-hosting makes that cheap, a bad update is one git checkout away from being reverted.

Source and Accuracy Notes

  • Project page: https://github.com/DuarteSantos8/openGym
  • Source repository: DuarteSantos8/openGym (verified via GitHub API html_url)
  • License: AGPL-3.0 (verified via GitHub API license.spdx_id)
  • Stars at time of writing: 4,261