Skip to content

Release history

Changelog

Rider-facing changes, grouped by date and Android and iOS build number.

New ride metrics, more reliable ThirdEye connections and layout transfers, and updated tuning tools for experimental plugins.

Android · vc92

  • Add ride maximum speed, PWM, power and phase current, plus minimum battery voltage, to your dashboard. They survive reconnection into the same ride and reset when a new ride starts.

  • The dashboard supports landscape orientation with five tile columns and a compact top band. Your portrait layout is preserved, the phone’s rotation lock is respected, and leaving the camera restores the previous orientation.

  • Rolling digits no longer shift neighbouring characters and can finish their animation when readings update frequently.

  • Ride and dump playback now shows the recording’s actual time, including the date after midnight. The connection-loss panel no longer covers recorded ride playback.

  • Recordings upload to your cabinet automatically once wheel speed has exceeded 5 km/h and distance calculated from speed reaches 300 m. Short and stationary recordings remain on the phone and in archives and exports; rides with a frozen odometer are now assessed correctly.

  • Layout transfers preserve the second reading in a dual instrument and the battery tile of a disconnected ThirdEye.

  • The ride list no longer shifts when entering multiple selection. Long GPS tracks are processed faster.

  • A previously connected ThirdEye is searched for throughout the ride, including when switched on later or restarted. Connection retries no longer get stuck, and searching also works with the phone’s screen off.

  • Compatible external BLE displays can receive the phone’s estimated battery charge, remaining range, recent consumption and average consumption. Display firmware must support the new channel; tested with simulated BLE devices, without a physical display.

  • The PID editor for LeaperKim Lynx-S, Oryx and Sherman-P now includes independent drive and brake assist strength and limits, horizon drift compensation and separate Apply buttons. It shows example graphs, active and saved gains, and the write result. Additional settings require compatible experimental firmware; behaviour was bench-tested, not validated in real riding.

  • The updated PID plugin guards against picking up another plugin’s settings after reinstallation: it restores the saved profile or returns to stock. The fix was reproduced and verified on the Lynx-S bench.

  • Added experimental packages for Sherman-P 10.0.2: PID, parking alarm, motor temperatures, extended telemetry, charge line, auto-off timer and PWM beep threshold. Oryx 8.0.5 gains an adjustable PWM beep threshold of 81–99%. Compatible firmware is required; checks were performed on the bench, without wheel validation.

  • In the updated parking alarm, the power button no longer disarms the alarm during the siren. Disarm through the app or a previously configured PIN; without a PIN, a phone is required, and the siren stops by itself after 30 seconds.

  • The original Lynx tester firmware fixes siren dropouts and lingering sound after disarming, adds slow-tilt detection and holds the brake light for 0.8 seconds. PIN and PID saving after a ride and with a full wheel journal are also fixed. These are bench fixes without hardware confirmation; the expanded PID range has not yet passed the 100 km/h check.

  • The widget alarm button controls the same parking alarm as the dashboard and appears only when available. Resizing the widget no longer lets buttons squeeze out the bottom row.

iOS · build 90

  • Add ride maximum speed, PWM, power and phase current, plus minimum battery voltage, to your dashboard. They survive reconnection into the same ride and reset when a new ride starts.

  • Ride and dump playback now shows the recording’s actual time, including the date after midnight. The connection-loss panel no longer covers recorded ride playback.

  • Recordings upload to your cabinet automatically once wheel speed has exceeded 5 km/h and distance calculated from speed reaches 300 m. Short and stationary recordings remain on the phone and in archives and exports; rides with a frozen odometer are now assessed correctly.

  • Layout transfers preserve the second reading in a dual instrument and the battery tile of a disconnected ThirdEye.

  • The ride list no longer shifts when entering multiple selection. Long GPS tracks are processed faster.

  • A previously connected ThirdEye is searched for throughout the ride, including when switched on later or restarted. Connection retries no longer get stuck; a known mirror uses direct reconnection suitable for iOS background operation.

  • Compatible external BLE displays can receive the phone’s estimated battery charge, remaining range, recent consumption and average consumption. Display firmware must support the new channel; tested with simulated BLE devices, without a physical display.

  • The PID editor for LeaperKim Lynx-S, Oryx and Sherman-P now includes independent drive and brake assist strength and limits, horizon drift compensation and separate Apply buttons. It shows example graphs, active and saved gains, and the write result. Additional settings require compatible experimental firmware; behaviour was bench-tested, not validated in real riding.

  • The updated PID plugin guards against picking up another plugin’s settings after reinstallation: it restores the saved profile or returns to stock. The fix was reproduced and verified on the Lynx-S bench.

  • Added experimental packages for Sherman-P 10.0.2: PID, parking alarm, motor temperatures, extended telemetry, charge line, auto-off timer and PWM beep threshold. Oryx 8.0.5 gains an adjustable PWM beep threshold of 81–99%. Compatible firmware is required; checks were performed on the bench, without wheel validation.

  • In the updated parking alarm, the power button no longer disarms the alarm during the siren. Disarm through the app or a previously configured PIN; without a PIN, a phone is required, and the siren stops by itself after 30 seconds.

  • The original Lynx tester firmware fixes siren dropouts and lingering sound after disarming, adds slow-tilt detection and holds the brake light for 0.8 seconds. PIN and PID saving after a ride and with a full wheel journal are also fixed. These are bench fixes without hardware confirmation; the expanded PID range has not yet passed the 100 km/h check.

  • Alert settings now accept thresholds above the scale’s initial range, such as a large total mileage value.

Fixed the alarm siren, the brake light and saving of the PIN and pedal response in the experimental custom firmware for the original Lynx.

Experimental original Lynx firmware (LX5013v3)

  • The alarm siren no longer goes silent after a minute of continuous disturbance while the headlight kept flashing. Pauses between pulses are now truly silent, and disarming stops the sound immediately instead of up to 45 seconds later.

  • The brake light stays on for 0.8 seconds after braking ends instead of showing a single short flash. Braking detection itself is unchanged from the factory firmware.

  • The PIN, the armed state and the pedal response are now saved when set in parking mode after a ride. Previously they were kept only until the wheel was switched off. As before, the firmware writes nothing while balancing: save settings in parking mode.

  • The expanded pedal-response range passed bench launch and braking runs but not the 100 km/h model check. The firmware has been tested on the bench only, not on a real wheel.

Added a map of your favourite routes, improved large-ride sync and made acceleration leaderboard decisions clearer.

Android · vc91

  • The heatmap combines ride GPS tracks: frequently ridden sections glow brighter, while missing sections appear as dashed lines. Filter by period and wheel. The map is built on your phone and is not uploaded.

  • With no wheel selected, the history summary now covers all displayed rides rather than just the latest month.

  • Improved large-ride sync. You can see the server queue, processing stage and records processed; after an interruption, retrying checks the ride already uploaded. Errors explain the cause and include a copyable support code.

  • Large rides open more reliably in the website account area, including when comparing two rides.

  • Downloading Exploration places now creates an account automatically while preserving local progress. The first accurate GPS fix immediately reveals its area, and importing past rides fits the map to all explored areas. Stale wheel readings no longer cover the map.

  • Acceleration results now clearly show the server decision and reason: general leaderboard acceptance, model-only acceptance, review or rejection. Decisions refresh after revalidation; recorded GPS is no longer labelled as verified.

  • New acceleration recordings save motor phase current and show its graph and peak separately from battery current. Website charts now include phase current and PWM on a shared time axis with start and acceleration markers.

  • Acceleration validation better accounts for small GPS fluctuations and brief accuracy drops while retaining checks for gaps, position jumps and finish speed.

  • The website leaderboard can show all accepted runs, including repeat measurements by the same rider, instead of only best results.

  • Playback controls can be hidden to give the dashboard more room. Playback shows the recorded wheel's model.

  • Added built-in alarm, PIN and pedal-response settings for recognised experimental custom firmware on the original Lynx. Plugin uploads are blocked on the original Lynx, NOSFET Apex and firmware without plugin support. The new controls were bench-tested, not tested on a real wheel; the expanded gain range has not yet passed qualification.

  • The official Lynx 005.0.13 LX5013v3 parking variant is now recognised when selecting a firmware file.

  • Added a Lynx-S ADC diagnostics screen with counters, timing, raw readings and report sharing. Diagnostic firmware is required; B59 slow-channel minimum and maximum readings remain unreliable.

  • Alert thresholds are easier to adjust: holding “+” or “−” repeats steps, and typing a value expands the scale to accommodate it.

  • Improved back navigation in settings, diagnostics and the ride-card screen; the system back gesture now works in the event log. The battery-model screen now scrolls.

  • Screenshots are now allowed on the account screen.

  • Watch telemetry reception now shows the connection stage, sender and handshake timeout more clearly.

  • Added English labels in diagnostics, the alert editor and widget units; battery-training dates follow the selected language. Updated the app icon.

iOS · build 88

  • The heatmap combines ride GPS tracks: frequently ridden sections glow brighter, while missing sections appear as dashed lines. Filter by period and wheel. The map is built on your phone and is not uploaded.

  • With no wheel selected, the history summary now covers all displayed rides rather than just the latest month.

  • Improved large-ride sync. You can see the server queue, processing stage and records processed; after an interruption, retrying checks the ride already uploaded. Queue and processing errors explain how to continue.

  • Large rides open more reliably in the website account area, including when comparing two rides.

  • Downloading Exploration places now creates an account automatically while preserving local progress. The first accurate GPS fix immediately reveals its area, and importing past rides fits the map to all explored areas. Stale wheel readings and an empty destination panel no longer cover the map.

  • Acceleration results now clearly show the server decision and reason: general leaderboard acceptance, model-only acceptance, review or rejection. Decisions refresh after revalidation; recorded GPS is no longer labelled as verified.

  • New acceleration recordings save motor phase current and show its graph and peak separately from battery current. Website charts now include phase current and PWM on a shared time axis with start and acceleration markers.

  • Acceleration validation better accounts for small GPS fluctuations and brief accuracy drops while retaining checks for gaps, position jumps and finish speed.

  • The website leaderboard can show all accepted runs, including repeat measurements by the same rider, instead of only best results.

  • Ride playback immediately shows the first saved readings, even when recording began after a delay. It shows the selected wheel model; controls can be hidden to give the dashboard more room.

  • Added built-in alarm, PIN and pedal-response settings for recognised experimental custom firmware on the original Lynx. Plugin uploads are blocked on the original Lynx, NOSFET Apex and firmware without plugin support. The new controls were bench-tested, not tested on a real wheel; the expanded gain range has not yet passed qualification.

  • The official Lynx 005.0.13 LX5013v3 parking variant is now recognised when selecting a firmware file.

  • Battery-model training now explains when you need to select a wheel first. Diagnostic error names and categories follow the selected language.

New ride destinations, a private cabinet with complete recordings, ride replay and acceleration rankings.

Android · vc90

  • New Explore section: nearby places with photos and ratings, a collection of visits and your personal exploration map. Include saved rides to reveal previously explored areas. Downloaded places work offline; visits and progress sync later. Visit photos remain private.

  • Explore can build cycling, driving or walking routes. Built-in routing currently covers the prepared Moscow map; Yandex Maps and Google Maps are available for other destinations. Saved route lines remain available offline.

  • Added optional synchronization of completed rides, full telemetry, GPS and portable settings across devices. Manual deletions sync, with restoration available in the cabinet for 10 days. Automatic phone cleanup keeps the cloud copy.

  • Account now offers email sign-in, email linking and merging guest progress into an existing account. Merging preserves local rides. Open the cabinet from the app without entering your password again.

  • The website's private cabinet now offers routes, charts and ride comparisons. Select a segment to inspect consumption, load and voltage sag. The map filters GPS jumps and shows recording gaps.

  • Full file backups preserve rides, acceleration runs, garage, battery models, settings, alerts, layouts and user plugins. Archives support moving between Android and iPhone. Review their contents before restoring and restore previous settings afterward if needed. Alert libraries can also be transferred separately.

  • Replay a saved ride on the dashboard with alerts, pause, seeking and playback speed controls. Going back returns to the same ride. Replay creates no new recording and sends no wheel commands.

  • Redesigned acceleration measurement: an explicit start button, a separate screen with large live readings and run details with 0–40, 0–60 and 0–100 km/h splits, charts, peak current, PWM and voltage sag.

  • Submit acceleration runs to public website rankings by model and speed split. Uploads are optional and stay queued while offline. Results undergo validation; absolute GPS coordinates are not published.

  • Battery training filters impossible voltage dropouts and estimates capacity more consistently. Conflicting data preserves the previous capacity estimate; the screen explains uncertainty or why training failed.

  • Reading screens now include explanations of what each value means, where it comes from and how it is calculated.

  • Added LeaperKim Sherman-P support: model recognition, a 42S battery, two BMS packs and estimated field weakening for firmware 010.0.02. Based on firmware research and software tests; a real BLE capture is still needed.

  • Updated the parking alarm for Lynx-S, Oryx and NOSFET Aeon: entering a new PIN no longer suspends protection, and rolling the wheel cannot bypass the balance-start lock. These fixes were bench-tested.

  • A new menu above the wheel list brings together language, account, backups, exploration and tools. Clearing discovered devices keeps saved wheels and rides.

  • Added Garmin configuration from the phone: field order and warnings per wheel, compatible alert import, and sending one wheel or the entire garage through Garmin Connect. Requires an updated LoEUC watch app; communication with physical watches still needs verification.

  • Added experimental BLE relay reception from Garmin: the watch connects to the wheel while the phone displays telemetry and records the ride without Garmin Connect. No wheel commands are forwarded. Physical delivery and operation with a locked phone still need verification.

  • Sync now shows separate upload, download and settings progress, explains errors and offers retries. Unchanged rides are not exported again; transfer failures and account merging are handled without losing local recordings or creating extra copies.

  • Fixed freezing when leaving ride history and a temporarily empty list during loading or sync. Failed connections no longer create empty rides. Chart legends keep their height while moving the cursor.

  • Voice warnings use a normal speaking pace regardless of the system speech-rate slider.

iOS · build 87

  • New Explore section: nearby places with photos and ratings, a collection of visits and your personal exploration map. Include saved rides to reveal previously explored areas. Downloaded places work offline; visits and progress sync later. Visit photos remain private.

  • Explore can build cycling, driving or walking routes. Built-in routing currently covers the prepared Moscow map; Yandex Maps and Google Maps are available for other destinations. Saved route lines remain available offline.

  • Added optional synchronization of completed rides, full telemetry, GPS and portable settings across devices. Manual deletions sync, with restoration available in the cabinet for 10 days. Automatic phone cleanup keeps the cloud copy.

  • Account now offers email sign-in, email linking and merging guest progress into an existing account. Merging preserves local rides. Open the cabinet from the app without entering your password again.

  • The website's private cabinet now offers routes, charts and ride comparisons. Select a segment to inspect consumption, load and voltage sag. The map filters GPS jumps and shows recording gaps.

  • Full file backups preserve rides, acceleration runs, garage, battery models, settings, alerts, layouts and user plugins. Archives support moving between Android and iPhone. Review their contents before restoring and restore previous settings afterward if needed. Alert libraries can also be transferred separately.

  • Replay a saved ride on the dashboard with alerts, pause, seeking and playback speed controls. Going back returns to the same ride. Replay creates no new recording and sends no wheel commands.

  • Redesigned acceleration measurement: an explicit start button, a separate screen with large live readings and run details with 0–40, 0–60 and 0–100 km/h splits, charts, peak current, PWM and voltage sag.

  • Submit acceleration runs to public website rankings by model and speed split. Uploads are optional and stay queued while offline. Results undergo validation; absolute GPS coordinates are not published.

  • Battery training filters impossible voltage dropouts and estimates capacity more consistently. Conflicting data preserves the previous capacity estimate; the screen explains uncertainty or why training failed.

  • Reading screens now include explanations of what each value means, where it comes from and how it is calculated.

  • Added LeaperKim Sherman-P support: model recognition, a 42S battery, two BMS packs and estimated field weakening for firmware 010.0.02. Based on firmware research and software tests; a real BLE capture is still needed.

  • Updated the parking alarm for Lynx-S, Oryx and NOSFET Aeon: entering a new PIN no longer suspends protection, and rolling the wheel cannot bypass the balance-start lock. These fixes were bench-tested.

Android and iPhone gain a launch timer with spoken results and run history, and ride totals now show the best 0–40, 0–60 and 0–100. The app recognizes more tyre-pressure sensors, iPhone gains a diagnostic log, and the headlight on old Lynx wheels goes out again.

Android · vc80

  • The dashboard menu has a new "Launch timer". Stop and hold still for a second — the screen and the voice say "Go". There is a short beep at 40 and 60 km/h and a double one at 100, and the time is spoken after the run. Runs are kept on the phone, listed per wheel with the best time on top; precision is a tenth of a second based on your speedometer-corrected speed, and each run shows whether GPS was there all the way. The best launch of a ride — 0–40, 0–60 and 0–100 — now also appears in the ride totals. The timer does not work in demo mode or on a recording.

  • The app recognizes more tyre-pressure sensors: TPMSII, Michelin, ITPMS K and FOBO transmit their readings differently from earlier sensors and used to go unnoticed. These formats were checked against the parser's published source — no live sensors of these types have been tested yet. New sensors are found with the screen off too, and the last reading no longer disappears from the tile when the sensor goes quiet: it stays until a new measurement arrives or you reset the sensor, while alerts still treat a stale reading as expired.

  • Tyre pressure and temperature from the sensor are now recorded into the ride — after the ride they appear in the charts and totals alongside the wheel's own metrics.

  • On old Lynx wheels (firmware 005.0.x) the headlight goes out again: it used to switch on with the button but could not be switched off by anything — neither the button nor auto light. Turning it off is now sent in both command spellings at once, so whichever one the wheel understands takes effect.

  • A voice alert without its own text now speaks the standard phrase ("Speed 60") instead of just the number. The spoken-alert editor gained a "Preview" button. Alert files are read more reliably: fields nested inside a rule can no longer overwrite the alert's own name and text.

  • For modified firmware the bundled plugin packages were updated: the parking alarm 1.2.0 and telemetry 0.5.0 load the wheel's controller noticeably less. The telemetry settings screen now picks up the current values from the live frame stream instead of showing factory defaults when the wheel already runs different ones.

  • If you never customized the dashboard layout, it now switches to the layout recommended for the connected wheel — the automatic switch never actually fired before.

