📘 User Guide

Everything you need to start training — from connecting your first sensor to uploading your finished ride.

🚴 Overview

Maximum Trainer is a free, open-source indoor cycling training application. It connects to smart trainers, power meters, heart rate monitors, and cadence sensors over Bluetooth LE (BLE), runs structured interval workouts in automatic ERG mode, and exports completed activities to the Garmin FIT format for upload to Strava and Intervals.icu.

📡

BLE Sensors

Heart rate, power, cadence, speed, and muscle oxygen via standard BLE profiles.

ERG Mode

Automatic resistance control — just pedal at the right cadence and hit your target power.

📋

Workout Library

Sync structured workouts (.zwo) from Intervals.icu, plus import your own .erg / .mrc files.

☁️

Activity Upload

Post-workout upload to Strava and Intervals.icu — directly from the app.

This guide assumes Maximum Trainer is already installed on your computer. If you need installation instructions, see the README on GitHub.

Browser version available: Maximum Trainer also runs directly in Chrome or Edge via WebAssembly (WASM) — no installation required. Open Try in Browser to launch it. The browser version supports BLE sensor connections via the Web Bluetooth API, but has no access to local files, no internet radio, and no video playback. The browser must be served over HTTPS and the device must be paired via a user gesture (clicking Start Workout).

🚀 First Launch & Login

On first launch, Maximum Trainer displays a login screen. You can sign in with your Intervals.icu account, or choose Offline Mode to train without an internet connection.

Option A — Sign in with Intervals.icu (recommended)

  1. Launch MaximumTrainer from your Start Menu, Applications folder, or desktop shortcut.
  2. On the login screen, click Sign in with Intervals.icu.
  3. Your web browser opens the Intervals.icu sign-in page — log in (email, Google, or Apple) and click Authorise.
  4. Return to MaximumTrainer — the Main Window opens, ready to use.

Option B — Offline Mode

  1. Launch MaximumTrainer.
  2. On the login screen, click Work Offline.
  3. The Main Window opens. All core features — ERG control, sensor recording, and workout playback from your local library — work without an internet connection. Intervals.icu calendar sync and cloud upload are not available in offline mode.

👤 User Profile & FTP

Maximum Trainer uses your Functional Threshold Power (FTP) and body weight to calculate training zones and relative power (W/kg). Setting these values correctly ensures ERG targets and zone boundaries are accurate.

  1. Open MaximumTrainer → Preferences from the menu bar (or Ctrl+,).
  2. Select the Profile category.
  3. Enter your FTP (watts), LTHR (lactate-threshold heart rate, bpm), and weight (kg).
  4. Click OK.

Don't know your FTP?

