Zwolle: just ride today's Intervals.icu workout. No virtual world, no video, free (Windows now, Android testers wanted)

Hi Everyone:

Zwolle is a free indoor cycling app with one job: riding the structured workouts on your Intervals.icu calendar, on any trainer, smart or not so smart.

Open it and today’s planned workouts from Intervals.icu are on the home screen. Pick one, check that your trainer and sensors are connected, press Start and ride it block by block. When you’re done, upload the ride to Intervals.icu and Strava, one click each.

That’s all it does. No virtual world, no avatar, no animations, no in-app video, nothing to race or unlock. Zwolle shows you the workout, your numbers and the time to the next block, and stays out of the way. If you like something to watch while you ride, put it next to Zwolle: shrink the window and the ride screen turns into a compact view.

Here it is in 34 seconds:

Your workouts

  • From your Intervals.icu calendar. Connect Intervals.icu once in Settings, and the home screen lists today’s planned rides with their names and durations. Added one a minute ago? Hit refresh.
  • From .ZWO files. Open any .ZWO file, your own or from anywhere else. For a workout on another day, download it from Intervals.icu as .zwo and open that. A few example workouts are built in.
  • At your FTP. Zwolle can keep its FTP in step with the one in your Intervals.icu settings (or Strava), so the watts match what Intervals.icu planned. Or type your FTP in yourself.

Before you start, the setup page shows the whole workout as a chart, and a live reading from each connected device, so you know everything works before you clip in.

Riding

  • The whole workout runs along the bottom as a chart in Intervals.icu’s zone colours, with your power drawn over it as you go.
  • Big numbers in the middle: the target power (and cadence, when the workout has one), with your power, heart rate and cadence right below. More than 10% off and it turns red, with MORE POWER or LESS POWER (SPEED UP or SLOW DOWN for cadence).
  • Timers: elapsed, remaining, this block’s countdown, what’s next, and your Load so far.
  • A countdown beeps you into each new block: five short beeps, then a high one as the block starts.
  • Target ranges, like “88-94%”: five buttons appear on the right, each labelled with its wattage. Click one to choose where in the range you ride; in ERG mode, that’s what the trainer holds.
  • Messages in the workout file show up large in the middle of the screen.
  • The ride starts when you start pedalling. Optional auto-pause stops the clock when you stop pedalling (but not in a rest block with a zero target), and pedalling resumes it.
  • Devices you’ve used before reconnect by themselves when Zwolle starts, and again if one drops out mid-ride.
  • The window scales: make it bigger and everything grows with it; make it small and you get the compact view, with just the essentials and Stop and Pause buttons.

Your trainer: smart or not so smart

  • Smart trainer. Turn on ERG mode and Zwolle sets the resistance for each block. Each new target goes to the trainer a couple of seconds early, so your power changes on the block boundary instead of a few seconds after it. You can turn ERG off and on mid-ride and ride the targets on your gears.
  • Which smart trainers: any Bluetooth FTMS trainer (Wahoo KICKR, Elite Suito and Direto, Saris H3, Tacx NEO 2T and NEO 3M, and so on), plus older Tacx trainers (NEO, NEO 2, Flux) through Tacx’s own Bluetooth protocol.
  • Not so smart trainer. Any trainer or rollers with a Bluetooth power meter on the bike. Zwolle shows the targets, and you ride to them on your gears.
  • A heart rate strap and a cadence sensor are optional.
  • It’s all Bluetooth Low Energy: your PC needs Bluetooth 4.0 or newer, built in or a USB dongle.

After the ride

  • Your ride is saved the moment you finish. If Zwolle closes unexpectedly mid-ride, it recovers the ride the next time you open it.
  • The summary shows duration, average power and NP, Load and intensity, cadence, heart rate and how much of the workout you completed, over a chart of your power against the targets.
  • Upload to Intervals.icu and Strava, one click each. The FIT file carries the workout’s steps and their targets, so Intervals.icu can chart your power against them. On Strava the ride gets a short description: how much of the workout you completed, its Load and intensity.
  • Pauses are recorded the way a Garmin or Wahoo head unit records them, so elapsed and moving time both come out right.
  • Or export the FIT file and take it anywhere else.
  • Every ride stays in Zwolle’s history, with its summary and chart.

Free, no account

Zwolle is free: no subscription, no ads, no account of its own and no tracking. Your rides stay on your PC unless you send them to Intervals.icu or Strava.

Get it (Windows)