iOS · build 86

  • A "Launch timer" is here: stop and hold still for a second — the screen and the voice say "Go". There is a short beep at 40 and 60 km/h and a double one at 100, and the time is spoken after the run. Runs are kept on the phone, listed per wheel with the best time on top, and each run shows whether GPS was there all the way. The best launch of a ride — 0–40, 0–60 and 0–100 — now also appears in the ride totals. Leaving the timer screen no longer turns GPS off when route recording is on — GPS speed on the dashboard keeps updating. The timer does not work in demo mode or on a recording.

  • Settings gained a "Diagnostics" section with a diagnostic log. Recording is off by default: turn it on before reproducing an issue, then share the log from the same screen. The log contains no raw wheel data, coordinates or passwords.

  • The app recognizes more tyre-pressure sensors: TPMSII, Michelin, ITPMS K and FOBO transmit their readings differently from earlier sensors and used to go unnoticed. These formats were checked against the parser's published source — no live sensors of these types have been tested yet. The last reading no longer disappears from the tile when the sensor goes quiet: it stays until a new measurement arrives or you reset the sensor, while alerts still treat a stale reading as expired.

  • On old Lynx wheels (firmware 005.0.x) the headlight goes out again: it used to switch on with the button but could not be switched off by anything — neither the button nor auto light. Turning it off is now sent in both command spellings at once, so whichever one the wheel understands takes effect.

  • A voice alert without its own text now speaks the standard phrase ("Speed 60") instead of just the number. Alert files are read more reliably: fields nested inside a rule can no longer overwrite the alert's own name and text. Alert sound previews no longer vanish while the audio engine is still starting up.

  • For modified firmware the bundled plugin packages were updated: the parking alarm 1.2.0 and telemetry 0.5.0 load the wheel's controller noticeably less. The telemetry settings screen now picks up the current values from the live frame stream instead of showing factory defaults when the wheel already runs different ones.

You can now reset the trip counter on LeaperKim and NOSFET wheels straight from LoEUC. The headlight on single-beam wheels turns on and off properly again. The KS-14D Pro shows its real charge, and on Android the app no longer freezes when you tap a wheel that is switched off.

Android · vc77

  • The quick actions panel has a new "Reset the wheel's trip" button for LeaperKim and NOSFET wheels, except Sherman, Sherman Max, Abrams and Sherman S. The app asks you to confirm before it resets. On the NOSFET Aero and Aeon the button works even where the button in the manufacturer's app does not. The command comes from the manufacturer's app and firmware and hasn't been tested on every model.

  • Auto headlight and the strobe now control the headlight on single-beam LeaperKim and NOSFET wheels with the same command as the "Headlight" button. Before, the command could fail to reach the wheel without any warning.

  • A wheel profile chosen from the remote now applies on the first try. Before, it did nothing until you opened the wheel settings.

  • Tyre pressure reaches alerts more reliably, and switching back to the previous dashboard is no longer cancelled on its own.

  • The app no longer freezes into "App isn't responding" when you tap a wheel that is switched off. This mostly affected Honor phones. Connecting also starts faster once you have many rides saved.

  • The KingSong KS-14D Pro now shows its charge from the cell voltages instead of a constant 0%. A wheel that reports itself as KS-14SP is recognised as the KS-14D Pro.

iOS · build 84

  • The quick actions panel has a new "Reset the wheel's trip" button for LeaperKim and NOSFET wheels, except Sherman, Sherman Max, Abrams and Sherman S. The app asks you to confirm before it resets. On the NOSFET Aero and Aeon the button works even where the button in the manufacturer's app does not. The command comes from the manufacturer's app and firmware and hasn't been tested on every model.

  • The headlight on single-beam LeaperKim and NOSFET wheels works fully again: "Turn off" switches it off, a long press on the remote no longer switches it on and off at once, and auto headlight and the strobe control it with the same command as the "Headlight" button.

  • Changing one setting on the Automation screen no longer resets the other auto headlight settings: the speed threshold, high beam, and how and at what angle the light switches off stay as they were.

  • The KingSong KS-14D Pro now shows its charge from the cell voltages instead of a constant 0%. A wheel that reports itself as KS-14SP is recognised as the KS-14D Pro.

Searching for the wheel no longer gives up after a failed attempt at the edge of range, the reconnect button no longer freezes the app, and the plugin catalogue now matches the exact firmware build and includes packages for the LeaperKim Oryx.

Android · vc75

  • “Always search” no longer stops silently when a wheel at the edge of range connects but fails to finish the handshake: the app simply tries again.

  • Tapping “Reconnect” while the wheel is off no longer causes an “App not responding” error.

  • Firmware plugins are now matched to the wheel's exact firmware build instead of just the brand, so an Oryx owner is no longer offered Lynx-S packages. Until the wheel reports its firmware, the screen says it is waiting for it.

  • The catalogue now includes plugins for the LeaperKim Oryx 008.0.05: motor temperatures, auto-off, parking alarm, charge-line state and extended telemetry. They require modified firmware and have so far been tested only in the firmware emulator, not on a real Oryx.

  • If the app crashes or freezes for a long time, this is now recorded in the diagnostic log, which you can export from settings and send to the author.

iOS · build 82

  • “Always search” no longer stops silently when a wheel at the edge of range connects but fails to finish the handshake: the app simply tries again, without repeating the connection-lost sound.

  • The “connection lost” sound no longer plays long after a ride while the wheel is off: it only plays when a real connection was actually lost.

  • Firmware plugins are now matched to the wheel's exact firmware build instead of just the brand, so an Oryx owner is no longer offered Lynx-S packages. Until the wheel reports its firmware, the screen says it is waiting for it.

  • The catalogue now includes plugins for the LeaperKim Oryx 008.0.05: motor temperatures, auto-off, parking alarm, charge-line state and extended telemetry. They require modified firmware and have so far been tested only in the firmware emulator, not on a real Oryx.

A new Moving time reading on the dashboard and in rides. Begode wheels with a smart BMS get more accurate battery current and consumption, the InMotion P6 refreshes twice as often, and the frame a wheel sends as it switches off no longer counts as a voltage drop. Buttons on a home-made display, plus fixes for the connection, tiles and volume buttons. Plugins for the NOSFET Aeon and a PIN for the parking alarm. On iPhone: an app language setting, plugins, the event log, Third Eye, a map tile, custom colours and widget buttons.

Android · vc74

  • A new Moving time reading counts only the time the wheel was going faster than 1 km/h. You can put it on a dashboard tile and on the widget. If stops took at least a minute, the ride header shows it next to the ride time, older rides included.

  • Begode: if the wheel has a smart BMS, the battery current is pulled towards the BMS reading. The X-Way read about 1.3 times too low, and a RACE at a standstill read −2.8 A, which pushed a ride's consumption below zero. The correction starts after about half a minute of riding. Past rides are not recalculated.

  • InMotion P6: readings refresh twice as often. New readings: LTE signal strength and the trip maxima the wheel tracks itself — speed, battery power and motor power.

  • The hertz rate in the header now counts telemetry frames, not Bluetooth packets, so the number means the same on every brand.

  • The last low-voltage frame a wheel sends as it switches off no longer counts as a voltage drop. It no longer sets off voltage alerts or shows up in the minimum and the ride analysis, including on older rides. A real drop under load still counts.

  • The full chart shows voltage with hundredths. When you come back from a chart, a ride or the settings, the list stays scrolled where you left it. Ride charts in the overlay no longer shrink to fit the window.

  • Fixed: the connection lost panel stayed on screen while telemetry was already coming in. The app now announces when the wheel has been silent for more than 5 seconds. The connection lost sound only plays after a connection has been made. The app no longer crashes when it starts with the wheel switched off.

  • Fixed: reconnecting mid-ride reset Wh, Wh/km and moving time.

  • Tiles no longer disappear after a short ride: the app remembers what the wheel sent over the last 20 rides, not just the last one. Plugin readings are only offered when the plugin is running on the wheel or has been seen on it before.

  • Without the nearby devices permission, or with Bluetooth off, you now get a panel with a button to the settings instead of an empty screen.

  • New wheels start with the same default dashboard as on iPhone: 13 tiles. Saved dashboards stay as they are.

  • The wheel presets section has been redesigned. It is now a list, and presets that match the wheel are tagged "on the wheel". The selected preset shows how many settings differ, and all its actions are in its row. The app asks before deleting a preset. Tapping the selected preset applies it again.

  • Fixed: switching from your own preset to the factory one in quick actions snapped back before the wheel had taken the settings.

  • A trained battery model takes effect right away. Before, the recalculation after the next ride could overwrite it with the old model and lose the learned capacity.

  • Holding the × on the open quick actions panel no longer toggles the light.

  • Volume buttons: the slider no longer jumps while you hold a button, and a short press no longer flickers between two sliders. If a button release gets lost, the next press no longer counts as a hold.

  • A home-made display with buttons can control the wheel: headlight, horn, turning the wheel off (only when it is nearly stopped, below 3 km/h), the phone's auto light, the wheel's auto light and the parking alarm.

  • Third Eye: the switch no longer turns itself off after the wheel disconnects. The phone connects only to its own mirror and won't grab someone else's on a group ride.

  • NOSFET: the headlight strobe alert now works, as on LeaperKim.

  • Fixed: with the Telemetry plugin, apparent power showed a thousand times its real value.

  • Firmware flashing from LoEUC has been tested on a real NOSFET Aeon, with both factory and modified firmware. Other NOSFET models and firmware recovery have not been tested yet.

  • Plugins for modified NOSFET Aeon 503.0.05 firmware: Telemetry, Charge line, Coil temperature and Parking alarm. The plugins section now opens for NOSFET owners too. They have only been tested on an emulator, not on a real wheel yet.

  • The Parking alarm now has a PIN on the wheel's buttons. You set it in the app by pressing the buttons on the wheel itself. Four correct presses disarm the alarm without a phone, and a wrong code sets off the siren. While the alarm is armed, the power button can't switch the wheel off, the wheel can't be armed for riding, the buttons only take PIN entry, and the Lynx-S screen shows "ARM P". This needs the latest modified firmware. The latest version has only been tested on an emulator.

  • New PWM beep threshold plugin for modified Lynx-S firmware: move the PWM beep anywhere from 75 to 99%. 75% is the factory setting.

  • PID gains: the circle is replaced by a radar chart with three axes, Ka, Kg and Kc, each explained in plain words. The dashed triangle shows the factory values and the solid one shows the new values. Changes apply straight away. Fixed: this screen flickered, and the digits jumped while you entered the PIN.

iOS · build 81

  • A new Moving time reading counts only the time the wheel was going faster than 1 km/h. It is available as a tile, on the widget and in the ride header, older rides included. Fixed: the widget showed 26 minutes of ride time as 0:02.

  • Begode: if the wheel has a smart BMS, the battery current is pulled towards the BMS reading. This fixes the low current on the X-Way and the −2.8 A at a standstill on the RACE. Past rides are not recalculated.

  • InMotion P6: readings refresh twice as often. New readings: LTE signal and the trip maxima the wheel tracks itself — speed, battery power and motor power.

  • The rate in the header counts telemetry frames, the same way for every brand. The last frame a wheel sends as it switches off no longer counts as a voltage drop. The chart summary shows voltage with hundredths.

  • App language: Settings → Language (System, Русский, English). It changes the screens, spoken alerts, factory alert rule names, the ride card and the widget.

  • Connection: Search forever (one try every 30 seconds until you disconnect yourself). If the wheel is silent for 5 seconds, the app starts searching instead of showing frozen numbers. Switching from a charger to the wheel no longer sets off a pointless search for the wheel. Stopping the demo clears the dashboard.

  • Fixed: GPS speed calibration did not collect any data on a normal connection. A silent tyre pressure sensor no longer keeps its alert going for the whole ride.

  • Dashboard: tiles can go in any cell, as on Android, so a preset made on Android lays out the same way. New: a decimal places setting, a scale lock, custom background and accent colours with a readability check, and a Map tile with the ride's route. If pasting a preset link fails, the app explains why.

  • The widget uses the app's colours, and tapping it opens the dashboard. On iOS 17 the medium widget has light and horn buttons, which work while the app is active in the background.

  • The wheel settings screen is split into collapsible sections with counts, with search and a Raw values switch. SKAT chargers get their own settings screen, with factory limits and a confirmation before anything is written. Diagnostics shows the battery status and can build a report for support. Ninebot wheels now show battery currents, temperatures and charge.

  • The battery model can be trained on rides you have already recorded. A trained model takes effect right away.

  • The wheel presets section works as on Android: a list, an "on the wheel" tag, actions next to the selected preset and a confirmation before deleting. Tapping the selected preset applies it again.

  • Alerts: headlight strobe is available as an alert action. From a reading's screen you can go straight to the editor for its threshold or create a new one. The sounds list shows a diagram of each sound pattern. Fixed the filter that shows alerts by wheel.

  • Rides: you can select several rides and delete them (with a confirmation) or export them as an archive. The archive now also carries the learned speed calibration and diagnostic records. Recorded dumps are gathered in a list, where you can share or delete them.

  • Wheel detection: NOSFET now has its own protocol. InMotion wheels without a name now show up in the list. Connecting to a wheel that isn't advertising takes the protocol from the garage.

  • The event log for LeaperKim and NOSFET is in the dashboard menu. From iPhone it has only been tested against a wheel emulator.

  • Firmware flashing is now available for NOSFET. It has not been tried from an iPhone on a real wheel yet.

  • Third Eye: the iPhone finds the handlebar mirror by itself and shows two readings of your choice on it. The mirror's battery level can go on a tile. The iPhone connects only to its own mirror. Only tested on an emulator so far.

  • A home-made display with buttons can control the wheel: headlight, horn, turning off a stationary wheel, the phone's auto light and the parking alarm.

  • Firmware plugins: install and remove plugins, change their settings, use the Rate and fields screen, show plugin readings on tiles and in ride records, and arm or disarm the alarm from quick actions. Only plugins for the connected wheel's firmware are shown, including the NOSFET Aeon plugins, PWM beep threshold and the PID gains radar. No plugin has been written to a real wheel from an iPhone yet. The alarm PIN can only be set from Android for now.

  • Apparent power is now corrected on iPhone too when the Telemetry plugin is running.

  • Holding the × on the quick actions panel no longer toggles the light. Tiles no longer disappear after a short ride. The range under the voltage tile is no longer thrown off by the frame a wheel sends as it switches off.

  • The ride database now updates in batches and shows progress. Cleaning up broken telemetry no longer freezes the app.

Every ride now has an analysis: load, riding style and a comparison with other rides on the same wheel, including older recordings. The dashboard gets a Consumption now reading, a clearer screen for lost connections and a setting for animations. Rides can be locked, and speed correction is now set to a tenth of a percent. On Android there are also volume-button holds, a customisable notification, the event log, NOSFET firmware flashing and new plugins for modified LeaperKim firmware.