Use one of the built-in tests (shown in amber in the workout list): the FTP Test (20-minute protocol; FTP = 95 % of your test average), the shorter FTP 8min Test, or the MAP Test (ramp to failure; FTP is estimated as 75 % of your MAP). Your result appears on screen as soon as the test interval ends — no need to finish the cooldown. (Until you've tested, 200 W is a reasonable placeholder.)

Tip: Every test writes your new FTP (and LTHR, if you wear a heart rate strap) straight into your profile, so all future workout targets and difficulty adjustments scale correctly without any manual update.

📡 Connecting Your Devices

Maximum Trainer communicates with cycling hardware over Bluetooth Low Energy (BLE). Before connecting, make sure your devices are awake and within range (typically 10 m).

Waking up your devices

DeviceHow to wake it
Smart trainerStart pedalling for a few seconds
Power meterStart pedalling
Heart rate strapMoisten the electrode contacts and put it on
Speed / cadence sensorSpin the crank or wheel
Moxy muscle-oxygen sensorPress the activation button or begin exercise

Pairing sensors in the app

Sensors are paired on the Devices tab in the left sidebar of the main window. It has one slot per sensor role — Trainer, Power, Cadence / Speed, Heart Rate, and Muscle Oxygen — and you assign one device to each role.

Devices tab — saved sensors per role, plus trainer ERG, dropout, and battery settings
The Devices tab — pair a device per role with Scan…, toggle ERG control, and set sensor-dropout and battery options
  1. Wake the sensor you want to pair (see the table above).
  2. On the Devices tab, click Scan… next to that role. A scanner lists the nearby Bluetooth LE devices.
  3. Pick your device — it's assigned to that slot right away. To swap or remove it later, click Clear.
  4. For a smart trainer, tick Control trainer resistance (ERG / FTMS) in the Smart Trainer section to enable automatic ERG resistance.

Saved sensors connect automatically when you start a workout — a green indicator confirms each one is active — so you don't need to re-pair them each session.

The app matches each role to the right Bluetooth LE service automatically:

Sensor role BLE service Data provided ERG control
Trainer (FTMS) 0x1826 Speed · Cadence · Power ✅ Yes — automatic resistance
Cycling Power 0x1818 Power (W) · L/R Balance ❌ No
Heart Rate Monitor 0x180D Heart rate (bpm) ❌ No
Cycling Speed & Cadence 0x1816 Speed (km/h) · Cadence (rpm) ❌ No
Moxy Muscle Oxygen 0xAAB0 SmO₂ (%) · tHb (g/dL) ❌ No
Important: For automatic ERG resistance, pair your smart trainer in the Trainer slot (it uses FTMS) and tick Control trainer resistance (ERG / FTMS). A trainer paired only as a plain Power sensor sends data but won't accept resistance commands.
Studio mode: in Studio Mode each rider has their own sensor slots, paired the same way from that rider's card.

🎮 Simulation Mode

If you have no Bluetooth hardware available — or simply want to preview a new workout — choose Simulation in the connection dialog. The built-in simulator generates realistic, gently drifting sensor values and responds to ERG load commands, giving you a full end-to-end test of the training logic without any physical devices.

  1. When the connection method dialog appears, select Simulation instead of BTLE Device.
  2. Choose a workout and press Start.
  3. The simulator immediately begins emitting data — no hardware required.
ChannelBase valueRange
Heart rate140 bpm125–165 bpm
Cadence90 rpm80–100 rpm
Speed28 km/h23–33 km/h
Power200 W170–260 W
Good to know: The simulator responds to ERG load commands. When an interval target changes, the simulated power output adjusts accordingly — letting you verify the full workout flow before your first real ride.

🚣 Rowing (Beta)

Maximum Trainer can drive workouts from an FTMS-compatible rowing machine. Enable Rowing mode (Beta) in MaximumTrainer → Preferences → General:

  • The Devices tab shows a Rower slot in place of the Trainer slot. The two pairings are saved separately, so switching between cycling and rowing never re-pairs your devices.
  • The workout dashboard adapts: the cadence box shows Stroke Rate (spm) and the speed box shows Pace per 500 m (e.g. 2:05).
  • Workout power targets and ERG control work as for cycling — rowing ergometer watts are real watts.
  • Completed activities are saved (and uploaded) as rowing, so Strava and Intervals.icu classify them correctly.
Beta: tested against the FTMS Rower Data profile (and the built-in simulator). Concept2 PM5 support (drag factor, splits, Logbook sync) is planned — see issue #122. Feedback welcome.

🔍 Finding Workouts

Main window — workout list with structured interval plans
Main window — workout library with the Intervals.icu calendar sync in the sidebar

Option A — Intervals.icu calendar sync

Maximum Trainer integrates directly with Intervals.icu — the popular free training platform — to pull your scheduled workouts into the app.

  1. Connect your account: sign in with Intervals.icu on the login screen, or open Preferences → Intervals.icu, paste your API Key and Athlete ID (from intervals.icu → Settings → Developer), and click Test Connection.
  2. Click the Intervals.icu tab in the left sidebar of the main window.
  3. Use Refresh (or Sync All This Week) to load your planned workouts for the current week.
  4. Select a workout and click Load Selected Workout to download it to your local library.
  5. The workout appears in your library list immediately, ready to start.
Auto-upload: Enable Auto-upload completed activities to Intervals.icu in Preferences → Intervals.icu to have them posted automatically when you save a workout. An internet connection is required for sync and upload. The WASM (browser) version operates in offline mode only and does not support Intervals.icu sync.

Option B — Browse existing library

Previously downloaded workouts are listed in the Workouts tab of the main window. Use the search/filter bar at the top to quickly find a specific session by name, duration, or workout type.

Option C — Included training plans

Maximum Trainer ships with several ready-made training plans. Type a plan name into the Plan filter at the top of the workout list to see its sessions in order (workouts are named week-ride, e.g. "Kickstart 2-1").

PlanLengthWhat it is
Base Camp4 weeks, 3 rides/weekGentle aerobic base for beginners or riders returning from a break - zone 2, cadence drills and a first taste of tempo, ending ready for the FTP Test.
FTP Kickstart3 weeks, 3 rides/weekSweet spot, tempo and over-unders building up to the built-in FTP Test - a fast way to raise (and measure) your FTP.
Polarized 3xWeekly trio, repeat 3-4 weeksClassic 80/20 polarized week: a long Zone 2 ride, over-unders, and 30/30 VO2max intervals. By Robin Ingelbrecht.
VO2 Shock Block2 weeks, 3 rides/weekShort high-intensity block - 30/30s, 40/20s and classic 4x4s with easy spins in between - to spike your top-end fitness.
Lunch Crunch3 weeks, 3 rides/weekTime-crunched training: every ride fits in 30-45 minutes - compact sweet spot, micro-intervals and tempo for busy weeks.
Heart Rate Base3 weeks, 3 rides/weekAerobic base guided by heart rate instead of power (targets as % of LTHR, no ERG) - ideal when your FTP is unknown or you prefer training by feel. Requires a heart rate sensor.

New to structured training? Ride them in this order: Base Camp → FTP Kickstart → VO2 Shock Block, with Polarized 3x as a repeatable maintenance week and Lunch Crunch for weeks when time is short.

📂 Importing Workouts

If you already have workout files from another application (TrainerRoad, Zwift Companion, Intervals.icu, etc.), you can import them directly into Maximum Trainer.

Supported import formats

FormatExtensionSource applications
CyclingPeaks / TrainerRoad ERG.ergTrainerRoad, custom scripts
CyclingPeaks MRC.mrcTrainerRoad, PerfPro, various

Importing a single workout file

  1. Go to Workout → Import → Single Workout in the menu bar.
  2. Navigate to your .erg or .mrc file and click Open.
  3. Maximum Trainer converts the file to its native XML format and adds it to your library.

Importing multiple workout files

  1. Go to Workout → Import → Multiple Workouts.
  2. Select one or more .erg / .mrc files.
  3. All selected files are converted and batch-imported at once.

✏️ Creating Custom Workouts

The built-in Workout Creator lets you design your own structured interval sessions — specify target power (as absolute watts or % FTP), cadence, or heart rate for every segment, add repeats, and save for immediate use.

Workout editor — build custom interval sessions
Workout Creator — designing a custom interval session with the graphical editor
  1. Open the Editor tab at the top of the main window (next to List).
  2. Fill in the Name, Type, and optional Plan, Creator, and Description.
  3. Build the session in the interval table:
    • Add — appends an interval; set its Duration, Target — Power (W or % FTP), Cadence, Heart Rate, and an optional Display Message.
    • Repeat — repeats a block of intervals (set the # Repeat count, plus an optional Repeat Change to step the target on each pass).
    • Copy / Delete — duplicate or remove the selected interval.
  4. The graph preview at the bottom updates live as you edit.
  5. Click Save. The workout is added to your library immediately.
Tip: Set power targets as % FTP rather than absolute watts — the workout then scales automatically whenever your FTP changes.

⚙️ ERG vs Slope Mode

Maximum Trainer supports two resistance modes when connected to a smart trainer. Understanding the difference is key to getting the most out of your sessions.

Mode How it works Best for
ERG The app continuously adjusts trainer resistance so your actual power output matches the interval target. You only need to control cadence. Structured interval workouts with power targets
Slope / Manual The app sends a constant simulated incline (grade %) to the trainer. Resistance increases naturally with speed, just like riding a hill outdoors. Free-riding and outdoor-style efforts
Note: The workout player switches to Slope mode automatically for free rides, test intervals (FTP / MAP tests), and any interval without a power target (e.g. the Heart Rate Base plan). The + / − Difficulty buttons never change the mode — in ERG they raise or lower every interval target by 1 % per press, and in Slope mode with Virtual shifting enabled the same controls change the virtual gear instead.

Virtual shifting (Zwift Cog / single-gear setups)

If your trainer uses a single cog (e.g. a Zwift Cog) instead of a normal cassette, free rides and FTP tests would otherwise leave you with no usable resistance. Enable Virtual shifting (Zwift Cog / single-gear setups) in the Smart Trainer section of the Devices tab (it is off by default, so normal-cassette setups are unaffected) and the app gives you on-screen gears.

  • A gear indicator (▼ N / 30 ▲) appears on the workout top bar.
  • Shift with the Up / Down arrow keys or by clicking the on-screen ▲ / ▼ arrows — a harder gear instantly raises resistance, like a real drivetrain.
  • During an ERG power interval the indicator is hidden (the target power is in control); it reappears on free rides and test intervals, where the gears drive the resistance.

Zwift Click v2 controller (beta)

You can shift and control the workout with a Zwift Click v2 controller. It connects over its own Bluetooth link (separate from the trainer), so ERG/FTMS is unaffected. Enable Use Zwift Click v2 controller (right side only) - Beta in the Smart Trainer section of the Devices tab (off by default).

  • Wake both controllers before the workout - press a button on each. The left (-) controller only needs to be connected to keep the pair's link stable; you control everything from the right.
  • Only the right (+) controller is mapped: Y = gear up, B = gear down, A / Z = next / previous radio station, + paddle = start / pause the workout.
  • The left (-) controller is not supported yet - it currently has a connection-drop issue that will be investigated in a later release. For now it serves only to anchor the link so the right side stays solid.

ERG tips

  • Maintain a smooth, consistent cadence (85–95 rpm is typical). Abrupt cadence changes cause the trainer to momentarily over- or under-correct resistance.
  • When a new interval starts, give the trainer 5–10 seconds to settle at the new target.
  • If a target feels too hard or too easy, use Adjust Difficulty to scale the entire session without stopping — ±1 % FTP per press on the on-screen + / − buttons, or ±5 % with the + / - keys.

▶️ The Workout Player

Active ERG workout — live power graph and real-time sensor metrics
Workout Player — real-time power graph and live sensor metrics during an active ERG session

The workout player is the central screen during a training session. It combines a real-time power graph, live sensor metrics, interval information, and playback controls all in one view.

Display elements

ElementDescription
Interval graphColoured target-power band with your live wattage overlaid as a line. Each zone has a distinct colour matching standard training zones.
Interval countdownTime remaining in the current interval, displayed prominently at the top.
Workout timeTotal elapsed time and total remaining time for the full session.
PowerLive power output in watts from your trainer or power meter.
Heart rateLive beats per minute from your HR strap. Metric boxes colour against the interval target: on target, too low, or too high.
CadenceLive pedalling cadence in rpm.
SpeedLive speed in km/h.
L/R BalanceLeft/right power split (%) — only shown when a dual-sided power meter is connected.
SmO₂ / tHbMuscle oxygen saturation and total haemoglobin — only shown when a Moxy sensor is connected.
CaloriesEstimated kilojoules / kcal burned, calculated from power data.

🎛️ During a Workout

Starting a workout

  1. Select a workout in the main window and click Start Workout (or double-click it).
  2. Choose your connection method: BTLE Device (real hardware) or Simulation.
  3. The workout player opens and waits at the start line.
  4. It begins according to your start trigger (below) — by default, as soon as you start pedalling. You can also press Start (or Space / Enter) at any time.

How the workout starts

Choose the trigger in the workout's Settings (the gear icon) under Start workout when:

TriggerStarts the workout when…
Cadence (default)your cadence rises above a set value (default 40 rpm)
Poweryour power rises above a set wattage
Speedyour speed rises above a set km/h (or mph)
Button pressonly when you press Start (or Space / Enter) — no auto-start

Playback controls

ControlAction
Pause / ResumeTemporarily pauses the workout timer and data recording. Press again to resume.
Skip / jump intervalPress to skip to the next interval — or click any block in the interval graph to jump straight to it (the intervals in between are skipped). Not available during tests.
+ DifficultyRaises every interval's power (and HR) target by 1 % of FTP per press (stacks). The + key steps 5 % at a time.
− DifficultyLowers every interval's power (and HR) target by 1 % of FTP per press (stacks). The - key steps 5 % at a time.
IntervalMarks a manual lap / interval boundary in the recorded data. Only shown during a Free Ride — structured workouts advance intervals automatically.
ExitLeaves the session — see Saving Your Activity for what happens on a normal finish vs. an early exit.

Settings during a workout

Press the Settings gear in the workout player to adjust options without interrupting the session: which metric widgets are shown and their style (Detailed / Graph / Graph & Detailed), which timer elements appear, the start trigger, the Multimedia panel, and your Radios.

The media panel

The large panel beside the power graph can show one of three things. Choose which in the workout's Settings (the gear icon) → Multimedia:

TypeWhat it shows
StandardA built-in video player (QtMultimedia) for local video files — training footage or virtual rides. Right-click the video area to open a file and adjust volume. (Desktop only.)
Web BrowserAn embedded browser (QtWebEngine) opened to the Home Page URL you set below the dropdown — handy for YouTube, a live event, or your own dashboard. (Desktop only.)
Game (Retro Race · beta)A pseudo-3D ghost race: your live power drives your rider down a retro course against an opponent — race your previous effort on this workout, or a pacer that follows the target watts. Single-player desktop feature; not available in Studio mode or the browser (WASM) build.
Retro Race — pseudo-3D ghost race driven by your live power
Retro Race — race your previous effort or a pacer; your live power drives your rider down the course

Radio Player

Internet radio is separate from the panel above and plays on any mode. Its controls sit at the top-right of the workout player; add your own stations in the workout's Settings → Radios (they're saved for next time). You can also play, pause, or skip with the radio shortcuts.

Reconnection: If your BLE device drops mid-workout (e.g. low battery), Maximum Trainer pauses the session and tries to reconnect automatically, so you're not penalised while it re-establishes the link.

In the browser (WASM) version, if it can't reconnect on its own a Reconnect overlay appears — click it to trigger a new Web Bluetooth scan and re-pair your trainer.

💾 Saving Your Activity

How the session ends — and whether it's saved — depends on whether you finish the workout or leave early.

Finishing the workout normally

When the workout reaches its end, a Workout Complete! panel appears over the player with your summary and an Upload Activity section (see Uploading). The activity is written as a .fit file to your history folder.

Leaving before the end

If you Exit before the workout finishes, Maximum Trainer asks "Workout is not completed — Save your progress?" with three choices:

  • Yes — saves the ride so far as a .fit file and closes.
  • No — discards the ride; nothing is written. This cannot be undone.
  • Cancel — returns to the workout.
Where are my files? Activity files are saved to your system's Documents folder under MaximumTrainer / History.

☁️ Uploading to Strava & More

Maximum Trainer can upload completed activities directly to third-party platforms from the post-workout screen — no need to open a web browser or manually transfer files.

Supported platforms

🟠

Strava

Authenticate once via your system browser (OAuth). Completed rides upload to your Strava feed — automatically if you enable auto-upload.

📅

Intervals.icu

Sync your planned workouts and optionally auto-upload completed activities once you've signed in with Intervals.icu.

Linking a platform (one-time setup)

  1. Open Preferences.
  2. Select the Strava category.
  3. Click Connect to Strava.
  4. Your system browser opens for you to authorise Maximum Trainer. Log in, click Authorise, then return to the app.
  5. Maximum Trainer now shows Strava as linked with a green tick.

Uploading after a workout

On a normal finish, the Workout Complete! panel handles uploads:

  • Auto-upload on — the activity uploads on its own and the panel shows the status; nothing to click.
  • Auto-upload off — the panel shows an Upload to Strava / Upload to Intervals.icu button; click it to upload the .fit file.

Toggle auto-upload per platform in Preferences → Strava and Preferences → Intervals.icu.

⚙️ Settings

Maximum Trainer has two settings dialogs. Preferences (MaximumTrainer → Preferences, or Ctrl+,) holds your account-wide options, organised into the categories below. Display options that apply only while you ride live in a separate dialog — see Workout settings further down.

Preferences dialog — General, Profile and Logging app settings, with Strava and Intervals.icu integrations grouped below
Preferences — app settings (General, Profile, Logging) above the divider; the Strava and Intervals.icu integrations below it
CategoryWhat you can configure
General Distance unit (km / miles), app theme (System / Light / Dark), "force the workout window to stay on top", and Rowing mode (Beta)
Profile Your FTP (W), LTHR (bpm), and weight (kg) — used for training zones, W/kg, and ERG targets
Logging Set the minimum log level, enable or disable writing to a log file, choose the log file path, and open the current log file. See Log Files & Troubleshooting for default paths.
Strava (integration) Link / unlink your Strava account and toggle auto-upload of completed activities
Intervals.icu (integration) Your Intervals.icu API key and Athlete ID, a Test Connection button, and auto-upload of completed activities

Workout settings (in the player)

Options that apply only while you ride live in their own dialog — open it with the Settings gear in the workout player. There you choose which metric widgets are shown (power, HR, cadence, speed, balance, SmO₂), the timer style, the Multimedia panel type (video / web / game), and your Radios.

🏟️ Studio Mode

Studio Mode allows multiple riders to train simultaneously on a single installation — perfect for spinning studios and group training sessions. Each rider has their own BLE device slot and individual metrics display.

Studio mode — per-rider configuration
Studio Mode — per-rider configuration: each rider gets their own name, FTP/LTHR, sensors, and ERG control

Enabling Studio Mode

  1. Click the Studio tab in the left sidebar of the main window.
  2. Toggle Studio Mode on.
  3. Set the number of riders — up to 8, limited by simultaneous BLE connections.
  4. For each rider, set their name, FTP, and LTHR, scan and assign their sensors, and choose whether ERG/FTMS control is enabled.
  5. Start a workout — each rider trains with their own sensors and gets their own live metrics panel. You can also Import / Export the whole studio configuration as JSON.
Note: In Studio Mode, each rider's ride is recorded to their own .fit file. Workout targets are scaled per-rider based on individual FTP values.

🗒️ Log Files & Troubleshooting

Maximum Trainer writes diagnostic messages to a log file whenever file logging is enabled in Preferences → Logging. The log captures all network request errors, BLE connection events, and OAuth login steps, making it the first place to look when something goes wrong.

Enabling the log file

  1. Open Preferences.
  2. Select the Logging category.
  3. Tick Write log to file.
  4. Optionally change the log file path with the Browse… button.
  5. Click OK — logging starts immediately.

Use the Open log file button to open the current log in your default text editor at any time.

Default log file locations

Platform Default log file path
Windows %APPDATA%\MaximumTrainer\MaximumTrainer_Redux\MaximumTrainer.log
e.g. C:\Users\YourName\AppData\Roaming\MaximumTrainer\MaximumTrainer_Redux\MaximumTrainer.log
macOS ~/Library/Application Support/MaximumTrainer/MaximumTrainer_Redux/MaximumTrainer.log
Hold ⌥ Option and click Go in Finder to reveal the hidden Library folder.
Linux ~/.local/share/MaximumTrainer/MaximumTrainer_Redux/MaximumTrainer.log
Follows the XDG Base Directory specification. Override with the $XDG_DATA_HOME environment variable.
Tip: Set the log level to Debug or Verbose before reproducing an issue, then send the log file when reporting a bug. Reset the level back to Info afterwards to keep the file small.

💡 Tips & Shortcuts

Keyboard shortcuts

Press ? at any time during a workout to view the in-app keyboard shortcuts dialog.

Workout Player

KeyAction
Space / EnterStart / Pause workout
Skip to next interval
/ Virtual gear up / down when Virtual shifting is driving the resistance (free / test intervals); otherwise nudges difficulty ±1 %
+ / =Increase difficulty +5 %
-Decrease difficulty −5 %
L / BackspaceMark interval (lap)
F6 / F7 / F8Radio: previous / play-pause / next track
F11Toggle fullscreen
? / F1Show keyboard shortcuts
EscapeExit workout (with confirmation)

Main Window

KeyAction
Ctrl+,Open Preferences
Ctrl+NCreate new workout
Ctrl+QQuit application
F1Show keyboard shortcuts

Zwift Click (right controller) - when paired (Bluetooth settings).

ButtonAction
YGear up (or difficulty in ERG)
BGear down (or difficulty in ERG)
ARadio: next station
ZRadio: previous station
Right paddle (+)Start / Pause workout

General tips

  • Warm up your trainer before a serious workout. Most direct-drive trainers need 10–15 minutes of easy riding at 100–150 W to reach operating temperature and produce accurate power readings.
  • Use simulation mode to preview new workouts and verify that the interval structure is what you expect before committing to the real effort.
  • Adjust difficulty on the fly — if a workout is designed at 100 % FTP and you're having a bad day, knock it down by 1–2 presses (−5–10 %) rather than stopping. You'll still get a training benefit and keep the streak alive.
  • Set accurate FTP and weight. Incorrect values shift all zone boundaries and make ERG targets too easy or too hard. Run the built-in FTP test when your fitness changes — it updates your profile for you.
  • Keep the app up to date. It checks for a newer release automatically at startup and offers the update when one is available. New trainer profiles and BLE improvements are shipped frequently.

Troubleshooting

ProblemSolution
Sensor not appearing in BLE scanner Wake the device (pedal / moisten HR strap), bring it closer, and click Rescan.
ERG resistance not changing Ensure the trainer is connected with the FTMS (0x1826) profile, not a plain Power profile. A plain Power profile provides data but does not accept load commands.
ERG not working in browser (WASM) version The browser version sends an FTMS Request Control handshake automatically after connection. If ERG commands are still ignored, disconnect and reconnect your trainer — some trainers require a fresh GATT connection to accept the control handshake.
Power readings seem inaccurate Spin-down / calibrate the trainer from its own app, then reconnect in Maximum Trainer.
App won't connect after a BLE disconnect Maximum Trainer pauses and retries automatically. If it can't reconnect, toggle Bluetooth off/on in your OS and use the Reconnect option.
Upload to Strava fails Re-link your Strava account in Preferences → Strava. OAuth tokens expire; re-linking refreshes them.
No sound / internet radio silent on a fresh Windows install Windows N editions ship without Media Foundation, which audio and video playback require. Install the free Media Feature Pack (Settings → Apps → Optional features) and restart the app.
Need more help? Visit the Community Discussions on GitHub, or open an issue if you believe you've found a bug.

🖥️ Platform Requirements

Maximum Trainer is supported on Windows, macOS, and Linux. The BLE requirements differ slightly per operating system.

Platform Minimum OS Notes
Windows Windows 10 version 1703 (Creators Update) or later Requires a Bluetooth 4.0+ adapter with a WDM-compatible driver. Windows 7, 8, and 8.1 are not supported (missing WinRT BLE APIs). No special permissions or manifest entries are needed.
Linux Ubuntu 22.04+ / kernel 5.x+ Needs a Bluetooth 4.0+ adapter. Works out of the box on a modern desktop (recent Ubuntu, Fedora) — no special setup required.
macOS macOS 13 (Ventura) or later On first connection, macOS will prompt for Bluetooth permission (NSBluetoothAlwaysUsageDescription). Click Allow to grant access. This permission can be reviewed in System Settings → Privacy & Security → Bluetooth. Requires a Mac with built-in Bluetooth or a BT 4.0+ adapter.
Browser (WASM) Chrome 85+ or Edge 85+ Requires the Web Bluetooth API — available in Chrome and Edge (not Firefox or Safari). The page must be served over HTTPS. BLE pairing must be triggered by a user gesture (clicking Start Workout). No local file access; activities cannot be exported to a local .fit file in the browser version.