openGym

Your workouts. Your weights. Your data.

A free, open-source gym & body-weight tracker. No subscription, no account required, no telemetry — ever.

Join the openGym Discord

Release announcements, self-hosting help with Docker, reverse proxies and passkeys, and somewhere to report a bug. It is where you will hear about a new version first.

Join the Discord

Everything a training log needs

Built in the gym, not in a boardroom

Every feature exists because it was needed on the gym floor — nothing is there to sell you anything.

▶️

Guided workouts

Knows what day it is, starts today's session, pre-fills your weights from last time, times your rest, spots PRs.

🏋️

1,324 exercises

Searchable library with animated demos, filterable by body part and the equipment you actually own — plus your own custom exercises.

🗓️

Weekly plan

A routine per weekday, and any day can be rescheduled when life happens — without touching the plan.

⚖️

Body weight & goal

Interactive chart with your goal line; every change is colored by whether it moves toward it.

💪

Muscle map, three ways

A body diagram read as balance (where the volume went, and which muscles got nothing), fatigue (what is still recovering, weighted by how hard each set was) or strength (how long since you trained it — and the exercises behind it, with their estimated 1RM).

🟩

Activity heatmap

A GitHub-style year view of your training time. Streaks included.

📈

Progression that follows a rule

Linear, Greyskull LP, double progression or added time — per routine, overridable per exercise. Your weights are already right when the session opens, and every target tells you why.

⏱️

Timed sets

Planks, hangs and carries are logged by time, with a timer for the set itself. Stop early and it logs what you actually held.

🧮

Estimated 1RM

Per exercise, from your best eligible set — and it names which one. Won't guess above 12 reps.

🔗

Supersets & cardio

Plan them, or pair two exercises mid-session and unpair them again. Work the group back-to-back with one rest per round — and log time + speed where weight × reps makes no sense.

📤

Share a plan

Send someone your routines as a small file — no workouts, no weigh-ins — or print it as a clean PDF. Importing merges, never overwrites.

🎯

Effort per set

Rate a set as RIR or RPE — whichever scale you already think in. Optional, and every set keeps the scale it was logged with.

☀️

Screen stays awake

No unlocking the phone between sets. The screen stays lit while a workout runs, and lets go the moment you finish.

📥

Bring your history

Import from FitNotes, Strong, Hevy — including the RPE they recorded — or body weight straight out of an Apple Health export.

🌍

12 languages

Full UI translation, exercise instructions in 10 languages, loaded on demand.

🔑

Passkeys, not passwords

Self-hosted profiles sign in with Face ID / fingerprint. Each person's data stays their own.

🎨

Designed, not assembled

Light & dark themes, 8 accent colors, a hand-drawn icon set. Looks the same on every phone.

🔥

Warm-up sets

Mark the ramp-up rows as warm-ups and they stay out of your 1RM, your progression and the fatigue map — present in the session, absent from the numbers.

🤖

Ask an AI about your training

An optional MCP server lets a client like Claude Desktop read your history in your own words — "what did I bench last week?". Read-only, runs on your machine, not in the Docker build.

📦

Yours to keep

One-tap JSON export and import. Your training log is a file you own, not a row in someone's cloud.

Screenshots

Five screens, zero clutter

openGym home screen with weekly overview and body-weight chart
Home
Guided workout screen with sets, rest timer and pre-filled weights
Workout
Stats screen with activity heatmap and charts
Stats
Weekly plan screen with routines per weekday
Plan
Exercise library with search and filters
Library

Live demo

Try it right here

This is the real app with seeded example data, running in your browser — poke around, start a workout, change anything.

Demo data lives only in this browser tab-family and can be reset in its Settings. Prefer a full window? Open the demo full-screen →

Get openGym

One app, two flavors

Same codebase, your choice of where the data lives: entirely on your phone, or on a server you control.

📱 Mobile app

For anyone — install and you're done.

  • Everything stays on your phone
  • No account, no server, no setup
  • Native workout-day reminders
  • Backups via the share sheet
  • No cross-device sync
Download for Android

v1.2.9 · 4.3 MB · Android 6.0+ · signed APK, sideload (your browser will ask — that's normal outside the Play Store)

Every release is also built and signed by CI and attached to the GitLab releases page, checksums and all.

iPhone? Apple doesn't allow installs outside the App Store — use the self-hosted version as a home-screen app instead, or see the docs.

🖥️ Self-hosted

For homelabbers — and their friends & family.

  • Sync across all your devices
  • Passkey profiles for multiple people
  • Your data readable on the desktop
  • Works as a home-screen app on iPhone & Android
  • One docker compose up
Self-hosting guide

AGPL-3.0 · prebuilt images for amd64 + arm64

Why openGym exists

openGym started as a tiny app I built for myself — I just wanted to log my workouts and weight without a subscription app claiming my training data. Then friends wanted in, then it grew a mind of its own.

— Duarte Santos · read the whole story →

Open source

AGPL-licensed, forever

The code is public, the license keeps every fork open, and there is no commercial version waiting behind a curtain. If openGym is useful to you, a ⭐ on GitLab helps more people find it.

There is a Discord for release announcements, self-hosting help and bug reports. It is the fastest way to hear about a new version — and the fastest way to get unstuck if a reverse proxy or a passkey is fighting you.

GitLab stars
forks
open issues
1,324exercises
12languages