Android · vc73

  • Ride analysis: a button under the map opens load (PWM and time spent near the wheel's current limit), smoothness, acceleration and braking, plus a comparison with other rides on this wheel. Every ride has one, including rides recorded earlier.

  • Two new tiles for the ride card: smoothness and the share of riding above 70% PWM.

  • A new Consumption now reading covers the last 500 m. The old Consumption per km reading is now called Average consumption.

  • Readings the app computes itself (ride time, moving average speed, consumption, forecasts) are always available in the tile picker.

  • When the connection drops, the screen gets a red frame and the figures turn grey. The bottom of the screen shows how long the link has been down, with a large Reconnect button.

  • Holding the quick actions dot toggles the light. Holding the profile opens the wheel settings.

  • Rides can be locked. Delete unlocked clears the history in one go, and Undo brings it back.

  • Speed correction can be set to a tenth of a percent. The learned correction now covers an offset across speed ranges as well as a multiplier.

  • A new Motion setting (Full, Calm, Off) and rolling digits on tiles. Rolling digits are off by default.

  • Holding a volume button sounds the horn or toggles the light, even with the screen off. Off by default.

  • You choose what the notification shows: up to four readings, in your own order. You can hide them on the lock screen.

  • A new Event log item in the dashboard menu for LeaperKim and NOSFET reads the wheel's log of events, protection trips and errors. It has not been tested on a real wheel yet.

  • Firmware flashing and firmware recovery are now available for NOSFET, and the Xeno model is recognised. Nobody has flashed a real NOSFET yet.

  • The Third Eye setting sends two readings to the DIY ThirdEye mirror display.

  • Wear OS watches now use the phone's language.

  • Fixed: a brief glitch in the wheel's counter could double a ride's distance. Rides already recorded are recalculated automatically.

  • Fixed: Always search stopped once the search window ended, and the widget did not show a manual disconnect.

  • Firmware recovery no longer sends a file to a wheel before the wheel has had a chance to report in.

  • Text throughout the app has been rewritten to be clearer. The Plugins screen now explains where to get the modified firmware.

  • Three new plugins for modified LeaperKim firmware: Charge line, PID gains and Telemetry. Telemetry puts on tiles what a stock wheel keeps to itself: motor currents Id and Iq, modulation, back EMF, gyroscope and accelerometer. The Rate and fields screen shows how often the wheel sends plugin data and how much goes out each time, and lets you change the rate.

iOS · build 79

  • Ride analysis: a button under the map opens load, smoothness, acceleration and braking, plus a comparison with other rides on this wheel. Every ride has one, including rides recorded earlier.

  • Two new tiles for the ride card: smoothness and the share of riding above 70% PWM.

  • A new Consumption now reading covers the last 500 m. The old Consumption per km reading is now called Average consumption.

  • Readings the app computes itself are always available in the tile picker. Moving average speed no longer disappears from the list.

  • When the connection drops, the screen gets a red frame and the figures turn grey. The bottom of the screen shows how long the link has been down, with a large Reconnect button.

  • Holding the quick actions dot toggles the light. Holding the profile opens the wheel settings.

  • Rides can be locked. Delete unlocked clears the history in one go, and Undo brings it back.

  • Speed correction can be set to a tenth of a percent and uses the learned offset, as on Android.

  • A new Motion setting (Full, Calm, Off) and rolling digits on tiles. The system Reduce Motion setting still takes priority.

  • The NOSFET Xeno model is now recognised.

  • Fixed: a brief glitch in the wheel's counter could double a ride's distance. Rides already recorded are recalculated automatically.

  • Text throughout the app has been rewritten to be clearer.

A horn button in the quick actions panel, total distance on InMotion and trip on the V11, honest ride averages, a volume fix and a batch of Android reliability fixes.

Android · vc72

  • The quick actions panel has a horn button, the same command as the widget's horn. It is available on Begode, KingSong, most InMotion wheels, LeaperKim and NOSFET; on LeaperKim and NOSFET the beep has not yet been confirmed on a real wheel.

  • The quick actions panel no longer closes by itself, either on a timer or after you press a button. Tap outside it or tap its dot to close it.

  • InMotion: the app reads the wheel's total distance, including on the P6. On a V11 with main board firmware 1.4 or later the trip no longer sits at zero.

  • InMotion: motor temperatures above 80 °C are now shown correctly instead of stopping at 79 or going negative.

  • Averages of speed, PWM, currents, power and angles count only time on the move (above 1 km/h), so stops and traffic lights no longer drag them down. Temperatures, voltage and charge are still averaged over the whole ride.

  • A ride from a wheel with no distance counter no longer shows zero kilometres: the distance is worked out from speed.

  • On the ride and reading charts the scale is built from the whole ride and no longer jumps when you zoom or pan. The reading screen now supports pinch zoom and two-finger panning.

  • Ride history, the map, the share card and exports use the name you gave the wheel in the garage, including on older rides.

  • A reading the wheel has sent even once no longer disappears from the dashboard while data is missing: the tile shows a dash and waits.

  • Alerts: the comparison (≥, >, ≤, <) can be changed right on the threshold screen, the repeat option is now called "Repeat in steps of", and rules that send wheel commands have a "Silent" mode.

  • Relative volume no longer drifts too far from the level you set.

  • Begode: asking the wheel for its name and version no longer silences it or causes a reconnect loop.

  • The home screen no longer shows an empty garage and "0 rides" after a counting error.

  • Fixed a freeze when opening the map for a wheel that is standing still, and a crash from a GPS fix arriving after the service stopped. Tapping the widget no longer opens another copy of the app.

  • LeaperKim: a wheel that went silent after a failed flash gets a last attempt. Long-press it in the garage and choose "Try to recover the firmware". Neither of the two methods has been proven on a real wheel yet.

  • InMotion P6: diagnostics now have a Ride Connect section with the EID, the eSIM profiles and the modem's network registration state, plus InMotion account sign-in to view the service status. It is a diagnostic tool and does not guarantee the service will work.

  • The app no longer requests the advertising ID permission.

iOS · build 78

  • The quick actions panel has a horn button, the same command as on Android. It is available on Begode, KingSong, most InMotion wheels, LeaperKim and NOSFET; on LeaperKim and NOSFET the beep has not yet been confirmed on a real wheel.

  • The quick actions panel no longer closes by itself, either on a timer or after you press a button.

  • Relative volume no longer swings between zero and maximum.

  • Your wheel is now shown as in range even when another app on the phone already holds it, and a saved wheel that is out of range connects by its address, as on Android.

  • InMotion: the app reads the wheel's total distance, including on the P6. On a V11 with main board firmware 1.4 or later the trip no longer sits at zero.

  • InMotion: motor temperatures above 80 °C are now shown correctly.

  • Averages of speed, PWM, currents, power and angles count only time on the move (above 1 km/h). A ride from a wheel with no distance counter gets its distance from speed.

  • On the ride and reading charts the scale is built from the whole ride and no longer jumps when you zoom.

  • Ride history uses the name you gave the wheel in the garage, including on older rides.

  • Alerts: the threshold editor has a single "Done" button, the comparison can be changed right on the screen, and rules that send wheel commands have a "Silent" mode.

  • Begode: asking the wheel for its name and version no longer silences it.

  • The firmware screen now says plainly that flashing from an iPhone has not been tested on a wheel.

On modern Begode wheels, battery current and consumption no longer come out negative, and old rides are corrected automatically. A short connection dropout no longer splits a ride in two. iPhone gets theme selection, the Pilot theme, full archive import and vibration that lasts for the whole alert. Dashboard tiles stay put, and the number inside the arc is bigger.

Android · vc70

  • Begode: battery current and power on modern wheels are now positive while riding, and consumption no longer comes out negative. Old rides are corrected automatically on first launch, and the battery model learned for such a wheel is reset and relearned.

  • Begode: new readings for the highest and lowest battery temperature. Wheels without the sensor aren't offered the tile or the battery-overheat alert.

  • If the connection drops and you reconnect to the same wheel within five minutes, recording continues in the same ride, with one track and one consumption figure.

  • False spikes like "190 km/h" from corrupted packets no longer reach alerts or ride history.

  • On short rides, battery use is shown as an estimate from voltage: "≈0.4 %" instead of "0 %".

  • GPX and CSV tracks no longer shift by tens of metres at longitudes above 100°.

  • LeaperKim: apparent power is now calculated correctly.

  • LeaperKim: Lynx and Sherman-L now show the correct maximum charge voltage (it read 134.2 V instead of 151.2 V). When the base is unknown, only the adjustment is shown, e.g. "+6.2 V".

  • Tiles no longer jump when you add or remove one, an empty row closes up, and a tap still works if your finger slides a little.

  • In tile settings, the number can be centred on graph and scale tiles.

  • The number inside the arc is bigger. It's sized to the ring and to the longest value on the scale, so it doesn't jump at 99 → 100. The arc itself fills the tile better.

  • The metric picker now lists only readings, so ride mode, the power-off timer and other settings are gone. It has a search box, and readings the wheel never sends sit in their own greyed-out section.

  • The wheel settings screen no longer shows rows the wheel doesn't have. For every brand, values are spelled out in the app's language, e.g. "Off" instead of "0 km/h".

  • The power-off button no longer clears "Keep a parked wheel awake".

  • On first launch, the app language follows the phone. Existing users keep their language.

  • Built-in alert names switch along with the app language. Alerts you renamed keep your names.

  • The beep ramp reaches its fastest rate exactly when it merges into a continuous tone.

  • On charts, the cursor now sits right under your finger. In the overlay, every line has its own stroke pattern, so you can tell the temperatures apart.

  • Preset links from loeuc.pro now open, and importing a file no longer overwrites a preset that came by link or creates duplicates.

  • The pinned band's frame matches the tiles in every theme.

  • A peak label at the edge of the map shifts inwards instead of disappearing.

  • The demo hint on the home screen no longer promises a Lynx.

iOS · build 73

  • Begode: battery current and power on modern wheels are now positive while riding, and consumption no longer comes out negative. Old rides are corrected automatically, and the battery model learned for such a wheel will be relearned.

  • Begode: BMS cells and the highest and lowest battery temperature now appear. On the InMotion P6, the BMS screen now shows data.

  • Theme selection: system, light or dark, plus the high-contrast Pilot theme for riding in sunlight and at night. The theme carries over between iPhone and Android in presets.

  • Archive import now brings everything over: the battery model, ride profile, ride kind and energy scheme. Large archives are read without overloading memory.

  • Alerts now vibrate for as long as they sound, not just once. Vibration only works while the app is open, which is an iOS limit.

  • Alerts on pitch, GPS speed and charging readings now fire. There's a new toggle to lower music during alerts, and saving a nearby setting no longer resets voice announcements.

  • LeaperKim firmware flashing is now in the dashboard menu on iPhone. The wheel gets the same bytes as from Android, but flashing a real wheel from an iPhone hasn't been tested yet. Keep the app open and the screen on until it finishes.

  • Tiles now match Android: a large number, tinting as a reading nears its threshold, and the unit in the title. Dashboard speed is shown as a whole number. Presets no longer lose hidden units or tile colours.

  • The number inside the arc is bigger and doesn't jump at 99 → 100, and the arc fills the tile better.

  • If the wheel rejects a setting, the screen now says so. A 100 % PWM threshold is rolled back automatically, and wheel settings open directly, without an extra screen.

  • InMotion V11 and newer: speed is negative when rolling backwards. Automatic headlight now works on older InMotion wheels.

  • King Song: "Battery current" shows the battery current from the BMS, not the phase current.

  • A dead cell no longer hides from the cell list. Pack voltage is drawn over its working range, so voltage sag is visible.

  • SKAT chargers are recognised as chargers, and a rejected wheel no longer blocks auto-connect to other wheels.

  • The widget shows only slow readings and refreshes about every 15 minutes, plus right away on connection and ride events. If the system closes the app, the widget no longer shows stale data as live.

  • The ride card uses peak temperatures and torque, like Android. The chart overlay scales each line separately, and swipe-to-delete asks for confirmation.

  • GPS now records points while you're stopped, spoofed locations are kept out of speed calibration, and with GPS recording off, calibration explains why it isn't progressing.

  • After switching metrics, the metric screen no longer shows the previous metric's row. The metric picker now lists only readings.

  • The Appearance screen now changes colour immediately when you switch themes.

  • LeaperKim: Lynx and Sherman-L now show the correct maximum charge voltage.

  • In tile settings, the number can be centred on graph and scale tiles. Tiles no longer jump when added or removed, and the pinned band turns red near its threshold.

  • The beep ramp reaches its fastest rate exactly when it merges into a continuous tone, and a peak label at the edge of the map shifts inwards.

King Song settings and older InMotion wheels, the Pilot theme, a headlight strobe on alerts, alert vibration, a real-ride demo and fixed King Song temperatures.

Android · vc69

  • King Song: settings can now be changed from the app — speed alarms 1–3 and tilt-back, pedal mode, headlight, LED strip, strobe, auto power-off and charge limit. The app also shows the model, firmware, serial number, fan, charging state and the F18 Pro / F22 Pro battery. The commands were checked against two sources but haven't been tried on a real wheel yet, so change things in small steps.

  • King Song: the two temperatures were swapped. Controller temperature now shows the sensor that heats up under load, and the second sensor is shown as motor temperature.

  • King Song wheels without a smart BMS (S18 and similar) now show charge, estimated from voltage. The S18 Pro+ is recognised correctly, and the screen updates smoothly without stutter.

  • Experimental support for older InMotion wheels (V5, V8, V10, Solowheel Glide 3): telemetry, model and firmware, settings that are read back after each change, headlight and horn. No wheel from this series has connected yet, so ride recordings are welcome. The app unlocks the wheel with the default PIN 000000.

  • InMotion V12S, V11Y and V9 are now decoded with their own layout: on the V12S, speed, PWM, charge and power used to be wrong. The V13, V11Y, V12S and V9 get a settings screen, and several models get a horn on the widget. Automatic light is available on the V11, V12 and newer, P6 included.

  • The P6 settings screen is split into collapsible sections with search. LeaperKim settings are sorted into sections instead of all sitting under Other.

  • Begode: Freestyl3r, SmirnoV and ExtremeBull firmware is recognised. On Freestyl3r and SmirnoV, PWM comes from the wheel. SmirnoV controller settings can be viewed, and on Freestyl3r you can set PWM tilt-back. Checked against WheelLog only.

  • A renamed Begode, King Song or LeaperKim wheel is recognised from the first bytes it sends.

  • Headlight strobe on alerts for King Song and LeaperKim: the headlight blinks while the alert is active and stays on once it clears. If the connection drops mid-blink, the headlight may be left off.

  • Turning off automatic light on Begode no longer starts the headlight blinking.

  • Phone vibration now works alongside the alert sound and repeats in step with the beeps. The music, voice and vibration switches have moved behind a single button.

  • A new alert condition: tyre pressure, when a TPMS sensor is bound. Priority 9 can be picked in the alert editor again.

  • A new Pilot theme: high contrast for riding in sunlight and at night.

  • Dashboard: the whole tile turns red on an alert and starts shifting colour as the threshold nears. Units have moved into the tile header, same-size tiles now have digits of the same height, speed is shown as a whole number, and the unit can be hidden.

  • A new scale lock stops an accidental pinch from changing the grid. Labels grow with the tile, and large digits fill the whole tile.

  • A new screen for picking a custom colour, with a colour-code field and a contrast check. Applying a preset no longer resets the tile border and chart background.

  • Demo mode now plays a real recorded ride (Begode Master or King Song S18) and works with the watch and an external display. Nothing is saved to ride history and no GPS is recorded.

  • GPS speed calibration now actually collects data and shows progress during the ride.

  • Ride history can be filtered by wheel. For LeaperKim, speed and current with their sign are included in the export, and every frame is recorded by default.

  • The app icon no longer shows as a blank white square on home screens with themed icons.

iOS · build 72

  • King Song: settings can now be changed from the app — speed alarms 1–3 and tilt-back, pedal mode, headlight, LED strip, strobe, auto power-off and charge limit. The app also shows the model, firmware, serial number and the F18 Pro / F22 Pro battery. The commands were checked against two sources but haven't been tried on a real wheel yet, so change things in small steps.

  • King Song: the two temperatures were swapped. Controller temperature now shows the sensor that heats up under load, and the second sensor is shown as motor temperature.

  • King Song now shows charge: from the BMS on the S22, and estimated from voltage on the S18 and similar wheels. The S18 Pro+ is recognised correctly.

  • Experimental support for older InMotion wheels (V5, V8, V10, Solowheel Glide 3): telemetry, model and firmware, settings, headlight and horn. No wheel from this series has connected yet. The app unlocks the wheel with the default PIN 000000.

  • InMotion V12S, V11Y and V9 are now decoded with their own layout, and the V13, V11Y, V12S and V9 get settings. Begode recognises Freestyl3r, SmirnoV and ExtremeBull firmware. Renamed Begode, King Song and LeaperKim wheels are recognised from their data. Solowheel Xtreme is no longer filtered out during scanning.

  • Automatic light now turns the headlight back on after it was switched off with the wheel's own button. On Begode, turning off automatic light now switches the headlight off.

  • A new alert condition: tyre pressure. The metric list in the alert editor no longer redraws under your finger.

  • Demo mode now plays a real recorded ride and sends data to the watch and widget. Nothing is saved to ride history.

  • GPS speed calibration now actually collects data and shows progress during the ride.

  • For LeaperKim, speed and current with their sign are included in the ride export.

Begode wheel settings can now be written straight from the app on both Android and iPhone, rides can have their start and finish trimmed off the track, and the phone can feed telemetry to a home-built external display. Plus two more families of tyre pressure sensors, a sound for a lost wheel connection, and a large batch of battery, dashboard and ride history fixes.

Android · vc67

  • Begode settings can be written from the app: Speed tilt-back, Ride mode, Field weakening, Pedal dip in turns, Pedal horizontal trim, Side tilt threshold and Maximum side tilt angle, Buzzer volume, LED strip mode, First speed alarm, Tilt-back on low power reserve and Units on the wheel's display; Auto power-off timer is read-only. The commands come from two independent reverse-engineering passes over the official Begode app and EUC World, only what both agreed on is implemented, and not every setting has been confirmed on a live wheel — change things in small steps and watch what the wheel does. The wheel itself never acknowledges a write and reports only some of the settings back.

  • Settings with three values (Ride mode, Side tilt threshold) now show the value names instead of a km / mi button pair, and the third value can finally be selected. Units on the wheel's display is now a km/mi switch instead of ON/OFF. The same fix applies in the wheel-command alert editor.

  • A Begode profile is now applied in full rather than only the changed rows, and captured in full: the app remembers what it sent to the wheel and uses that wherever the wheel stays silent. On the settings screen, what was sent is still not passed off as the wheel's current value.

  • Begode power reserve is read from the wheel and shown as remaining reserve rather than load level.

  • EX30: the overload (PWM) gauge and motor temperature are back — both used to sit at zero all day. On a wheel with a dead PWM channel it is estimated from the catalogue model.

  • Begode with a thermistor (X-Way): motor temperature can be put on the dashboard again.

  • Battery: an impossible per-cell average is shown as a dash instead of a measurement; picking a wheel model by hand drops a stored pack model with a different cell count; and a single bad first reading no longer fixes the cell count for the life of the wheel.

  • Track privacy: the start and finish of a ride can be trimmed by a radius around the start and end points. Trimming applies to GPX, the WheelLog-format export and the ride card; the in-app map and the LoEUC archive stay complete. Off by default.

  • A sound when the wheel connection drops unexpectedly: a soft descending tone in your earpiece, unlike an alarm, no more than once every 15 seconds. Off by default, enabled under Connection.

  • External display: the phone finds a home-built display, connects to it and writes telemetry five times a second. Settings show every display on the air with its signal strength, connection state updates live, and a display that supports it gets an extended snapshot: up to 33 catalogue metrics plus the ride totals.

  • Tyre pressure sensors: two more families, Pecham and Sysgration. The search is more persistent and no longer silent — "Looking for a sensor…", a hint to spin the wheel, and "No TPMS sensor found" after half a minute. "Ignore" hides someone else's sensor for good rather than for ten minutes, and dismissing the dialog no longer hides the sensor. Pecham sensor charge is shown in volts — that is a reading of one byte, not yet confirmed on a fresh sensor.

  • Auto volume: a separate switch adds relative mode — the calculated level becomes the midpoint and your own adjustment is remembered as an offset instead of being wiped by the next change in speed. Off by default.

  • Wheel setting profiles: a "Save changes to profile" checkbox writes every manual change straight into the selected profile.

  • Dashboard presets: an existing preset can be overwritten with the current layout, without creating a new entry or typing a name.

  • Session peaks can be reset from a button in the quick actions dock, not just a menu item, and now on wheels of any brand.

  • Accelerating alert: the interval between the first beeps is set by the rider, in 100 ms steps from 100 to 5000 ms.

  • The "Output current" metric is renamed "Bus current" — the same name its thresholds carry in the wheel settings.

  • Alert editor: the "Add command" button opens the warning and the setting picker again.

  • The Wear OS watch reconnects on its own to the wheel you picked last time: address, name and protocol are remembered, a live scan still wins, and disconnecting by hand clears the record.

iOS · build 70

  • Begode settings can be written from the app: Speed tilt-back, Ride mode, Field weakening, Pedal dip in turns, Pedal horizontal trim, Side tilt threshold and Maximum side tilt angle, Buzzer volume, LED strip mode, First speed alarm, Tilt-back on low power reserve and Units on the wheel's display; Auto power-off timer is read-only. Values are shown in words ("3 min", "Miles", "Off") rather than a bare number. The commands come from two independent reverse-engineering passes over the official Begode app and EUC World, only what both agreed on is implemented, and not every setting has been confirmed on a live wheel — change things in small steps.

  • Fixed: on iPhone, Begode setting writes never reached the wheel at all — neither from the settings screen nor when applying a profile — and the silence was indistinguishable from the wheel ignoring you.

  • Settings with three values (Ride mode, Side tilt threshold) now show the value names instead of a km / mi button pair, and the third value can finally be selected. Units on the wheel's display is now a km/mi switch.

  • A Begode profile is now applied in full rather than only the changed rows, and captured in full: the app remembers what it sent to the wheel and uses that wherever the wheel stays silent.

  • Begode power reserve is read from the wheel and shown as remaining reserve rather than load level.

  • EX30: the overload (PWM) gauge and motor temperature are back — both used to sit at zero all day.

  • Battery: an impossible per-cell average is shown as a dash instead of a measurement; picking a wheel model by hand drops a stored pack model with a different cell count; and a single bad first reading no longer fixes the cell count for the life of the wheel.

  • Track privacy: the start and finish of a ride can be trimmed by a radius around the start and end points. Trimming applies to GPX, the WheelLog-format export and the ride card; the in-app map and the LoEUC archive stay complete. Off by default.

  • A sound when the wheel connection drops unexpectedly: a soft descending tone in your earpiece, unlike an alarm, no more than once every 15 seconds. Off by default, enabled under Connection.

  • The external display now works on iPhone too: the phone finds a home-built display, connects on its own and writes telemetry five times a second. Every display on the air is listed with its signal strength, connection state updates live, and a display that supports it gets an extended snapshot: up to 33 catalogue metrics plus the ride totals. The older kind of display that connects to the phone itself is not supported on iPhone.

  • Tyre pressure sensors: two more families, Pecham and Sysgration. "Replace TPMS" is no longer silent — "Looking for a sensor…", a hint to spin the wheel, and "No TPMS sensor found" after half a minute. "Ignore" hides someone else's sensor for good rather than for ten minutes. Pecham sensor charge is shown in volts — that is a reading of one byte, not yet confirmed on a fresh sensor.

  • Auto volume: a separate switch adds relative mode — the calculated level becomes the midpoint and your own adjustment is remembered as an offset. Off by default.

  • Wheel setting profiles: a "Save changes to profile" checkbox writes every manual change straight into the selected profile.

  • Dashboard presets: an existing preset can be overwritten with the current layout, without creating a new entry or typing a name.

  • Session peaks can be reset from a button in the quick actions dock, not just a menu item.

  • Accelerating alert: the interval between the first beeps is set by the rider, in 100 ms steps from 100 to 5000 ms.

  • Ride history: swiping sideways opens the neighbouring ride straight from the ride screen, in the same order and with the same search as the list.

  • Ride history: the chart metrics you picked survive moving to another ride.

  • Ride history: the thumbnail and severity dot of a merged ride are recalculated after the merge instead of staying those of the first segment.

  • Ride history: going back with the arrow no longer shows an empty panel instead of the ride you are leaving.

  • Dashboard: ride time in a cluster tile row is printed as time (2:11) rather than a number like "7.92k".

  • Dashboard: the cluster tile editor only offers metrics this wheel actually reports.

  • The "Output current" metric is renamed "Bus current".

Android · vc68

  • External display: a snapshot that arrives while the previous one is still being sent now waits its turn instead of breaking the transfer halfway — extended data reaches the display whole. If a chunk fails to write, the app drops that transfer and sends the next snapshot from scratch rather than pushing a knowingly broken one.

  • An external display switched off and back on is found and reconnected again — it used to stay stuck in searching forever.

  • Begode: "Speed tilt-back" no longer shows "off" before the wheel has reported it, and a profile captured in the first seconds of a connection no longer switches tilt-back off when applied. Begode setting commands come from analysis of the vendor apps, not from validation on a wheel.

  • Begode: switching tilt-back off is sent with the same pause as every other command — the beep that follows used to be able to merge with it into an unrelated command.

  • Begode: a profile now captures only the settings the wheel can accept, so your own freshly captured profile is no longer reported as partially incompatible.

  • TPMS: a sensor once hidden by a stray tap outside the dialog is found on its own again — no need to go through "Search hidden" to get it back.

iOS · build 71

  • External display: a snapshot that arrives while the previous one is still being sent now waits its turn instead of breaking the transfer halfway — extended data reaches the display whole.

  • External display: late replies from a previous device no longer take over the display you chose — the phone could quietly start writing to a different box.

  • Begode: "Speed tilt-back" no longer shows "off" before the wheel has reported it, and a profile captured in the first seconds of a connection no longer switches tilt-back off when applied. Begode setting commands come from analysis of the vendor apps, not from validation on a wheel.

  • Begode: switching tilt-back off is sent with the same pause as every other command — the beep and the switch-off used to be scheduled for the same instant and could merge into an unrelated command.

  • TPMS: a sensor once hidden by a stray tap outside the dialog is found on its own again — no need to go through "Search hidden" to get it back.

  • Track export: with the privacy radius on, rows without coordinates are no longer dropped from the GPX and WheelLog files.

A clip filmed on an action camera can now be laid over a recorded ride through the same pipeline as the app's own recording: the file is not copied, the ride is matched by time, and the offset is dialled in on a paused frame with the overlay on it. A dashboard preset is no longer a snapshot of one desk — it carries every desk and each desk's zoom, on both platforms. On Android the widget's configuration is finally findable — when you place it, from the gear on the tile, and from a "Widgets" section in app settings — transparency moved onto the individual widget, and a change now applies at once instead of fifteen seconds later. On the dashboard, decimal places became a property of the reading, a reading's colour is now shared by every wheel, and the pack and cell voltage scales are marked out by the same numbers.

Android · vc65

  • Importing video filmed on another camera. A clip from an action camera or another phone goes over a recorded ride through the same pipeline as the app's own recording. You pick the file in the file browser and it is not copied — six gigabytes from the camera stay where they are. The ride is matched by the time of filming; if nothing matches, you pick it yourself. The offset between video and telemetry is dialled in with a ±2 minute slider right on the paused frame with the overlay on it, and the correction is remembered as the starting guess for the next import. Insta360 panoramic files are turned down in words rather than as a silent failure.

  • An imported file is never deleted, whatever happens: it does not count against the size cap, it is not evicted by newer recordings, and neither "Delete raw" nor the "delete the raw recording after export" switch touches it. The library simply forgets such an entry.

  • A dashboard preset carries every desk and each desk's zoom. It used to capture only the desk you had open, though a wheel can have up to six, and zoom was a single value for the whole app. A preset with several desks replaces the whole set; a preset with one lands on the open desk and leaves its neighbours alone, and the apply dialog says up front which of the two will happen. Zoom is now a property of the desk. Presets you saved before are read exactly as before.

  • The widget's configuration can now be found. Three ways in: when you place the widget, the gear in the corner of the tile itself, and a "Widgets" section in app settings that lists every widget on your home screen with what it carries. The "Reconfigure" item in the long-press menu is drawn by the launcher, and a third-party launcher is free not to draw it at all — on such a launcher a fully written configuration screen was unreachable.

  • Transparency moved out of the app's appearance settings and onto the individual widget: how much wallpaper shows through is a question about that home screen, and one answer for all widgets was wrong for every other one. The default is 60 %. The feathered edge of the backdrop is gone: on an opaque tile it read as a dirty halo around the rectangle, and the backdrop is now a solid rounded fill.

  • The widget applies a change immediately. The redraw used to be cancelled along with the configuration screen: you moved the transparency slider, nothing happened, and fifteen seconds later the widget suddenly updated on its own.

  • Decimal places are chosen per reading — one row per reading in the tile editor. The choice applies everywhere that reading is shown: the tile, the pinned band, cluster rows, scale labels, the chart, the widget — and it is the same on every wheel. "Auto" means the usual rule, not zero decimals. A value you set by hand also holds for three-digit numbers: pack voltage with two decimals stays 175.93 instead of rounding to 176, which during a top-up is the difference between "holding" and "climbing".

  • A reading's colour is now shared by every wheel. "Speed is orange" is a statement about speed, not about one wheel, and a second wheel no longer starts life with someone else's palette. On update the palette is carried over from whichever wheel's dashboard you open first.

  • The pack voltage scale and the cell scale are marked out by the same numbers — 3.0 to 4.22 V per cell. Side by side in one tile, two rails of the same quantity used to disagree: 175.9 V on a 42S filled the rail almost completely while the same 4.186 V per cell read as four fifths. The top is 4.22 to leave room for the constant-voltage phase, so an overcharge shows as a mark rather than as a wall at the end.

  • On a wheel without a BMS the voltage rail no longer sits at 100 % by definition. Its ceiling was the highest value it had ever seen, so it told you nothing while charging; the ceiling is now derived from the cell count.

iOS · build 68

  • A dashboard preset carries every desk and each desk's zoom. It used to capture only the desk you had open, though a wheel can have up to six, and zoom was a single value per wheel. A preset with several desks replaces the whole set; a preset with one lands on the open desk and leaves its neighbours alone, and the apply dialog says up front which of the two will happen. Zoom is now a property of the desk, and the desks you already saved carry over intact.

The headline change is that the phone now films the ride itself: the camera records the road, the app records the wheel's telemetry alongside it, and afterwards the recording becomes a clip with a metrics overlay and markers for the alerts that fired — saved straight to the gallery. The home screen widget is rebuilt as a dashboard tile: an arc with the headline metric, the reserve bar, up to four facts chosen from eighteen, and an opacity slider; on Android the widget's buttons work again after silently doing nothing in release builds. In wheel settings the slider no longer disagrees with the "Write" button: "on the wheel", "new value" and "in the preset" are now named separately. The ride map stopped tinting the basemap and stopped picking it by the dark theme, and the chart metrics you select in ride history are no longer lost between rides.

Android · vc64

  • Ride video recording. The dashboard menu has a new "Ride videos" item: the camera films the road while the app records the wheel's telemetry at full rate into a companion file. The preview shows exactly how the overlay will sit. Audio is optional. Recording only runs while the wheel is connected and a ride has started — in every other case the screen says why: no camera or no permission, not enough room, phone overheated, a dump is playing back. Overheating, running out of space and switching away all stop the recording on their own, and a recording that stopped on an error says so instead of staying quiet.

  • A library of recordings. The list, a used-space counter and a size cap: once the used space passes the cap, the oldest recordings are evicted automatically. A long press deletes one recording after confirmation, and "Delete raw" clears them all at once. A recording still being written cannot be deleted.

  • Clips with the overlay burned in. Tapping a recording opens export: a player, a timeline carrying the alerts that fired during that recording (coloured by severity — tap a marker to set the trim around it), two trim handles, a choice of metrics and of the corner the overlay is drawn in, and a preview on the paused frame that is exactly what the clip will contain. The render shows progress and can be cancelled; a thirty-second clip takes about five seconds on a fast phone. A trim longer than ten minutes is not forbidden — the app simply tells you how long the render will take.

  • The finished clip goes to the gallery, into Movies/LoEUC. Raw recordings stay inside the app: only what you exported yourself ends up in the gallery. A clip can be rebuilt from one recording as many times as you like, so "delete the raw recording after export" is a separate switch in the library, off by default.

  • The overlay gives the frame to the number. There are no units on the frame at all — you know your own units — speed is a whole number, cell voltage keeps its hundredths, trip distance its tenth. The digits are tabular and no longer jump in size from frame to frame. A row holds exactly as many cells as fit whole: nothing is ever truncated, and the layout screen says outright how many of your chosen metrics will make it into the frame. Filming and the overlay work in landscape too, where the controls move to a side rail instead of sitting in the middle of the road.

  • The home screen widget is rebuilt as a dashboard tile. An arc with the headline metric — "Auto" by default: speed while connected, charge between rides, and it is the connection that switches it, not your speed, so the widget does not rearrange itself at a traffic light. Below it, the reserve bar with the ride's PWM peak, up to four facts chosen from eighteen metrics, and a footer with the wheel's name and how long ago it was seen; the widget's size decides how many slots fit. The speed arc is measured against your wheel's own ceiling, not a generic one. With no connection, speed, PWM, power and current show a dash rather than a zero.

  • The widget's buttons are clickable again: in obfuscated release builds they silently did nothing. There are exactly as many buttons as the wheel supports — today that is the headlight, sending the same command as the dashboard button. No brand has horn or alarm yet: those commands have not been reverse-engineered, and we do not send guessed bytes to a wheel. With no connection there are no buttons at all. Each widget now has its own configuration — long press → "Configure" — and the three opacity presets have been replaced by a 20–100 % slider with a feathered backdrop.

  • In wheel settings the slider sits on what is written in the wheel, and the preset is shown on a line of its own. A selected but unapplied preset used to silently override the wheel's readings on every slider, and the "Write" button went dead exactly when you pulled the slider back to your own value. The three numbers are now named separately — "on the wheel", "new value", "in the preset" — and the draft clears once the wheel confirms the write, and when you leave the screen.

  • On LeaperKim, the pedal angle_trim was shown a tenth of a degree closer to level than the wheel actually holds: hundredths of a degree were truncated instead of rounded.

  • The ride map no longer tints the basemap or picks it by the app's theme. The dark theme served near-black tiles with barely visible streets, and there was no making out where you had ridden. The basemap is now always the light muted one, in any theme: a map is there so you recognise the place.

  • The chart metrics you select in ride history are no longer lost. Opening a ride that lacks one of the selected metrics used to erase it from the selection for good, not just for that ride. The selection now lives separately from what is drawn, and survives both switching rides and restarting the app.

  • Metrics that only a charger fills in — target voltage, charging power, charger temperature, the amp-hours and watt-hours put in — are no longer offered for a wheel. You could previously put one on a dashboard tile or build an alert on it that could never fire.

iOS · build 67

  • The home screen widget is rebuilt as a dashboard tile. An arc with the headline metric — "Auto" by default: speed while connected, charge between rides, and it is the connection that switches it, not your speed, so the widget does not rearrange itself at a traffic light. Below it, the reserve bar with the ride's PWM peak, up to four facts chosen from eighteen metrics, and a footer with the wheel's name and how long ago it was seen; the widget's size decides how many slots fit. The speed arc is measured against your wheel's own ceiling, not a generic one. With no connection, speed, PWM, power and current show a dash rather than a zero.

  • The widget is configured from the "Widget" section of app settings. One configuration covers all widgets: configuring each one separately needs iOS 17, and the app supports iOS 16. Buttons are absent for the same reason, and the system draws the widget's backdrop, so there is no opacity slider here either.

  • In wheel settings the slider sits on what is written in the wheel, and the preset is shown on a line of its own. A selected but unapplied preset used to silently override the wheel's readings on every slider, and the "Write" button went dead exactly when you pulled the slider back to your own value. The three numbers are now named separately — "on the wheel", "new value", "in the preset" — and the draft clears once the wheel confirms the write, and when you leave the screen.

  • On LeaperKim, the pedal angle_trim was shown a tenth of a degree closer to level than the wheel actually holds: hundredths of a degree were truncated instead of rounded.

The headline change is that an alert can now speak: the system speech engine says the reading and its value, the phrase can be rewritten and heard in advance, and speech stays silent under a sounding alarm. Conditions gained a "repeat every N" step, without which "trip over one kilometre" fired once per ride. The track on the map is now laid out by the seconds of the ride rather than by satellite fixes, and coloured with the worst of each second — a PWM dip lasting a third of one no longer falls between points. Settings are split into two doors: "Wheel settings" for what is written into the machine, "Settings" for everything that lives on the phone, with a new "Map & GPS" section. Moving rides in and out shows a progress window and can be cancelled, and a single ride exports as a "LoEUC archive".

Android · vc63

  • An alert can speak instead of beeping. The editor has a "How it signals" switch: "Sound" or "Voice". A spoken rule says the reading and its value through the system speech engine — "Speed 60", "Battery 10", "Trip 5" — and always fires once: a phrase that repeats stops being a message. To hear a reading more than once per ride, give its condition a "repeat every N" step.

  • The spoken phrase can be rewritten. The unit is not spoken by default: "sixty" rather than "sixty kilometres per hour" — at 60 km/h that is fifteen extra metres of road; insert "{unit}" if you do want it, and the word agrees with the number on its own. Under the field there is a "How it will sound" line: the whole sentence with its number filled in, and an estimate of how long it takes to say, so you can compare variants.

  • Speech never overlaps a beep. If an alarm is sounding when the rule fires, the phrase waits for it to stop; if an alarm starts mid-phrase, the phrase is cut. A waiting phrase is re-checked and rebuilt from fresh data before it speaks: "Speed 80" does not survive you braking to forty and is never said at all, while "Battery 10" that waited out a long alarm comes out as "Battery 8".

  • Voice needs a rule with one top-level condition: with two branches joined by "OR" there is no telling which one fired and the phrase would name the wrong thing — the switch is unavailable there, and the editor says why. All voice announcements are switched off by a single toggle in the alerts manager; beeps stay. If the phone has no system voice for your language, the editor offers to open the speech settings. Spoken rules are not sent to the watch: a buzz means "something is wrong", and "Trip 5" is not "wrong".

  • Conditions gained a "repeat every N" step. The condition rearms every so many units of the reading, without waiting for it to fall back past the reset value. Without it, "trip over one kilometre" fired once per ride: distance never falls. The step counts in the direction of the comparison, so "battery below fifty, every ten" walks down — 50, 40, 30 — and the editor shows the marks the rule will fire at right under the number.

  • The track on the map is laid out by the seconds of the ride rather than by satellite fixes. Under bridges and between buildings fixes arrive once every hundred metres, and a stretch like that was a single colour all the way through — the instrument had no point inside it at all. Points are placed by the wheel's odometer, so where you braked they sit closer together, and a place on the map now means the same thing as a moment in the recording: what you tapped is what you are shown. Wheels that do not report distance are laid out by time, exactly as before.

  • The colour of each track point is the worst of its second, not the value at its exact mark. Telemetry is written many times a second, and a PWM dip lasting a third of one used to fall between points and colour nothing. The readout line now says so — "in that second".

  • A tap on the track lands where you tapped. On the OSM basemap the app picked not the part of the line nearest your finger but the first one within tolerance: the point drifted along the track towards the start of the ride, and the readings with it. A tap that misses the track now clears the selection.

  • The three-dot menu has two distinct doors. "Wheel settings", under WHEEL, opens what gets written into the machine itself: hardware, presets, plugins, the shutdown timer — two taps away now instead of four, and they get changed while riding. "Settings", under APP, is everything else, the part that lives on the phone. The tile used to be called "Wheel settings" while the screen it opened was titled "App settings".

  • App settings gained a "Map & GPS" section: the basemap type, the map provider and track recording moved there out of "Recording & data", which is now simply "Data" — log rate, auto-deletion, battery model. Wear OS moved out of the dashboard menu into "Connection & sensors", next to TPMS: it is another device on the same end of the link.

  • Exporting and importing rides show a progress window — how many rides of how many have moved — and can be cancelled. Cancelling stops at a ride boundary, so the history only ever holds whole rides. Importing the same file again brings the rest across and creates no duplicates, and an interrupted archive deletes itself: it cannot be unpacked anyway, but in the file list it would look finished.

  • A single ride exports as a "LoEUC archive" — the app's own format. GPX drops the telemetry, WheelLog drops everything its columns have no room for; this archive is what our own import reads, so the ride moves to another phone whole, along with the summary the charge forecast is built from. In selection mode the same archive exports the rides you have ticked — "Export selected".

iOS · build 66

  • An alert can speak instead of beeping. The editor has a "How it signals" switch: "Sound" or "Voice". A spoken rule says the reading and its value through the system speech engine — "Speed 60", "Battery 10", "Trip 5" — and always fires once: a phrase that repeats stops being a message. To hear a reading more than once per ride, give its condition a "repeat every N" step.

  • The spoken phrase can be rewritten. The unit is not spoken by default: "sixty" rather than "sixty kilometres per hour" — at 60 km/h that is fifteen extra metres of road; insert "{unit}" if you do want it, and the word agrees with the number on its own. Under the field there is a "How it will sound" line: the whole sentence with its number filled in, and an estimate of how long it takes to say, so you can compare variants.

  • Speech never overlaps a beep. If an alarm is sounding when the rule fires, the phrase waits for it to stop; if an alarm starts mid-phrase, the phrase is cut. A waiting phrase is re-checked and rebuilt from fresh data before it speaks: "Speed 80" does not survive you braking to forty and is never said at all, while "Battery 10" that waited out a long alarm comes out as "Battery 8".

  • Voice needs a rule with one top-level condition: with two branches joined by "OR" there is no telling which one fired and the phrase would name the wrong thing — the switch is unavailable there, and the editor says why. All voice announcements are switched off by a single toggle in the alerts manager; beeps stay. If the phone has no system voice for your language, the editor offers to open the speech settings.

  • Conditions gained a "repeat every N" step. The condition rearms every so many units of the reading, without waiting for it to fall back past the reset value. Without it, "trip over one kilometre" fired once per ride: distance never falls. The step counts in the direction of the comparison, so "battery below fifty, every ten" walks down — 50, 40, 30 — and the editor shows the marks the rule will fire at right under the number.

  • The track on the map is laid out by the seconds of the ride rather than by satellite fixes. Under bridges and between buildings fixes arrive once every hundred metres, and a stretch like that was a single colour all the way through — the instrument had no point inside it at all. Points are placed by the wheel's odometer, so where you braked they sit closer together, and a place on the map now means the same thing as a moment in the recording: what you tapped is what you are shown. Wheels that do not report distance are laid out by time, exactly as before.

  • The colour of each track point is the worst of its second, not the value at its exact mark. Telemetry is written many times a second, and a PWM dip lasting a third of one used to fall between points and colour nothing. The readout line now says so — "in that second".

  • The dashboard menu has two distinct doors. "Wheel settings" opens what gets written into the machine itself: hardware, presets, plugins, the shutdown timer — two taps away now instead of four. "Settings" is everything else, the part that lives on the phone. The item used to be called "Wheel settings" while the screen it opened was titled "App settings".

  • App settings gained a "Map & GPS" section: the basemap type, the map provider and track recording moved there out of "Recording & data", which is now simply "Data" — log rate, auto-deletion, battery model.

  • Exporting and importing rides show a progress window — how many rides of how many have moved — and can be cancelled. Cancelling stops at a ride boundary, so the history only ever holds whole rides. Importing the same file again brings the rest across and creates no duplicates, and an interrupted archive deletes itself: it cannot be unpacked anyway, but in the file list it would look finished.

  • A single ride exports from the ride card as a "LoEUC archive" — the app's own format. GPX drops the telemetry, WheelLog drops everything its columns have no room for; this archive is what our own import reads, so the ride moves to another phone whole, along with the summary the charge forecast is built from. The ride card also gained the WheelLog CSV export, which used to be available only from the ride list.

The headline changes are up to six dashboard layouts per wheel switched with a swipe, a wheel model you pick by hand instead of the app guessing from voltage, and a rewritten charge and range: the gauge no longer climbs while you ride, no longer jumps mid-ride and no longer sits flat at zero, and the range tile no longer doubles after a stop. The track now bridges GPS gaps with a dashed stretch of the right length, the learned battery model travels with your ride export, and a wheel's history survives reinstalling the app. On Android the home-screen widget finally draws, and there is now training on past rides and an auto-light that switches off by pedal angle.

Android · vc62

  • Multiple dashboards. You can set up to six layouts per wheel — city, speed and diagnostics, for example. Dashboards are switched with a horizontal swipe, a strip under the header shows which one is open and how many there are, and the name pops up briefly when you switch. While you only have one, a swipe offers to add a second; management is a tap on the strip or the dashboard menu item "Dashboards": copy the current one, rename, delete.

  • The wheel model is picked by hand: dashboard menu → "Model". The pick is stored for that wheel and survives a reconnect, and if the app recognised the model on its own it says so. Until the model is picked or recognised, charge from voltage is not shown at all: the series-cell count cannot be derived from a single voltage even in principle — a full 36S reads 151.2 V and so does a 40S at 3.78 V per cell. The app used to guess here, and on a T4 a sag below 90 V moved the divider from 24S to 20S: charge read 100 % on a half-empty pack for the rest of the ride. If you set the Begode voltage class by hand, it keeps working until you pick a model.

  • The charge reading no longer rises while the pack is being drained. Voltage recovers on its own after a load, and the curve read that as charge coming in: on a Lynx the gauge climbed eight points after a hard acceleration while another 46 Wh were still leaving the pack. The mid-ride jump of a couple of dozen points is gone too — a single frame of braking regen used to be enough to declare the pack full, and current into the pack now counts as charging only if it holds for half a minute.

  • Zero no longer arrives early: fitting the curve could drag its bottom node down to zero, and at 3.93 V per cell a rider saw a flat zero for thirty-four minutes straight. The opposite case is fixed as well — a full pack is now recognised after charging: a Sherman L pack rests at 4.1655 V per cell and missed the old threshold by four millivolts, so the gauge under-reported by roughly a quarter for the whole next cycle.

  • The range estimate no longer balloons out of nowhere: the tile showed 107 km where it had been 44 before a braking stop. Frames recorded standing still are left out of consumption — that energy is lights and electronics, not the price of a kilometre; consumption is measured over 250-metre chunks instead of four-metre odometer ticks, and smoothed over three kilometres instead of half of one.

  • "Train on past rides" in the "Battery model" section: the app walks the rides you have already recorded and builds the pack's curve from them instead of waiting for new ones. It shows the list first — which rides qualify, how many kilometres that is, and why the rest did not. Rides recorded by older versions, where braking was logged as spending, rides without a current sign, and rides too short are left out; merged rides are cut at their seams, and telemetry from a standstill is skipped.

  • The learned battery model and the ride summaries now go into the export and come back on import. Moving to a new phone no longer wipes everything the app had learned about the pack.

  • A wheel's history follows it when it turns up under a new address — for example when the archive came from an iPhone, where the wheel carries a different identifier. Rides, summaries, the pack model and the speed calibration are reattached to the wheel you are on. The rule is deliberately narrow: the transfer happens only when exactly one foreign identifier in the database carries that name.

  • Importing a ride archive no longer crashes the app. An eleven-megabyte archive imported while connected to the wheel crashed it three times in a row: the import held the database busy for the whole time it spent reading the file, and telemetry from the ride in progress could not get through. The import is also faster — 0.21 seconds against 13.3 on thirty-two thousand rows — and a failed import or export now shows a line about it instead of quitting.

  • The track goes through GPS gaps. Where there were no satellites but the wheel kept riding, a dashed stretch is drawn of exactly the length the odometer counted, labelled "no GPS" with the distance: on one rider's ride the ends of the gap were 4.1 km apart while 6.3 km had actually been covered. The metric ribbon hatches the same stretches, and the ride card breaks the line where the map breaks it — it used to show seven breaks the map does not have.

  • An odometer reset mid-ride no longer collapses the track. The wheel's counter went to zero at the twenty-first minute, and opening a ninety-minute ride showed an almost empty strip with the cursor stuck at the very start, even though every fix and all the telemetry were recorded. The distance on the ride card was right all along — only the map disagreed.

  • The home-screen widget finally draws. In release builds it showed a spinner forever — debug builds never had the problem. Along with it: a real card in the widget picker instead of that same spinner, stretching to five columns, ride totals on the wide tier (average and maximum speed, PWM peak, average cell), a headlight button that sends the same command as the one on the dashboard, and a choice of background — "Tile", "Frosted", "Clear". The horn button next to it is silent for now: no firmware we have taken apart has a horn command, and guessed bytes must not be sent to a wheel.

  • Auto-light can now switch off by pedal angle — a third way alongside speed and the timer. It looks at how the wheel is standing rather than whether it moves: picked up by the handle, laid on its side, set on its stand. LeaperKim ("Pedal angle") and Inmotion report the angle; on other wheels the option is unavailable, and an unknown angle never turns the headlight off.

  • An alarm button in the quick-actions dock: arm and disarm, with the toggle following the wheel's answer rather than your tap. The button appears only when the alarm plugin is actually running on the wheel — that is, on patched firmware. This was proven on the firmware emulation bench and has not been confirmed on a live wheel.

  • LeaperKim firmware is checked before it is flashed: an exact match against a known build, the structural soundness of the image, and a warning when the wheel calls itself something other than what the file says. A file that is not firmware at all is refused. And the upload now goes only to the characteristic the official app uses: the fallback branches could have sent the image somewhere else — in the worst case after the wheel had already been taken into the bootloader.

  • In the threshold editor, tapping the value finally brings up the keyboard. The field opened and drew a cursor, but there was nothing to type with.

  • "Search forever" in the connection settings: one reconnection attempt every thirty seconds with no time limit, until you disconnect yourself. Rarer than the normal search — otherwise the phone is flat by morning.

  • An "OSM" basemap — the plain OpenStreetMap map. Its labels and small streets are more detailed than the muted basemaps', and it is never dimmed in either theme: you choose it for what it is.

  • The "save current" button in the dashboard library no longer piles up identical entries. It invented a new name on every tap, so ten taps produced ten copies of one dashboard; now it greys out and tells you the name this dashboard is already saved under.

  • Pinned band side metrics can be reordered: in the band settings, drag a row by the handle on the left.

iOS · build 65

  • Multiple dashboards. You can set up to six layouts per wheel — city, speed and diagnostics, for example. Dashboards are switched with a horizontal swipe, a strip under the header shows which one is open and how many there are, and the name pops up briefly when you switch. While you only have one, a swipe offers to add a second; management is a tap on the strip or the dashboard menu item "Dashboards": copy the current one, rename, delete.

  • The wheel model is picked by hand: dashboard menu → "Model". The pick is stored for that wheel and survives a reconnect, and if the app recognised the model on its own it says so. Until the model is picked or recognised, charge from voltage is not shown at all: the series-cell count cannot be derived from a single voltage even in principle — a full 36S reads 151.2 V and so does a 40S at 3.78 V per cell. The app used to guess here, and on a T4 a sag below 90 V moved the divider from 24S to 20S: charge read 100 % on a half-empty pack for the rest of the ride. If you set the Begode voltage class by hand, it keeps working until you pick a model.

  • The charge reading no longer rises while the pack is being drained. Voltage recovers on its own after a load, and the curve read that as charge coming in: on a Lynx the gauge climbed eight points after a hard acceleration while another 46 Wh were still leaving the pack. The mid-ride jump of a couple of dozen points is gone too — a single frame of braking regen used to be enough to declare the pack full, and current into the pack now counts as charging only if it holds for half a minute.

  • Zero no longer arrives early: fitting the curve could drag its bottom node down to zero, and at 3.93 V per cell a rider saw a flat zero for thirty-four minutes straight. The opposite case is fixed as well — a full pack is now recognised after charging: a Sherman L pack rests at 4.1655 V per cell and missed the old threshold by four millivolts, so the gauge under-reported by roughly a quarter for the whole next cycle.

  • The range estimate no longer balloons out of nowhere: the tile showed 107 km where it had been 44 before a braking stop. Frames recorded standing still are left out of consumption — that energy is lights and electronics, not the price of a kilometre; consumption is measured over 250-metre chunks instead of four-metre odometer ticks, and smoothed over three kilometres instead of half of one.

  • The learned battery model and the ride summaries now go into the export and come back on import. Moving to a new phone no longer wipes everything the app had learned about the pack.

  • A wheel's history survives reinstalling the app. iOS hands out an identifier tied to the pair "this wheel, this installation": an App Store update keeps it, deleting and reinstalling does not, and everything the app remembered about the wheel stayed behind under the old key. Rides, summaries, the pack model and the speed calibration are now moved onto the wheel you are on. The rule is deliberately narrow: the transfer happens only when exactly one foreign identifier in the database carries that name.

  • The track goes through GPS gaps. Where there were no satellites but the wheel kept riding, a dashed stretch is drawn of exactly the length the odometer counted, labelled "no GPS" with the distance: on one rider's ride the ends of the gap were 4.1 km apart while 6.3 km had actually been covered. The ride card and the preview in the ride list break the line where the map breaks it.

  • An odometer reset mid-ride no longer collapses the track. The wheel's counter went to zero at the twenty-first minute, and opening a ninety-minute ride showed an almost empty strip with the cursor stuck at the very start, even though every fix and all the telemetry were recorded. The distance on the ride card was right all along — only the map disagreed.

  • The "save current" button in the dashboard library no longer piles up identical entries. It invented a new name on every tap, so ten taps produced ten copies of one dashboard; now it greys out and tells you the name this dashboard is already saved under.

  • Pinned band side metrics can be reordered: in the band settings, drag a row by the handle on the left.

The headline changes are a wheel-status widget for the home screen, a new GPS Speed metric with a calibration that learns your wheel's speed offset over several rides, and settings reorganised into seven sections instead of two flat lists. Also: a floating quick-actions dock, a session peak reset, typing threshold values by hand, and a working headlight on the larger Shermans.

Android · vc61

  • A wheel-status widget for the home screen. Between rides it shows charge, remaining range, the wheel's name and how long ago it was last in touch; while riding, speed, PWM and trip distance. Two sizes, styled from the app's own theme. The widget never talks to the wheel itself — it shows what the app last recorded, refreshed every fifteen seconds while the app is connected.

  • A floating quick-actions dock. Instead of a bar taking up space below the header for the whole ride, a single dot sits in a corner: tap it to open the dock, and it closes after an action or thirty seconds since the last touch. The dot snaps to any of the four corners and remembers where you put it.

  • The header menu moved from a list to a grid of tiles grouped by what the action affects: wheel, screen, app, connection. Twelve items read about twice as fast. Powering the wheel off moved from the dock into the menu, behind a confirmation.

  • "Reset peaks" clears the current session's maximums: peak markers on the instruments and dials stretched to fit a record go back to normal. The ride record itself is untouched — the history keeps what actually happened.

  • A new GPS Speed metric you can put on the dashboard. It comes from the phone's receiver, and the speed correction is not applied to it. When the signal is lost the metric goes blank instead of freezing on the last value, and an alert built on it will not fire at that moment — that is deliberate.

  • GPS speed calibration. The app compares the wheel's reading with GPS speed during steady riding and, once it has at least three rides and a tight enough spread, offers a correction and shows what it is based on. You apply it, not the app: automatic correction would quietly spoil both readings and alerts in places where coordinates are spoofed.

  • The speed correction is now remembered per wheel — different wheels have different odometry. A correction you already set is kept and becomes the default.

  • A speed dial maximum of your own. By default the app picks the ceiling itself and stretches the dial when you go faster; a ceiling you set is hard — the needle stops at the edge, so its position always means the same thing. In "Auto" you can see the number the app chose.

  • In the threshold editor you can tap the value and type it: a stepper with a step of five will never land on 87. The minus and plus buttons stay, a comma works as well as a period, hold time is entered in seconds, and invalid input silently reverts to the previous value.

  • Settings are grouped into seven sections — Speed and accuracy, Alerts, Wheel, Automation, Recording and data, Connection and sensors, Diagnostics — instead of being ordered by control type. Each section prints its current values underneath its name, so the settings root reads as a summary. The "Extras" screen is gone, and the alert manager opens directly from its tile.

  • The average cell voltage now appears on wheels that never send individual cells: the pack voltage is divided by the known number of cells in series. Such a wheel still has no per-cell minimum and maximum, but the familiar "volts per cell" figure is there.

  • On the ride map and on the metric ribbon the cursor lands on the point under your finger, not on the nearest satellite fix. Fixes are written every two seconds — some twenty metres of riding — while the readings come from the ride record, so they exist even where there is no fix.

  • The headlight works again on Sherman, Sherman Max, Sherman S and Abrams. Their firmware understands only the text light command — there is no binary one in it at all — so the headlight button was silent on these wheels; the app now checks which wheel answered and sends the form that firmware parses. The mapping was read out of the firmware images and has not yet been confirmed on a live wheel. The label on wheels with a single light button was also fixed — it said "High beam" on wheels that have none.

  • "Firmware update" used to appear on every wheel, including KingSong and the charger, though exactly one format is actually supported. It now exists only on LeaperKim wheels, and the screen states plainly that flashing has only been proven on the Lynx S: other wheels of the brand use the same file format, but entry into the bootloader was never verified, and the Sherman L additionally runs a different microcontroller.

  • A firmware plugins screen for LeaperKim: installing add-ons into the wheel's second flash bank, with three ready-made plugins bundled, plus slot and memory state. Only a wheel running patched firmware accepts them — a stock wheel ignores the frames — and this has so far been proven on a firmware emulator, not on a live wheel.

iOS · build 62

  • A wheel-status widget for the home screen. Between rides it shows charge, remaining range, the wheel's name and how long ago it was last in touch; while riding, speed, PWM and trip distance. Two sizes, styled from the app's own theme. The widget never talks to the wheel itself — it shows what the app last recorded, refreshed every fifteen seconds while the app is connected.

  • A floating quick-actions dock. Instead of a bar below the header, a single dot sits in a corner: tap it to open the dock, and it closes after an action or thirty seconds since the last touch. The dot snaps to any of the four corners and remembers where you put it. Powering the wheel off moved from the dock into the menu, behind a confirmation.

  • "Reset peaks" clears the current session's maximums: peak markers on the instruments and dials stretched to fit a record go back to normal. The ride record itself is untouched — the history keeps what actually happened.

  • A new GPS Speed metric you can put on the dashboard. It comes from the phone's receiver, and the speed correction is not applied to it. When the signal is lost the metric goes blank instead of freezing on the last value, and an alert built on it will not fire at that moment — that is deliberate.

  • GPS speed calibration. The app compares the wheel's reading with GPS speed during steady riding and, once it has at least three rides and a tight enough spread, offers a correction and shows what it is based on. You apply it, not the app: automatic correction would quietly spoil both readings and alerts in places where coordinates are spoofed.

  • The speed correction is now remembered per wheel — different wheels have different odometry. A correction you already set is kept and becomes the default.

  • A speed dial maximum of your own. By default the app picks the ceiling itself and stretches the dial when you go faster; a ceiling you set is hard — the needle stops at the edge, so its position always means the same thing. In "Auto" you can see the number the app chose.

  • In the threshold editor you can tap the value and type it: a stepper with a step of five will never land on 87. The minus and plus buttons stay, a comma works as well as a period, hold time is entered in seconds, and invalid input silently reverts to the previous value.

  • Settings are grouped into seven sections — Speed and accuracy, Alerts, Wheel, Automation, Recording and data, Connection and sensors, Diagnostics — instead of being ordered by control type. Each section prints its current values underneath its name, so the settings root reads as a summary. The "Extras" screen is gone, and the alert manager opens directly from its tile.

  • The average cell voltage now appears on wheels that never send individual cells: the pack voltage is divided by the known number of cells in series. Such a wheel still has no per-cell minimum and maximum, but the familiar "volts per cell" figure is there.

  • On the ride map and on the metric ribbon the cursor lands on the point under your finger, not on the nearest satellite fix. Fixes are written every two seconds — some twenty metres of riding — while the readings come from the ride record, so they exist even where there is no fix.

  • The headlight works again on Sherman, Sherman Max, Sherman S and Abrams. Their firmware understands only the text light command — there is no binary one in it at all — so the headlight button was silent on these wheels; the app now sends the form that the answering wheel's firmware parses. The mapping was read out of the firmware images and has not yet been confirmed on a live wheel.

  • The battery tabs on the BMS screen only switched about one tap in twenty. The switcher was rebuilt and now responds to every tap, and the screen itself is a normal push, with the system back arrow and an edge swipe.

  • Going back from an open ride returns to the ride list instead of jumping straight to the dashboard.

  • The second lead metric of the band is now saved: a twin speedometer no longer quietly became a single one after restarting the app.

  • Winding temperature is now shown on iPhone, and LeaperKim wheels also show motor temperature — the shared engine decoded both, but the screen never displayed them.

The ride map stops jumping out from under your finger: its own zoom buttons, a fallback base map instead of an API-key notice, and a track you can hit without aiming. Plus an honest light-theme switch, readable peak labels on iPhone, and a wheel opened from the garage that remembers its metrics offline.

Android · vc60

  • The dashboard map no longer jumps out from under your finger: the track is framed once, when it first appears, and after that the camera is yours.

  • Your own "+" and "−" buttons next to "Fit track", both on the ride screen and on the dashboard map tile.

  • The base map no longer arrives with "API KEY REQUIRED" written across it: the app checks CARTO itself once an hour and switches to Esri Gray Canvas when it is refused — Esri has its own zoom ceiling of z16.

  • Map settings let you pick the base map by hand: "Auto", CARTO or Esri. Attribution now follows the chosen source and has appeared on the dashboard tile, where there was none.

  • The track can be hit with a finger: the tap zone grew to 56 dp on both OSM and Google — a tap on the track scrubs the ride ribbon.

  • The ribbon cursor is visible straight away: before you touch it, a dimmed bar sits at the leading metric's peak — the very place the numbers beside it come from.

  • The light theme and the black background no longer argue: pick light and black goes away, pick black and the theme moves to dark. Before, the switch said "Light" while the screen stayed black.

  • The tile preview in the editor shows the colour the metric will actually get on the dashboard, not the family colour.

iOS · build 58

  • Peak labels on the ride map are readable again: the numbers no longer come out black, and every peak is labelled instead of just one — when peaks land almost on the same spot, the labels stack.

  • The track can be hit with a finger: the tap zone is 56 pt, the same as on Android.

  • The ribbon cursor is back in place — it used to drift past the edge — and it is visible before you touch it: a dimmed bar at the leading metric's peak.

  • A wheel opened from the garage remembers its metrics: tiles, band metrics and presets can be set up with no connection, using the set recorded in that wheel's last ride.

  • The endless "Waiting for telemetry…" spinner on a disconnected wheel is replaced by "Wheel not connected", and the panel no longer swallows taps.

  • The dual-arc gauge is no longer squashed on narrow screens: it gets its own width and sits higher in the band.

  • Light mode set in the system turns off the black background, and black is no longer offered in the palette while the system is light.

  • Tile colour: all ten swatches instead of six, plus a custom colour through the system picker — a colour chosen on Android is now visible on iPhone too. On a composite tile the dead palette is replaced by a hint: the colour is picked on the metric's own tile.

The ride track screen has been rewritten: the route is coloured by a reading in the same colours and thresholds the dashboard uses, a second reading is carried by line thickness, and under the map the same track is straightened into lanes with one shared cursor and every threshold breach lined up in a row. The track has also stopped lying: points logged after the ride ended, receiver jumps and distance counted from those points no longer spoil the route. The dashboard gains "Cluster: speedometer" — two readings on one ribbon in two tracks — and the Pinned band screen has been rebuilt. A wheel in the garage now opens without connecting, the phone screen stays awake while the app is open, and predicted charge and range no longer break on a bad learned curve or a long descent. Android additionally gains LeaperKim firmware updates and motor and coil temperature tiles.

Android · vc59

  • The ride track screen has been rewritten. The route is coloured by a reading you choose, in the same colours and thresholds as the dashboard: the hue says which reading it is, the saturation how loaded the stretch was, and red means exactly one thing — your threshold fired. A second reading is carried by line thickness, so speed by colour and PWM by thickness read off one route. Under the map sits the same track straightened out along the distance: one lane per chosen reading, one cursor across all of them, and every threshold breach lined up as notches. Readings are picked with chips at the bottom, up to four at once, and a tap walks a chip around the circle: off → lane → colour → thickness. Start, finish and the peak of every chosen reading are marked with their values. The colour scale is stretched over the ride itself, so colours are comparable within a ride but not between rides.

  • The track has stopped lying. Points logged after the ride ended no longer reach the route: on one rider's ride there were 216 of them out of 474, the last one 44 minutes later, and the way home in a pocket was drawn onto the route. A receiver jump is no longer joined by a straight line across half the city — the wheel's own speed is a witness independent of the satellites, and a fix the wheel does not confirm is either dropped or left as a break. Single stray points no longer blow up the zoom: the frame came out 13 × 4.8 km where the route occupies 1.7 × 1.8. Distance is taken from the wheel instead of being summed over the points: the map showed 5.74 km where the wheel had done 12.4.

  • The ride card takes the same track as the map. It used to build the route from the raw log itself, so the map showed an honest route while the card still had the way home in a pocket drawn onto it.

  • A new instrument, "Cluster: speedometer" — two readings on one ribbon in two tracks: the outer one for the lead, the inner one for its companion. There will be no third: the instrument is built for exactly a pair. The peak over the ride is marked by a caret on the arc. The mode is available both to an ordinary tile and to the lead cell of the pinned band, where it needs height L and a second metric.

  • The "Pinned band" screen has been rebuilt: it now talks about what the band is made of — the lead cell with its slots, the side readings one row each, the height — and the catalogue of readings opens per slot. Three full-size catalogues in a row used not to fit into two and a half screens of scrolling, and the second metric hid exactly in the middle. Now the screen fits whole.

  • A wheel in the garage opens without connecting — the wheel menu gained "Open without connecting". The layout, auto volume and auto light are app settings rather than writes to the wheel, so they can be edited while the wheel sits switched off; a needless connection would only drain it. Tapping the row still means "let's ride". The rename dialog has become a menu of actions at the same time, with the name edited as a second step.

  • Tiles no longer vanish from the layout. The reading picker was seeded with whatever the wheel reports right now, and saving rebuilt the layout out of what was shown — a reading that stopped arriving took its tile away on the first visit, even though nobody had unticked it.

  • The screen stays awake while the app is open. An instrument is looked at, not touched, and the system timeout dimmed the display exactly when the readings were needed. Send the app to the background and the phone sleeps as usual; no permissions are involved.

  • Predicted charge and predicted range are steadier. A badly stitched discharge curve stretched the whole 0–100 scale over a narrow band of voltage, where hundredths of a volt were worth tens of points — such a curve is now rejected and the fallback per-cell table takes over. The remaining range no longer disappears on a long descent, where consumption goes negative, and no longer produces numbers like 2325 km: it is divided by the lowest consumption a wheel with a rider can physically ride at.

  • Begode without a smart BMS: the number of cells in series is taken from the model catalogue instead of being guessed from voltage. It cannot be derived from voltage alone — a 36S and a 40S at 3.78 V per cell both read 151.2 V — and the charge percentage and the range prediction disagreed with each other. Both now work from the same pack. A model the catalogue does not list is unaffected, and the manual voltage-class picker is untouched.

  • LeaperKim firmware update, as its own entry in the wheel menu. The app parses the firmware file, shows the version, size and checksum, requires the wheel to be tilted (as the manufacturer's own app does) and asks again before the first byte goes out; the command sequence repeats the official one, and the upload was tried on a real Lynx-S. Writing the flash is irreversible and there are no guarantees here: if the firmware does not take, only the recovery mode of the manufacturer's app can bring the wheel back.

  • New tiles, "Motor temperature" and "Coil temperature", for LeaperKim. Stock firmware does not fill these fields — the frame carries placeholders there — so the tiles are offered only to a wheel that actually reports them, which means a patched firmware. The values were read off a real wheel: 23.80 °C motor and 30.00 °C coil.

  • In the LeaperKim diagnostics, "Export values" now hands over the whole stream: every record of every packet with its own timestamp, around 500 Hz instead of the previous ~6, and each record says which values the wheel sent and which the predictor filled in. The old export was too coarse to study sensor behaviour.

iOS · build 57

  • The ride track screen has been rewritten. The route is coloured by a reading you choose, in the same colours and thresholds as the dashboard: the hue says which reading it is, the saturation how loaded the stretch was, and red means exactly one thing — your threshold fired. A second reading is carried by line thickness, so speed by colour and PWM by thickness read off one route. Under the map sits the same track straightened out along the distance: one lane per chosen reading, one cursor across all of them, and every threshold breach lined up as notches. Readings are picked with chips at the bottom, up to four at once, and a tap walks a chip around the circle: off → lane → colour → thickness. Start, finish and the peak of every chosen reading are marked with their values. The colour scale is stretched over the ride itself, so colours are comparable within a ride but not between rides.

  • The track has stopped lying. Points logged after the ride ended no longer reach the route: on one rider's ride there were 216 of them out of 474, the last one 44 minutes later, and the way home in a pocket was drawn onto the route. A receiver jump is no longer joined by a straight line across half the city — the wheel's own speed is a witness independent of the satellites, and a fix the wheel does not confirm is either dropped or left as a break. Single stray points no longer blow up the zoom. Distance is taken from the wheel instead of being summed over the points: the map showed 5.74 km where the wheel had done 12.4.

  • A new instrument, "Cluster: speedometer" — two readings on one ribbon in two tracks: the outer one for the lead, the inner one for its companion. There will be no third: the instrument is built for exactly a pair. The peak over the ride is marked by a caret on the arc, larger than the usual one. The geometry numbers are the same as on Android — it is one and the same instrument.

  • The pinned band settings gained a slot for a second metric: a pair assembled at height L turns the lead cell into the two-track speedometer, and choosing the same metric again removes it. The second reading was added to the row of links to the metric screens too — without it the lower ring's screen could not be opened at all.

  • A wheel opens without connecting: swipe the wheel's row for "Settings". That also closes a cruder hole — tapping a wheel that was not on the air used to do nothing at all. A tap still means "let's ride", and the offline view closes when you leave the dashboard and on any connection.

  • The screen stays awake while the app is open. An instrument is looked at, not touched, and the system timeout dimmed the display exactly when the readings were needed. Send the app to the background and the phone sleeps as usual; this is not background work.

  • Predicted charge and predicted range are steadier. A badly stitched discharge curve stretched the whole 0–100 scale over a narrow band of voltage, where hundredths of a volt were worth tens of points — such a curve is now rejected and the fallback per-cell table takes over. The remaining range no longer disappears on a long descent, where consumption goes negative, and no longer produces numbers like 2325 km: it is divided by the lowest consumption a wheel with a rider can physically ride at.

  • Begode without a smart BMS: the number of cells in series is taken from the model catalogue instead of being guessed from voltage. It cannot be derived from voltage alone — a 36S and a 40S at 3.78 V per cell both read 151.2 V — and the charge percentage and the range prediction disagreed with each other. Both now work from the same pack. A model the catalogue does not list is unaffected.

  • Consumption per kilometre for a ride is now worked out from the watt-hours spent and the distance covered. In a merged ride the counter resets at the seam between pieces, so the last snapshot described only the last leg: riders saw the consumption of an evening stretch where they expected the figure for the day.

  • The "⋯" menu on the home screen no longer closes by itself. The screen's one-second tick fired while the system was tracking a finger too, and the menu collapsed under your hand.

The Wear OS watch has stopped being a screen for the phone: it finds the wheel itself, connects to it, shows telemetry, vibrates on alerts and records the ride while the phone stays at home. The dashboard gains predicted charge and predicted range — the app builds a model of your own pack and takes the voltage sag out, so the percentage no longer dives when you accelerate. Your dashboard can now be published to the catalog on the site straight from the app, and braking has stopped counting as consumption, so the energy figures are honest. On iPhone, the crash after the wheel dropped out is fixed and the dashboard is noticeably smoother; Android gains a Cars section that reads a BMW over OBD.

Android · vc58

  • The Wear OS watch is now a wheel client in its own right. It scans for the wheel, connects to it, shows telemetry, vibrates on alerts and records the ride, then hands the ride to the phone for the shared history — a ride recorded by the watch is marked as such. A wheel holds one connection at a time, so the phone has the last word: if it is nearby and holding the wheel, the watch stays a companion; with no phone around, the watch rides on its own.

  • Three commands are available from the wrist: the light, the auto light and shutting the wheel down with a two-second hold. Only the ones your wheel actually supports are shown, and shutdown is the only one behind a hold, so a stray tap cannot switch the wheel off under the rider. Alerts and the metric layout arrive from the phone with the Sync button; if you have never synced, standalone mode runs one built-in alert — PWM above 80%.

  • What the watch records without the phone is chosen on the phone, in the watch settings: totals only, telemetry every half second, or telemetry together with a GPS track from the watch. The level travels to the watch with the rest of the sync.

  • Syncing does not need Google services: when the Data Layer does not work, the watch fetches its configuration and hands over rides over plain BLE. The watch settings on the phone say whether the watch can see the phone, and offer the missing Bluetooth permission right there.

  • The watch face has one main reading and three slots around it, and what goes in them is chosen on the watch itself. Scrolling by crown and bezel is off by default: inside a sleeve it moved the screen on its own. In companion mode the watch shows the same set of readings as it does standalone.

  • The watch APK is now published on the site alongside the phone build. That is the only way to get it if you installed the phone app from an APK: Wear OS will not deliver the watch half to a sideloaded phone app.

  • New tiles: "Predicted charge" and "Predicted range". The percentage a wheel reports is derived from voltage, and voltage sags under load — the app measures your pack's internal resistance from your own riding, works out the voltage with no load, and cross-checks it against the watt-hours that actually left the pack. You add the tiles yourself; they replace nothing. Accuracy grows with mileage, and for a model the built-in catalogue does not list, predicted range takes a while to appear — while there is nothing to work the capacity out from, it stays blank. Additional features gains a "Battery model" screen where the curve is visible and can be reset without touching your rides.

  • Braking no longer counts as consumption. Both engines took the current as a magnitude, so energy returned by regeneration was integrated as energy spent: on a real 20,000-frame Begode ride that overstated consumption by 47%. The sign is now taken against the direction of travel rather than the direction of power flow. PWM and phase current still read as magnitudes, deliberately.

  • LeaperKim Sherman-S: a fully charged wheel reported 15%. It was missing from the model table, so its 24S pack was taken for a 30S one. The curve for the whole 24S Sherman family was rebuilt at the same time: it physically could not express more than 53% before, and the lower half of the pack read at roughly half its true charge.

  • An alert can now be built on battery temperature — the hottest battery reading the wheel reports, because a battery alert is an overheat warning and the coldest pack cannot raise one. Readings a wheel does not have are gone from the editor at the same time: no Begode measures pack temperature in any frame, so the app stopped offering an alert on it that could never fire.

  • Your dashboard preset can be published to the catalog on the site — a "To catalog" item next to "Copy link". Publishing is deliberately separate from sharing: a link goes to one person, the catalog is seen by everyone. A dashboard that differs from one already in the catalog only by its colours is refused, with a message saying so, and taking your preset back off the catalog goes the same way. So that a preset has an owner, the app silently creates a guest account; the recovery key is shown on the "Account" screen in the home menu, where you can also restore from a key or revoke the local session.

  • Preset links now open on loeuc.pro as well as loeuc.ru, and without "https://" too — browsers hide it, and text copied out of an address bar used to be rejected.

  • When a pasted link does not open, the app says which of the three things went wrong: the clipboard does not hold a preset link, the site is unreachable, or the code no longer names a preset. All three used to answer "no preset in the clipboard", which sent riders looking in the wrong place.

  • The ride duration tile prints a duration instead of raw milliseconds: half an hour of riding showed as 1834000.0.

  • Ride charts drop single-frame spikes on readings that physically cannot jump in one frame — voltage, temperatures, charge. A corrupt frame from the wheel drew a spike on flat ground. Current, power and PWM are left alone: their spikes are real.

  • A new "Cars" section in the garage reads a BMW through a Bluetooth OBD adapter. It shows the VIN, the list of modules, live readings and faults, and the section appears only if an OBD adapter is paired with the phone. Where the limits are: the standard OBD-II readings, the VIN and the module inventory were checked on a live car, while the BMW-specific sensor decodes come from the manufacturer's own app and are not hardware-confirmed field by field. The code reference book is too large for the store build, so faults appear as bare codes.

iOS · build 56

  • New tiles: "Predicted charge" and "Predicted range". The percentage a wheel reports is derived from voltage, and voltage sags under load — the app measures your pack's internal resistance from your own riding, works out the voltage with no load, and cross-checks it against the watt-hours that actually left the pack. You add the tiles yourself; they replace nothing. Accuracy grows with mileage, and for a model the built-in catalogue does not list, predicted range takes a while to appear — while there is nothing to work the capacity out from, it stays blank. Additional features gains a "Battery model" screen where the curve is visible and can be reset without touching your rides.

  • Braking no longer counts as consumption. Both engines took the current as a magnitude, so energy returned by regeneration was integrated as energy spent: on a real 20,000-frame Begode ride that overstated consumption by 47%. The sign is now taken against the direction of travel rather than the direction of power flow. PWM and phase current still read as magnitudes, deliberately.

  • LeaperKim Sherman-S: a fully charged wheel reported 15%. It was missing from the model table, so its 24S pack was taken for a 30S one. The curve for the whole 24S Sherman family was rebuilt at the same time: it physically could not express more than 53% before, and the lower half of the pack read at roughly half its true charge.

  • An alert can now be built on battery temperature — the hottest battery reading the wheel reports, because a battery alert is an overheat warning and the coldest pack cannot raise one. Readings a wheel does not have are gone from the editor at the same time: no Begode measures pack temperature in any frame, so the app stopped offering an alert on it that could never fire.

  • Your dashboard preset can be published to the catalog on the site — a "To catalog" item next to "Copy link". Publishing is deliberately separate from sharing: a link goes to one person, the catalog is seen by everyone. Taking your preset back off the catalog goes the same way. So that a preset has an owner, the app silently creates a guest account; the recovery key is shown on the "Account" screen in the home menu, where you can also restore from a key or revoke the local session.

  • Preset links now open on loeuc.pro as well as loeuc.ru, and without "https://" too. A loeuc.pro link finally raises the app instead of falling through to Safari.

  • The app no longer crashes after the wheel drops out. When the reconnect window expired, a reading with no value took the app down — on TestFlight build 49 it happened a few minutes after the link was lost, often in the background, and the rider saw nothing but a crash report.

  • The dashboard is noticeably smoother. The header menu was being rebuilt ten times a second — a long list now scrolls properly instead of sliding over itself; the add-metric screen, opened above a live dashboard, no longer recomputes the whole list on every frame; and tile curves redraw three times a second instead of ten, while values, colours and breached thresholds stay at the old rate.

  • Ride charts drop single-frame spikes on readings that physically cannot jump in one frame — voltage, temperatures, charge. A corrupt frame from the wheel drew a spike on flat ground. Current, power and PWM are left alone: their spikes are real.

  • The Apple Watch icon was redrawn: it was a copy of the phone one, and a near-black background did not read as a circle on a black watch face. The mark is unchanged, the relationship is inverted — cyan background, dark wheel.

A tile's chart no longer follows the last few minutes: the window covers the whole span of the ride plus the alert threshold with headroom, so the limit line sits inside the chart instead of being pinned to its edge. The PWM alarm card has left the first settings screen — the way into the alerts manager takes its place, and the alarm is edited there along with every other alert. Appearance gains a tile border colour and a chart bed you can turn off, while iPhone gets fixes for the battery drain from auto volume, for charger readings, and for the pinned band on narrow screens.

Android · vc52

  • A tile's chart is built on the whole ride rather than the last few minutes: the window covers the entire ride span and clears the alert threshold with headroom. The limit line now lies inside the chart, and the same curve height means the same thing at the start of a ride and at its end.

  • A bipolar scale gained a second caret: acceleration and regeneration for current, acceleration and braking for the rate of change. The second one appears only if the ride actually crossed zero.

  • The PWM alarm card with its slider is gone from the first settings screen; the way into the alerts manager takes its place. The alarm itself is untouched: its threshold, conditions, priority and beep pattern are edited where all the others are, and nothing needs reconfiguring.

  • The PWM limit on the watch is read from your enabled alerts instead of the old card: if you built your own PWM alert, the watch shows that threshold.

  • The percentages in auto volume are loudness as you hear it, not a position on the system slider — the low end no longer means near silence. The curve is the same on Android and iPhone, so one setting sounds the same on both.

  • An alert bound to a specific wheel shows up again on the reading's screen and on tile scales. Before, the app contradicted itself: the alert sounded while the screen said no thresholds were assigned.

  • The first row of the pinned band's settings is a list of the metrics already in it — colour, form and thresholds are edited straight away, without hunting for the same metric in the grid.

  • Appearance: the tile border can take its own colour — six palette colours and a custom one you pick in full — and the chart bed can be turned off, letting the curve lie straight on the tile. A breached threshold never gives its border colour up: that one reports state.

  • The appearance sheet no longer jumps under your finger or closes itself while you scroll it.

  • Your wheel is always listed in the garage, even when it goes quiet in the air — tapping it connects by the saved address. Before, the card disappeared entirely after a manual disconnect.

  • Going back from the dashboard to the garage no longer pulls you straight back to the dashboard. The link holds and the ride continues, but reconnecting is your call.

  • The dashboard header shows the name you gave the wheel in the garage, not the factory name from the air.

  • InMotion: the "Fall angle" tile no longer shows the live lean — InMotion has no such setting at all. The lean itself stays, as pitch, and is now filled in on older firmware too.

  • Pedal stiffness leads the wheel settings screen on every brand — it is what riders open that screen for most often.

iOS · build 50

  • A tile's chart is built on the whole ride rather than the last few minutes: the window covers the entire ride span and clears the alert threshold with headroom. The limit line now lies inside the chart, and the same curve height means the same thing at the start of a ride and at its end.

  • A bipolar scale gained a second caret: acceleration and regeneration for current, acceleration and braking for the rate of change. The second one appears only if the ride actually crossed zero.

  • The PWM alarm toggle and its threshold slider are gone from settings; the way into the alerts manager takes their place. The alarm itself is untouched: its threshold, conditions, priority and beep pattern are edited where all the others are.

  • The PWM limit on Apple Watch is read from your enabled alerts: if you built your own PWM alert, the watch shows that threshold.

  • Auto volume no longer drains the battery: it stopped querying the audio system on every packet from the wheel and writes the volume only when the target actually changes. A rider on an iPhone X measured 15–20% of battery per hour with it on.

  • The percentages in auto volume are loudness as you hear it, not a position on the system slider — the low end no longer means near silence. The curve is the same on iPhone and Android.

  • An alert bound to a specific wheel shows up again on the reading's screen and on tile scales. Before, the alert sounded while the screen said no thresholds were assigned.

  • HW Smart Charger and SKAT / CAN-Control chargers finally show their readings on the dashboard: their frames were being dropped by a plausibility check written for wheels, so the dashboard sat in dashes on a live link.

  • A reading's screen opened from a ride no longer closes itself a moment after it appears.

  • Ride charts and the reading's screen draw noticeably faster on older iPhones.

  • The pinned band fits on narrow screens such as the iPhone 8 again. The side readings are taller — the margin scale under the value is fully visible — and the speedometer grew along with the band.

  • The chart bed in a tile grows with the dashboard scale instead of staying a narrow strip at every size.

  • The first row of the pinned band's settings is a list of the metrics already in it — colour, form and thresholds are edited straight away, without hunting for the same metric in the grid.

  • Appearance: the tile border can take its own colour — a palette for a quick pick and the system picker with its eyedropper — and the chart bed can be turned off, letting the curve lie straight on the tile. The chosen border colour applies at once, without a restart, and a breached threshold never gives its border colour up.

  • TPMS tire pressure sensor: the binding is no longer offered again after every connection, and the sensor is listened to for the whole ride after the app is restored by the system.

  • Dashboard presets: importing the same one twice no longer creates duplicates; a preset opened from a link appears in the library right away and is no longer wiped by a later file import.

  • The dashboard menu button responds across its whole area, not only on the dots themselves.

  • Pedal stiffness leads the wheel settings screen on every brand — it is what riders open that screen for most often.

The app now listens to wireless TPMS tire pressure sensors: pressure, tire temperature and the sensor's own battery show up right on the dashboard. On iPhone the new alert rule screens have landed and their sound has been rebuilt — a ramping alert finally merges into a continuous tone, and the PWM alarm became an ordinary rule carrying your own settings. Android and iPhone now offer the same set of readings: 73 on iPhone instead of 41.

Android · vc51

  • Support for wireless TPMS tire pressure sensors (iBar-compatible). The app spots a sensor next to your wheel and offers to bind it; pressure, tire temperature and the sensor's battery appear as dashboard tiles and charts. The binding can be replaced, and a hidden sensor brought back, in wheel settings. The sensor packets were decoded from the sensor's own official app and checked against a simulator — this has not been confirmed against a real sensor yet.

  • "Disconnect" now really disconnects: the app no longer reconnects to the same wheel by itself until you pick it by hand.

  • An alert rule combined as "all at once" no longer loses its conditions after a restart — such a rule used to come back empty and stop firing.

  • One rule with broken settings no longer holds back the others: only that rule is skipped.

  • Readings in the add menu and in ride metrics are grouped by meaning rather than by colour: the pressure sensor now has its own TPMS section, and pressure no longer sits among the voltages.

  • A reading's colour belongs to the reading itself: it survives deleting the tile and is picked up by the instrument band.

  • Under the band's lead speedometer you can see how far the value went during the ride — the maximum or the minimum, whichever suits the reading.

  • The band height is chosen in the band settings (the drag-the-bottom-edge gesture is gone), and at the tallest height the speedometer becomes the lead instrument straight away.

  • Distances are labelled in kilometres and the shutdown timer in seconds.

iOS · build 49

  • New alerts screens: a rule reads as a phrase, the threshold is set on the reading's own scale, and the whole sound lives on one screen — repeat mode, tone, length and the shape of the ramp curve. The separate "Templates" tab is gone; threshold presets stay next to the threshold.

  • Alert sound rebuilt on a single engine: a ramping alert speeds up smoothly and merges into a continuous tone instead of beeping once a second, and the alert voice goes quiet when the link drops and when dump playback is paused.

  • The PWM alarm is now an ordinary built-in rule. Your previous threshold and on/off state carry over once at startup, and the PWM card in settings edits that very alert again — before it looked like it worked but changed nothing.

  • The editor gained the ramp settings: pitch rise, the point where the sound merges into a continuous tone, and the curve shape. Previously the curve shape and these settings were reset on every save.

  • The app no longer crashes when connecting to a wheel because of a saved rule with inverted ramp settings.

  • Switches in the alert editor respond to the first tap — with live telemetry they used to need two or three taps, and the choice snapped back.

  • An alert rule combined as "all at once" no longer loses its conditions after a restart.

  • 73 readings instead of 41: everything the app was already decoding is now on screen — the full set of InMotion readings and LeaperKim pedal angle.

  • Labels fixed: InMotion pitch is no longer called "Fall angle", and pack and max cell temperatures are no longer shown as "Min/Max battery temp"; temperatures got their degree sign back, and the duplicate "Motor current", which showed the same number as phase current, is gone.

  • Dashboard presets: a library, a report of what a preset will change before you apply it, and four ways to share — link, clipboard, QR and file. A preset link from loeuc.ru now opens straight in the app.

  • Support for wireless TPMS tire pressure sensors, same as on Android: the sensor offers itself, pressure, tire temperature and sensor battery go to the dashboard, and the binding is replaced in wheel settings. The packets were decoded from the sensor's own official app and checked against a simulator, not yet confirmed against a real sensor.

  • A wheel switched on before the app no longer makes you wait: the list of found wheels fills up right away instead of after eight seconds of a blind connection attempt.

  • Dashboard edits made after the wheel disconnected or fell asleep are now saved instead of rolling back on the next launch.

  • A reading's colour stays with the reading and survives deleting its tile; the picker is grouped by meaning, including its own TPMS section.

  • The band height is chosen in the band settings (the drag-the-bottom-edge gesture is gone), and at the tallest height the speedometer becomes the lead instrument straight away.

On Android the accelerating alarm no longer just speeds up: the pitch climbs with the beep, and at the top of the curve the beeps merge into one continuous tone. And exactly one alert sounds at a time — the one that matters, with no mush of beeps taking turns. The PWM alarm became an alert like any other, at the highest priority of all, and the rule screen was rebuilt: a phrase instead of a builder, the threshold on a scale, the sound on one screen. A dashboard you have set up can now be handed to your second wheel or to another rider — by link, QR code, clipboard or file. There are also your own accent and backgrounds, a Dashboard metrics screen, a diagnostic log, swiping between BMS batteries, and chargers with readings of their own. On iPhone: cell and charger metrics, the ride's min and max under the scale, and sending a crash report.

Android · vc50

  • The accelerating alarm sounds new. The beep does not just speed up — the pitch climbs with it, and at the top of the curve the beeps merge into one continuous tone. The merge point, how far the pitch rises and the shape of the curve — even, steeper at the top, or steeper at the start — are yours to set, and the Preview the ramp button plays the whole curve from the threshold to the merged tone rather than one pass of the pattern. All sound now runs through a single continuous oscillator: no more clicks between beeps and no more beeps cut off mid-way.

  • Exactly one alert sounds. Alerts of equal importance used to take turns, and what came out was mush instead of a signal. Now, while the one that matters is sounding, the rest stay fully silent and show only on the dashboard. Music ducking, if you turned it on, happens once for the whole alarm instead of on every beep.

  • The PWM alarm became an alert like any other — at the highest priority of all, with its threshold still edited right on its card in the settings. It has no separate sound path any more. The first time the new version starts, its threshold, frequency range and merge-into-tone point are carried over automatically; nothing to reconfigure.

  • The rule screen was rebuilt. The card in the list names the rule by when it fires — as a phrase, not as a set of terms. The threshold got a screen of its own with a scale: the notch is the threshold, the band past it the hysteresis ("auto" if you did not set one), the hatching the dangerous zone; "Hold for over" and "Ramps up to" live there too, and without the latter a ramp on a percentage never reached the merged tone. The sound is on one screen. The Conditions tab is gone, but the templates are not — they sit behind the "From preset" button.

  • Dashboard presets. Menu ☰ → Dashboard presets: the dashboard you have set up is saved and handed to your second wheel or to another rider — by link, clipboard, QR code or file. For the QR, just point the other phone's built-in camera at it; no separate scanner needed. Before it is applied, the app shows an honest report: what lands as it is, what takes the same slot under its own name (your wheel has no such sensor but has a close one — and the tile is labelled with the sensor it actually reads), and what is dropped. Angles and currents are only substituted within one brand. The short link puts the look itself on loeuc.ru and nothing else; with no network the app quietly hands out a long self-contained link that works the same way.

  • The app's look is yours to set: theme, your accent, the app background and the tile background from ten swatches, and any tile can take a custom colour by hue, saturation and brightness. The accent editor was removed from the Share screen — one setting, edited in one place.

  • A new Dashboard metrics screen: readings are grouped, and the selection is confirmed or discarded as a whole rather than one at a time.

  • The ride's minimum and maximum are printed under the scale when there is room for them, and each number stands under its own point on the scale. For readings that only fall over a ride — battery, voltage, cells, range — the peak mark shows the low point rather than the high one: their maximum is known in advance, it is the state at the start.

  • BMS batteries can be swiped through, not just tabbed. On a wheel with four packs the row of tabs ran off the edge, and the last one could only be reached by a gesture nothing on screen mentioned.

  • Chargers now have readings of their own: charge power, charger temperature, the amp-hours and watt-hours delivered, and on the SKAT a target voltage as well. A charger used to fill the wheel's own fields, so its output was labelled "Pack voltage" and "Controller temperature". On the HW Smart Charger the field names had been read wrong — they are now matched against the vendor's own app, and the frame layout is confirmed against a real charger. One caveat: both captures were taken with the output closed, so its current and delivered Ah/Wh have only ever been seen as zeros.

  • A diagnostic log. Turn it on in the extra features, repeat the ride and send the file: it shows what the app actually did — when it connected to the wheel and when it lost the link, what the automatic light decided at every change of speed, why the automatic volume was or was not applied, and the moment the system pushed the app into the background. It is plain text and holds no raw wheel data; the log is off by default and does not affect performance.

  • Fixed: the charger settings screen opened onto nothing; the acceleration curve shape you picked was silently lost on save and the linear one played instead; an alarm caught by a dropped connection kept howling through every reconnection attempt; an alert enabled in the manager switched itself off when the wheel connected; the switch on the PWM card stopped doing anything if the alert itself had been deleted; a second condition you had added was erased on every move of the threshold slider; the rule screen ran under the status bar and the navigation bar.

  • Fixed on the instruments: LeaperKim's pedal angle is back — it is read from telemetry and was never a wheel setting; the min/max row was clipped on a small grid; the metric manager's header ran under the clock; labels named one sensor by another's name — the MOSFET temperature was called "Controller" and roll was called "Pedal angle"; a reading with no thresholds was drawn dimmed although there is nothing to dim; the detail chart's axis dipped below zero; the speedometer in a pinned band below height L now says plainly that it needs height L instead of being silently swapped out; the "Keep in the pinned band" switch was removed from the tile settings — the band's contents are edited on the band's own screen; the packet rate in the header no longer freezes at its old value when the stream goes quiet.

iOS · build 48

  • A tile's value and unit now sit on one baseline. The harder a large number was squeezed, the further the unit slid down — on a big zero it was plain to the eye.

  • Cell metrics arrived: minimum, maximum, average and spread — the same four as on Android. When the BMS does not answer they honestly sit in the "no data" section.

  • Chargers now have readings of their own: charge power, charger temperature, the amp-hours and watt-hours delivered, and on the SKAT a target voltage as well. A charger used to fill the wheel's own fields. On the HW Smart Charger the field names are fixed and matched against the vendor's own app, and the frame layout is confirmed against a real charger; its current and delivered figures have only ever been seen as zeros — both captures were taken with the output closed.

  • The ride's minimum and maximum are printed under the scale, and for readings that only fall over a ride the mark shows the low point rather than the high one — the same as on Android.

  • Merging rides is back in the list: it was lost in the move to the new history screens.

  • The "Keep in the pinned band" switch was removed from the tile settings — the band's contents are edited on the band's own screen.

  • After a crash, a "Send crash report" item appears in the home screen menu: the error's name, its reason and the call stack. What reaches the developer through TestFlight is usually not enough to tell what happened, and this file is. The item only shows up if a crash actually occurred, and the report holds no personal data or routes.

The iPhone app got the same new look and the same shape Android got the day before: the home screen became a garage with a wheel card, the dashboard was redrawn from the tile up to the header, a pinned band sits above the grid, related readings share a single tile, every reading has a screen of its own, and the ride history split into four screens. The dashboard now opens on a tap, and leaving it no longer drops the connection. Android is unchanged this time.

iOS · build 45

  • The home screen became a garage. It holds as many of your wheels as you like, each with its own state, and at the top sits the card of the one the app is about to connect to. While the link comes up, a rail runs under the name through its stages: scanning, found, linking, streaming. Once telemetry arrives, the card grows into numbers — battery, voltage and odometer appear in it on their own. Other devices moved to the bottom, and the Search and Stop buttons are gone: the scan runs the whole time the screen is open.

  • The dashboard opens when you tap the card, instead of replacing the screen by itself. The app used to jump to the instruments the moment it connected, so nobody ever saw the card. Now the screen changes only when you ask for it — after an automatic connection too.

  • Back from the dashboard no longer drops the connection. It returns to the wheel card, the wheel stays connected, and you can look into your rides or the garage without losing it. Disconnecting is now its own item in the three-dot menu, a deliberate act.

  • The instruments were redrawn from end to end. A tile has one order of elements and a bed of constant height, colour saturation shows how close a reading is to its limit, and your own thresholds from enabled alerts stand as notches on the scale. The ride's maximum is marked by a small triangle under the scale, the same as on Android. The header was rebuilt: the wheel name with a live-link dot and the measured packet rate, a battery pill filled to its level, and the menu.

  • A band can be pinned above the grid: the lead reading large, and up to three side readings with their own margin to the threshold. Its height switches on the band itself, its contents in its settings, and it is remembered per wheel.

  • Related readings share a single tile. Three temperatures, currents, cells — they split one tile into rows, charts or columns, and a shared unit moves up into the tile's header. How many rows fit, the tile works out from its own size.

  • Every reading now has a screen of its own: the value now, the minimum, average and maximum, the margin to the nearest threshold, and a chart with a cursor. Below it the list of thresholds, each leading to its alert. The Tile button opens the tile's own settings — size, look, colour and contents. When the tile is a composite one, a switcher sits at the top: the chart of any reading in it.

  • The look is yours to set: your accent, your app background and your tile background, from ten tested swatches. The accent editor was removed from the Share screen — one setting, edited in one place.

  • The ride history split into four screens instead of one. The list groups rides by day with a monthly total, a search, and a route silhouette on every record. Then comes the single ride with its totals, the track on the map coloured by speed, and its profiles; the screen of every recorded reading with sparklines, where a checkmark marks the ones that go on the chart; and the charts screen — tracks with their own scales, or an overlay on one axis, with a shared cursor and a viewport below.

  • Fixed: after a restart the app could stop connecting to the wheel and wait silently forever. A connection attempt now has a deadline, and the scan starts as soon as the radio is ready. If the wheel did not answer, the app says so instead of showing "connecting" without end.

  • Fixed: a reading marked for the chart did not appear on it until you left the ride and came back; an alert enabled on a reading's screen did not show up on the tile, and one disabled in the manager still looked enabled on the reading's screen; a composite tile spilled out of its cell in the grid; the chosen tile background was not applied; the ride map was rendered again on every opening.

The Android app got both a new look and a new shape: the home screen became a garage that holds as many of your wheels as you like, the dashboard was redrawn from the tile up to the header, a pinned band now sits above the grid, related readings share a single tile, every reading has a screen of its own with its thresholds, and the ride history split into four screens instead of one browser. The iPhone app is unchanged this time.

Android · vc48

  • The home screen became a garage. The app used to remember one wheel, the last one; now it can hold as many as you like — each sits in "My wheels" with its own charge, voltage and odometer, and the one it connects to is whichever is actually on the air. A long press gives a wheel a name you recognise or drops it from the garage; the factory name stays with the rides, settings and alerts either way. Demo mode is still there: on the first run it is in plain sight, later it lives in the menu.

  • The dashboard was redrawn completely. A tile now has one order of elements and an instrument bed of fixed height, so neighbouring tiles no longer dance against each other. Colour saturation shows how close a reading has come to its limit, a crossed threshold tints the tile's border, and the scales and the arc carry your own thresholds — taken from the alerts you have enabled — as notches, with the ride's peak as a mark of its own. The header was rebuilt: the wheel's name with a live-link dot and the measured packet rate, the charge pill, and three icon buttons.

  • A band can be pinned above the grid. It stays put while the grid scrolls: a lead reading as large text, a speedometer or a scale, with up to three side readings, each showing its margin to its threshold. The height switches on the band itself, the contents in the ☰ menu → "Pinned band", and both are remembered per wheel.

  • Related readings share one tile. Three temperatures, the battery currents, the cells — all of them can live in a single tile, a unit shared by all of them moves into its header, and the rows are drawn as bars, as charts or as columns. How many fit is worked out by the tile from its own size and look, and the add menu only offers the ones that still do.

  • Every reading now has a screen of its own: the value now, the minimum, average and maximum of the ride, the margin to the nearest threshold, and a chart with a cursor. Below it is the list of thresholds — each leads into its alert, and "Add threshold" opens a new alert with the reading already filled in. The "Tile" button on the same screen opens the tile itself: size, look and colour, its contents, and whether it is pinned in the band. The looks are shown as thumbnails, and one that does not fit the current size says plainly what it is short of.

  • The ride history split into four screens instead of one browser. The list groups rides by day with the totals for the period and a search; every card carries the outline of its route and a severity dot — how close that ride came to your own thresholds. Then come a single ride with its totals, its track on the map coloured by a reading of your choice and an elevation profile; a screen of every reading recorded, each with a sparkline; and a charts screen — tracks with their own scales, or overlaid on one axis, sharing a cursor, with the viewport at the bottom.

  • Records shorter than three hundred metres no longer clutter the list: they are collected into a row of their own that expands on a tap.

  • Screens carry a back arrow in their header again — the system gesture keeps working exactly as before.

  • LeaperKim and Lynx: the lateral angle is live now, readings that were really wheel settings are gone from the metric list, and the MOS temperature is findable in the grouped pickers.

  • Wheel settings moved out of the header into the menu — the header keeps adding a reading, BMS and the menu.

  • Fixed: on a fresh install the app no longer crashed on its first connection. The foreground service type is now assembled from the permissions you actually granted; without the location permission it simply records no track and connects to the wheel as usual. Decoding InMotion frames from a saved capture is no longer corrupted by unescaping them twice.

A ride that landed in the history as several pieces can now be merged into one, and a pause in the recording no longer becomes a straight line — not on the charts, not on the map, not in the climb total. Ninebot Z is supported, the InMotion V11 gains fuller support with settings you can change from the app, and iOS no longer gets stuck in sessions that connect but never deliver data.

Android · vc45

  • The ride history has a Merge action: select the pieces of one ride and their telemetry and tracks move into the earliest of them. The distance adds up even if the wheel's trip counter reset in between. Only finished, consecutive rides from the same wheel can be merged, and merging cannot be undone.

  • A pause in the recording breaks the line instead of running it across the emptiness — on the charts, on the map track, on the ride card and in the elevation profile. The straight line between pieces counts as neither distance ridden nor height climbed.

  • Charts now carry numbers at their edges: the peak and the low of the visible stretch, each reading in its own colour. A single-reading chart gets a labelled grid at round values instead.

  • InMotion V11: fuller support for the wheel. Settings can now be changed straight from the app — speed limit, pedals, lights, sound, the acceleration and braking assists, wheel lock and the ride modes; after a write the wheel re-reads the block, so the screen shows the value it accepted. The headlight is now a single quick-action button, motor temperature is no longer shown as zero (this wheel has no such sensor), and the settings screen no longer empties itself during a long session. The commands come from the manufacturer's own app and are not fully confirmed on live hardware, and some of them can cut power under your feet — only change those while parked.

  • Ninebot Z (Z6/Z8/Z10): telemetry, both battery packs with their cells, and settings — speed limit, Speed alarm 1–3 with their thresholds, headlight, daytime running and tail lights, LED and its colours, pedal sensitivity, speaker volume and wheel lock. The protocol was built from a description of the byte layout and no part of it has been checked on a real wheel. PWM is not reported by the wheel but computed from speed and voltage, so it is only an estimate of load.

  • SKAT / CAN-Control charger: experimental support.

iOS · build 42

  • The ride history has a Merge action: select the pieces of one ride and their telemetry and tracks move into the earliest of them. The distance adds up even if the wheel's trip counter reset in between. Only finished, consecutive rides from the same wheel can be merged, and merging cannot be undone.

  • A pause in the recording breaks the line instead of running it across the emptiness — on the charts, on the map track, on the ride card and in the elevation profile. The straight line between pieces counts as neither distance ridden nor height climbed.

  • Charts now carry numbers at their edges: the peak and the low of the visible stretch, each reading in its own colour, for up to four readings at once.

  • Fixed: when a wheel exposed several characteristics the app knows, commands could go to the wrong one. On a V11 that left the whole session waiting for telemetry — the characteristic is now picked by priority.

  • Fixed: connecting to a saved wheel now rediscovers its services. Such a session could previously sit "connected" without ever delivering a single packet.

  • Exporting a protocol dump now always produces a file, including the commands sent and the steps the connection got through. A silent session — the one actually worth reading — used to produce no file at all.

  • InMotion V11: fuller support for the wheel. Settings can now be changed straight from the app — speed limit, pedals, lights, sound, the acceleration and braking assists, wheel lock and the ride modes; after a write the wheel re-reads the block, so the screen shows the value it accepted. The headlight is now a single quick-action button, and motor temperature is no longer shown as zero — this wheel has no such sensor. The commands come from the manufacturer's own app and are not fully confirmed on live hardware, and some of them can cut power under your feet — only change those while parked.

  • Ninebot Z (Z6/Z8/Z10): telemetry, both battery packs with their cells, and settings — speed limit, Speed alarm 1–3 with their thresholds, headlight, daytime running and tail lights, LED and its colours, pedal sensitivity, speaker volume and wheel lock. The protocol was built from a description of the byte layout and no part of it has been checked on a real wheel. PWM is not reported by the wheel but computed from speed and voltage, so it is only an estimate of load.

  • SKAT / CAN-Control charger: experimental support, readings only.

Rides now export in WheelLog format, InMotion P6 answers settings reads, and InMotion and LeaperKim telemetry got more reliable.

Android · vc44

  • Ride history now offers “Export Wheellog” — a ride exported in WheelLog format. Rides recorded without a GPS track can be exported too.

  • InMotion P6 now answers settings reads: 22 fields with their names, units, and values were confirmed on a real wheel and cross-checked against the official app.

  • Some P6 settings can now be changed straight from the app. The commands are built from the protocol but have never been written to a real wheel yet, so check the result on the wheel.

  • Quick light, auto-light, and power-off actions now recognize InMotion P6, and the P6 charging voltage is shown at the correct scale.

  • Preliminary telemetry and settings reading was added for InMotion V11. There is still no real V11 capture, so the data is unconfirmed and the settings are view-only.

  • Wheel settings are split into clear sections: ride, speed, lighting, sound, battery, protection, and system. Decoded blocks no longer show rows of raw bytes.

  • LeaperKim Patton no longer shows a jumping battery percentage or phantom currents of hundreds of amps: the app stopped reading the checksum as telemetry and uses the confirmed 30S configuration.

  • Experimental HW Smart Charger support: the write channel and command framing were fixed, and a password prompt with safe per-device storage was added. Receiving telemetry from a real charger is still unconfirmed.

  • The dashboard now has an explicit disconnect action, and ride history keeps the open ride, selected charts, zoom, and selection mode across screen rotation.

  • Layouts behave better on compact screens and with large system text. The device scanner now shows the app version and build number.

  • Built-in example alerts now start switched off on a fresh or reset installation until the rider turns them on.

  • Diagnostic dumps export even from a device that stays silent: outgoing commands are kept and counted.

iOS · build 34

  • Ride history now offers “Export Wheellog” — a ride exported in WheelLog format. Rides recorded without a GPS track can be exported too.

  • InMotion settings reads were fixed: P6 finally answers and shows 22 fields, confirmed on a real wheel and cross-checked against the official app.

  • InMotion telemetry no longer freezes on an empty screen when the wheel misses the first request or its answer is lost — the app resumes polling on its own.

  • The P6 dashboard now fills in the charging voltage and current tiles, and the charging voltage scale was corrected.

  • Wheel settings are split into the same sections as on Android: ride, speed, lighting, sound, battery, protection, and system.

  • Preliminary telemetry and settings reading was added for InMotion V11. There is still no real V11 capture, so the data is unconfirmed and the settings are view-only.

  • LeaperKim Patton no longer shows a jumping battery percentage or phantom currents of hundreds of amps: the app stopped reading the checksum as telemetry and uses the confirmed 30S configuration.

  • Experimental HW Smart Charger support: commands no longer go nowhere, and a password prompt with safe per-device storage was added. Receiving telemetry from a real charger is still unconfirmed.

  • The device scanner now shows the app version and build number.

  • Built-in example alerts now start switched off on a fresh or reset installation until the rider turns them on.

New watch and diagnostic capabilities, additional wheel settings, and connection and audio fixes.

Android · vc43

  • Added experimental HW Smart Charger support with a dedicated dashboard for charge voltage and current, charging state, power, and temperature. Device detection and the BLE protocol have not yet been tested with a real charger.

  • LeaperKim and NOSFET wheel settings now expose Speed Alarm separately from tiltback speed. The command was recovered from firmware and has only been lab-tested so far, without a write to a real wheel.

  • LeaperKim diagnostics now offer a Fast mode that reads all 54 co-stream fields together at 500 Hz, reports packet loss when the BLE link is saturated, and switches to the selected mode more reliably. Exiting requires restarting the wheel.

  • PWM and custom alerts now mix correctly over music. A new setting can duck music for the entire alert without volume pumping between tones.

  • Improved InMotion P6 settings reads immediately after connection by sending requests sequentially, reducing missed short-lived responses.

iOS · build 33

  • Added an Apple Watch companion with one large configurable reading, two additional cards with sparklines, light control, and PWM threshold haptics. Telemetry comes from the iPhone; the watch never connects directly to the wheel.

  • Added experimental HW Smart Charger support with a dedicated dashboard for charge voltage and current, charging state, power, and temperature. Device detection and the BLE protocol have not yet been tested with a real charger.

  • LeaperKim and NOSFET wheel settings now expose Speed Alarm separately from tiltback speed. The command was recovered from firmware and has only been lab-tested so far, without a write to a real wheel.

  • A manual disconnect now prevents lifecycle and Bluetooth-state auto-connect from reconnecting to the wheel. Auto-connect resumes only after an explicit connection.

  • Alert sounds now recover after returning from another app, a system audio interruption, or an iOS media-services reset.