Pick your muscles on a real body map, log your sets, and watch your numbers move.
Features · Import · Privacy · Translations · Build
English · Español
GymMane is an open-source strength log built for the gym floor. Tap the muscles you want to train on an interactive body, log reps and weight set by set, rest with an alarm that actually gets your attention, and read progress that comes from your own sets — volume, records, streak and muscle split. Nothing decorative.
Tip
Yours, completely. No account, no ads, no subscription — and no internet permission at all. Every set stays on your phone.
360+ exercises · 6 calculators · 100% offline · 0 internet permissions
|
|
|
|
Bring your history with you. GymMane reads the workout and measurement exports of Hevy and Strong — CSV or the measurements zip — and the whole FitNotes backup, which is a SQLite database. Every exercise is matched against its own library and anything you already logged is skipped.
| App | What to hand it |
|---|---|
| Hevy | workout_data.csv, plus the measurements zip |
| Strong | strong.csv |
| FitNotes | the whole .fitnotes backup (SQLite) |
Important
GymMane has no analytics, no ad SDK and no network code. The app never
asks for Android's INTERNET permission, so it cannot send your training
anywhere. The only outbound actions are links you tap yourself.
Everything it does ask for, and why:
| Permission | What it is for |
|---|---|
POST_NOTIFICATIONS |
show the rest timer and its alarm |
USE_EXACT_ALARM |
ring at the right second, not "sometime later" |
VIBRATE |
the alarm buzzes |
WAKE_LOCK |
the alarm fires with the screen off |
GymMane speaks English and Spanish today, and more languages are very welcome. Translations live in plain ARB files — one file per language, nothing to compile.
The full guide lives in TRANSLATING.md.
git clone https://github.com/InlitX/GymMane.git
cd GymMane
flutter pub get
flutter test
flutter build apk --releaseBug reports, ideas and pull requests are all welcome — see CONTRIBUTING.md. For anything larger than a fix, open an issue first so we can agree on the direction.