It’s on the Microsoft Store: Zwolle Live Leg Experience - Free download and install on Windows | Microsoft Store

  1. Install it and open Settings (the gear icon).
  2. Connect Intervals.icu, and Strava if you use it. When Zwolle asks, let it take your FTP from Intervals.icu.
  3. Pick today’s workout, connect your trainer and sensors, and press Start.

Android testers wanted

The Android version works and is in closed testing on Google Play. Google only lets a new app out to everyone once at least 12 testers have kept it installed for 14 days, so I need your help.

What I’d ask of you: install it on your Android phone or tablet, keep it for 14 days, ride with it a few times, and tell me what doesn’t work or doesn’t make sense. You get Zwolle before everyone else, and a say in where it goes. On Android it also has picture-in-picture, so the ride carries on in a small floating window while you use another app, and a compact view for split screen.

To join, send me a private message here, or an email to [email protected], with the email address of the Google account on your device. I’ll add you and send you the link to opt in. Please don’t post your email address in this thread.

What’s next

  • Android, once the testing is done.
  • iOS after that.
  • The next update learns how quickly your trainer responds and times each target to that, instead of a fixed 2 seconds. It also takes power, cadence and heart rate only from the device you picked for each, so a power meter and a smart trainer’s own reading no longer get mixed in the recording.

Questions, bugs, a trainer that won’t behave, something you’re missing: reply here or email [email protected].

And thanks to David for Intervals.icu and its API, which made this possible.

1 Like

Update: Zwolle for iPhone, iPad and Mac is in beta, and anyone can join

Zwolle now runs on iPhone, iPad and Macs with Apple silicon, through Apple’s TestFlight. This time you don’t need to send me anything: open this link on your iPhone, iPad or Mac and follow the steps.

If you don’t have Apple’s free TestFlight app yet, the page sends you to the App Store for it. TestFlight then installs Zwolle and keeps it up to date.

It’s the same Zwolle as on Windows: today’s Intervals.icu workouts on the home screen, built-in workouts and .ZWO files, ERG mode or riding the targets on your gears, and uploads to Intervals.icu and Strava. No account, no ads, no tracking.

I’d especially like to hear:

  • Does Zwolle find your trainer and sensors, and reconnect when one drops out?
  • In ERG mode, does your trainer hold the targets?
  • Lock your phone or switch to another app mid-ride: does the ride carry on, countdown beeps included?
  • Got an older Wahoo KICKR (v1 to v4) or an Elite trainer from before FTMS? Zwolle now speaks their own protocols, but I haven’t been able to try one yet.
  • Anything that doesn’t work or doesn’t make sense.

To send feedback, take a screenshot in Zwolle and tap Share Beta Feedback, reply here, or email [email protected]. Please say which device and trainer you rode with.

Since my first post

On every platform:

  • Eight core workouts are built in, from Recovery 30 to Sprints 8x10s, covering aerobic base, threshold, VO2max, anaerobic capacity and sprint power. Every work interval in them is a range you can ride easier or harder.
  • As promised, Zwolle now learns how quickly your trainer follows a new ERG target and sends each target that much early, instead of a fixed 2 seconds. The update rolling out now adds a switch for it in Settings, Early ERG changes: turn it off and the resistance changes as the countdown reaches zero.
  • Power, cadence and heart rate each come only from the device you picked for them, so a power meter and a smart trainer’s own power no longer get mixed.
  • Rides go to Intervals.icu and Strava by themselves when they end, if you’ve connected them. You can turn that off in Settings.
  • The first time you open Zwolle, a welcome page says what you need and ticks each thing off as you set it up.

Android

Still in closed testing on Google Play, and more testers are welcome. Send me a private message here, or an email to [email protected], with the email address of the Google account on your Android device. Please don’t post your email address in this thread.

At first sight, this would tick all the boxes for what I have always (unsuccessfully) looked for …

  • No account needed
  • 100% offline functionality
  • No distraction like gaming stuff and all kinds of unneeded ‘animation’. Just simply a lightweight, no fuss, workout player doing its job.
  • Beeps to announce step change and display of step messages.

I absolutely love what you have implemented for ‘ranges’. This is something I haven’t seen anywhere else and it is a very clever option. Nice to see that it also checks response time and adapts to change target a bit up front.

Haven’t tested in real yet, but it is very appealing. Indoor season starts very soon now over here.
Question remaining: is there a way to prematurely end a step, skip a step? Maybe also repeat a step (less important)?
Example: if you progress duration on an endurance session, the option of ending a step prematurely, allows to create just one workout with max duration and handle the ones before max duration with one button push or click. In my case, I’m dual recording on my head unit and end a workout when the total amount of work has reached the progressive target.