This page is for the people who read patch notes. Every feature, every mechanic, every number — how it works and why it works that way. If it's in the app, it's documented here.
Every set requires an explicit ✓ tap before it counts. Confirmed sets lock — inputs become read-only, PR detection fires, and the set is committed to your history. Tap the edit button to unlock and change a confirmed set. This prevents accidental PRs from fat-fingering and makes every recorded set deliberate.
When you start a planned session, your working sets from the last time you did that exercise pre-fill as ghost sets — dimmed rows showing the weight and reps you hit last time. They're your progressive overload baseline: see what you did, decide whether to match it or beat it, confirm. Warmup sets and BFR sets are never inherited — only working volume carries forward.
Long press any weight field to open the throttle gearbox. Three gear settings: 1 / 2.5 / 5 (in your configured weight unit). Tap to select a gear, or swipe horizontally on the field to shift. Then hold swipe up or down — the weight increments continuously at 500ms intervals with a haptic click on every step. Lift your finger to stop. Tap anywhere outside to dismiss and return to normal keyboard input. The selected gear persists for the rest of the session.
Every set has a type, changeable by tapping the icon to its left:
Planks, carries, and isometric holds are logged by duration in seconds rather than reps. Duration PRs are tracked separately. Timed exercises are excluded from tonnage calculations entirely — reps × weight is meaningless for a 60-second plank.
Each cardio exercise logs duration, distance, intensity, and notes. Cardio data is separate from lifting stats and appears in its own chart section in History. Exercises include treadmill, outdoor run, and other endurance types.
Fires automatically after each confirmed working set. Derived from the wall clock — accurate even when the screen locks between sets.
Calculated as Date.now() - session.started_at minus any manually paused time. This makes it immune to Android's setInterval drift, which caused the old timer to lose approximately 14 minutes over a 40-minute session. The timer keeps running through screen locks; only an explicit pause or inactivity pause stops it. Inactivity pause fires after 10 minutes of no confirmed sets — the timer pulses amber until you tap to resume.
The session draft auto-saves every 5 seconds and on every state change. Kill the app mid-set, reboot the phone, or drain the battery — relaunch and the session comes back exactly where it was. Every confirmed set locked in, timers restored, draft intact.
Shows confirmed vs. total non-warmup sets during the active session. Updates live on every confirm, add set, and add exercise.
Build workout templates from scratch or start from a premade split: PPL (Push / Pull / Legs), Upper / Lower, Full Body A/B, or Bro Split. Each template lets you assign training days, name each day, and set notification times per day.
One workout is designated as Main — this drives the home screen training day indicator. The day cycle advances sequentially (Day A → B → C → A) each time you finish a session from that workout.
Custom exercises can be created directly in the builder's exercise picker — assign a secondary muscle with percentage split, equipment type, and movement category. Custom exercises enter the same analytics pipeline as built-in ones.
Two PR types tracked per exercise:
A snapshot of your all-time bests is taken at session start. This means PR checks during the workout are O(1) — instant, with no history scanning on every keystroke or confirmation. The PR badge fires on the set row the moment you confirm a beating set.
Warmup sets and BFR sets never count as PRs. Unlocking a confirmed set clears its PR tag until re-confirmed.
Sessions logged, total tonnage, average session duration, and your compound strength-to-bodyweight ratio at a glance. If you've set a focus bodypart in Settings, trend cards show weekly volume and week-over-week delta for those muscle groups.
Tap the stats panel on the home screen to expand:
A note on dumbbell volume: displayed values reflect per-hand weight. Total load is 2×. This is shown as a caveat, not corrected mathematically.
Scope all deep stats calculations to: All / Free weights / Cable / Machine / Bodyweight. Useful for isolating barbell compound volume from accessory work.
Set a primary and secondary focus bodypart in Settings. Trend cards on the home screen show weekly volume and week-over-week delta. Four trend suppression rules keep the numbers honest:
Every exercise in the library has a primary and secondary muscle assignment with a percentage split. Barbell Bench Press distributes 70% to Chest and 30% to Triceps. Tonnage follows these splits, so your volume picture reflects actual muscle stimulus rather than exercise count.
PR progression charts filterable by bodypart or individual exercise. Metrics: highest lift, session volume, total sets. Date ranges: All / 30d / 90d / This year. Cardio progress chart. Calendar view with colour-coded training days — tap any date to open the session detail.
Stats bar showing duration, volume, sets, and density (kg/min). BFR-only sessions show BFR-specific stats. Cardio sessions show logged time and distance. Full exercise list with every set below. Share button exports the session as formatted text.
24 badges across three rarity tiers. Most unlock automatically at session end when conditions are met.
Early Bird (session before 6am), 2am Club (session after 2am), Swamped (session under 20 minutes), Just the Bar (deload session), Ghost (comeback after a long absence).
Eccentric (50 sessions with notes), Iron Monk (30 clean sessions), Twigs (skip legs 14 times), The Long Game (session over 2 hours), First Blood (train on January 1st), No Romance (train on Valentine's Day), Haunted (train on Halloween), No Days Off (train on Christmas).
First Car (1,500kg total tonnage), Blue Whale (150,000kg), Oil Tanker (500,000kg), Saturn V (3,000,000kg), Stonks (PR on every exercise in one session). Plus four legend cards — Ronnie, Arnold, Dorian, CT Fletcher — that unlock when you've seen all taglines for that legend. Taglines have a 10% chance of appearing on each home screen visit.
Human-readable session log with toggle options: session density (kg/min), weekly tonnage by bodypart, set timestamps (wall-clock @HH:MM on every confirmed set for rest interval analysis), and an AI coaching prompt. The AI prompt rotates through 8 system prompts that frame your training history for LLM analysis — paste the export into ChatGPT, Claude, or any LLM and ask for programming feedback, volume balance review, or deload timing.
Machine-readable with a confirmed_at column (HH:MM format) for sets confirmed in v0.2+. Ready for import into Excel, Google Sheets, or any data analysis tool.
Both formats support date range filtering: All / Last 30d / Last 90d / This year / Custom range.
Full app backup exports all data as a .ironlog JSON file via Android's native share sheet — save to Google Drive, Files, email, or anywhere. One-tap restore from any .ironlog file. Backup reminder notifications fire at 15+ days since last backup (normal) and 30+ days (urgent). Never fires if you've never backed up.
Vanilla HTML, CSS, and JavaScript — no framework, no build step. Capacitor 8 wraps it for Android. The entire app is one HTML file, three JS files, and one CSS file.
All data lives in localStorage, keys prefixed il_. No IndexedDB, no SQLite, no external storage. Your training history is a JSON object on your device.
Session and rest timers derive from Date.now() wall clock, not setInterval accumulation. Android throttles JS timers aggressively when the screen locks — wall-clock derivation makes Iron Log immune. A 40-minute session shows 40 minutes regardless of how many times the screen locked.
All-time bests snapshot at session start. Checks during the session are O(1) — no database scans, no lag on confirm.
Draft auto-saved every 5 seconds and on every state change. Recovery on relaunch reconstructs the full session including timer offset, confirmed sets, and draft inputs.
Volume distributes across primary and secondary muscles by their assigned percentage split. Warmup, BFR, timed, and cardio exercises are excluded. The equipment filter scopes the calculation to a subset when active.
Zero. No network permissions in the Android manifest. The app cannot make a network request — not to sync, not to phone home, not to check a license. There is no server.
Free on Google Play. No account, no trial, no catch.
↓ Get Iron Log