What's new
What changed in Zero Logs Analyzer: pages you can open, numbers you read on them, files you can download, and the controls you use to publish or withhold your own data. Newest first.
Work that changes nothing you can see — parser internals, tests, infrastructure — is recorded in the engineering changelog in the source repository instead. Nothing appears on this page unless it was written for riders deliberately.
You are on version infra-k3s-migration, which is not one of the releases below. Nothing here is marked as running.
3.35.0
18 September 2026Your maintenance page now starts from what the app already knows about your bike — and the timeline draws your own work, not just Zero's plan.
Added— New in this release
- The maintenance page now offers the things the app had already worked out elsewhere and was keeping to itself: a pack change your logs show, and the battery you declared in your bike's profile. It asks you to confirm each one rather than writing it for you.
- It also says which kind of record each one is — something you typed, something confirmed from a dated record, or something your logs show but cannot date. A buyer reading your service history can tell them apart, and should be able to.
- Your own service records are drawn on the schedule timeline. Jobs done on the same day sit together as one mark you can click, and clicking it shows exactly those records below.
- The lane says how many records it drew and how many it could not. A job with no odometer reading is never placed at a guessed position — it is counted and listed instead. Readings are never taken from your logs.
Fixed— Was wrong, now is not
- The timeline had too much empty space and marks too small to hit. The marks are larger, they have a touch-sized target around them, and the top of the chart is now your own history rather than blank axis. With thirty records it stays readable on a phone as well as a desktop.
- A record offered from your logs no longer claims a date it does not have. Zero's downloads repeat old events, so the last time we saw a pack is not the day it came out — the page says so and asks you to correct it.
- The battery you declared in your bike's profile was never offered as something fitted, so a history could say two packs came out and none went in.
- A pack change found in your logs no longer puts the pack's serial number in the record title, where it would have been published on a shared page. The serial is still shown to you, on your own page, where it belongs.
- That same record was being dated from the wrong end of what the logs show — the newest download rather than the first sighting of the new pack, which on a real bike was four years out. It now proposes the earliest date the change can have happened, and still asks you to correct it.
- A shared service history now labels records the app observed in your logs, instead of showing them as if you had typed them yourself.
- Switching between your motorcycles now clears the search, the filter chips and any timeline selection, instead of carrying one bike's filter onto another.
3.34.0
17 September 2026Your warranty, read out of Zero's own manual — and a maintenance page that stops treating a used bike as neglected.
Added— New in this release
- The maintenance page now shows what Zero's manual prints as your warranty: how long the motorcycle is covered, how long the battery is, and — on 2014 to 2016 bikes — the mileage cap that can end the battery term before the years do. It names the manual and page it read, and it says "ends no earlier than" rather than a date, because the clock starts the day the bike was first sold and we only know its model year.
- It also tells you the two things nobody expects: on most model years the pack's outer case is covered for two years while the pack itself is covered for five, and the warranty follows the motorcycle rather than the owner — so it carries over when you buy or sell used, once the transfer form is filed.
- Every service record now carries an icon for what it was, so a long history reads at a glance.
- A public API for third-party devices: anyone building a Zero dongle or app can now send data in with their own key, with scopes and a per-vehicle grant so a key can only ever do what you allowed.
Fixed— Was wrong, now is not
- A bike bought used no longer looks neglected. Services nobody has recorded were being counted from zero, so a motorcycle at 20,000 km was told its 160 km break-in service was 19,840 km overdue — in red, at the top of the list, permanently. Those rows are still shown and still say they are counted from zero, but they are no longer presented as something you have failed to do.
- The page now says when a service is due on the CALENDAR, not only on distance. A yearly service more than two years late was printing how many kilometres remained, which contradicted itself.
- The first two dealer services both read "Dealer service" and nothing else. They now say which service they are, whether they have been recorded, and roughly when your bike passed that reading.
- If you read in miles you were shown some intervals rounded into figures Zero's manual does not print — 1,250 miles appeared as 1k, 3,100 as 3k. You now see Zero's own numbers.
3.33.0
17 September 2026A service book for your motorcycle: what the manual says to do, what you actually did, and a version you can hand to a buyer.
Added— New in this release
- Maintenance is a new section in your dashboard. Record what was done, when, at what reading, what it cost and who did it — against Zero's own schedule for your model, so you can see what is due and what has been done. Every Zero owner manual ends with a blank service-history form; this is that page, with the totals worked out for you.
- Parts can be picked from Zero's own catalogue — 1,010 part numbers and every battery pack — so a line in your history says exactly which part. Anything no catalogue carries, like tyres, a top box or a seat, is typed in beside it and recorded just as well.
- Your bike's own data is read for services you may not have written down. A battery in your garage with an install date, or a hardware change you have already declared, is offered as an entry for you to confirm or dismiss. Nothing is ever added without you, a confirmed entry stays marked as found-in-your-data rather than typed by you, and a dismissed one stays dismissed.
- A shared bike link can now include your service history, if you switch it on. It is meant for a buyer: dates, readings, parts, costs and your notes — never the name of your workshop. What gets published is frozen the moment you create the link, so anything you add or edit afterwards does not appear on it.
- Where the intervals fall in time, not just in kilometres. If your logs carry an odometer we show roughly when your bike passed each service point. Where the logs have a gap we show the range instead of a date, and where there is no odometer at all we say so — most Zero logs do not carry one.
- Your whole service book downloads as a spreadsheet, with everything in it.
- Two new Learn articles: “Zero's service schedule for every model”, with the intervals drawn on a distance axis and the manual page behind each plan, and “what every noise on a Zero means” — squeals, hums and creaks traced to the manuals, including the ones Zero says are normal, and why a Zero's belt is never oiled.
Changed— Different from before
- The AI now knows what you have had done before it suggests maintenance. It was recommending work you had already completed, because it had never been told.
3.32.7
17 September 2026A scary-looking error in our own logs that was never an error.
Fixed— Was wrong, now is not
- Our server logs printed a six-line error report every time a service started, from one library checking the version of another. It was caught and handled the moment it happened and nothing was ever wrong, but it sat directly above the lines that would show a real problem. It no longer prints, and genuine failures from that library still do.
3.32.6
17 September 2026Follow-up to 3.32.5: the AI's thinking room, measured properly.
Fixed— Was wrong, now is not
- The room we give the AI to think before answering was set from a handful of samples. Measured properly against real traffic, the thinking varies about sixfold from one call to the next while the answer stays the same length, so the allowance is now sized above the worst case we actually observed rather than the typical one.
3.32.5
17 September 2026The AI was being cut off mid-thought, and two safety checks were reading the silence as an answer.
Fixed— Was wrong, now is not
- The AI models we use now think before they reply, and that thinking counts against the same length limit as the answer itself. Several checks were given a limit sized for the answer alone, so the model ran out of room and replied with nothing at all — which looked like success. Every AI call now has room to think, and an empty reply is treated as a failure instead of an answer.
- The check that screens notes you write for hidden instructions aimed at the AI was one of those, and an empty reply was being read as approval. It now reads a real verdict, and refuses the note if it cannot get one.
- An AI analysis that took too long was being killed outright, leaving the report stuck on "analysing" forever with nothing to tell you it had failed. It now stops cleanly, marks itself failed and retries.
- We were asking our AI provider for a model that was quietly retired months ago; it was being answered by a different one the whole time. We now ask for what is actually served.
- The riding-style card counted a charge as complete at 95% of full, where the rest of the site uses 99% and can tell "we were not told" apart from "not full".
3.32.4
13 September 2026One more number that could be thrown out by an impossible clock.
Fixed— Was wrong, now is not
- A trip's average speed could be dominated by a single ride whose recorded duration was impossible — the kind the site already sets aside everywhere else. It now uses only the rides whose clocks can be believed, on your own pages and on a trip you shared publicly.
3.32.3
13 September 2026A sweep of the site's own self-checks, and the five things they were missing.
Fixed— Was wrong, now is not
- A trip's "moving" time could include a clock no motorcycle could have produced — on your own pages, on a trip you shared publicly, and in the preview image of that link. Trips now use the believable start-to-end window, the way the rest of the site already did.
- Charge time on the costs page could be thrown out by a single impossible stored duration, which also dragged your cost-per-hour towards zero.
- The charging-sessions view excluded unbelievable sessions from one number on the screen and included them in another, on the same screen.
- Photo, avatar, attachment and route uploads now decode a few at a time instead of all at once, and are rate-limited. Enough simultaneous uploads could previously exhaust the server's memory for everybody.
- The charts on a publicly shared trip now carry the same one-line explanation of what they plot that your own pages have — that page is read by people who were not on the ride and cannot ask.
3.32.2
13 September 2026The new link previews now reach the pages that were still missing them.
Fixed— Was wrong, now is not
- Several Learn pages kept showing the old generic preview after yesterday's change, including every one of the 170 error-code pages. They now show their own card like the rest.
3.32.1
13 September 2026Four things the browser was complaining about.
Fixed— Was wrong, now is not
- The Logs page was repeatedly failing to load the ride and charge sessions it uses to link each log line to a trip. A date was being sent in a form the server read as invalid, four times over, every time you opened the page.
- A tooltip on the Logs page had nothing to anchor to, so it could appear in the wrong place.
- On a bike with a single charge, the charging chart drew the same date five times across the bottom of the graph.
- Some leftover debugging output has been removed; it was writing your report's date range into the server log on every render.
3.32.0
13 September 2026Share a Learn page and the preview finally says which page it is.
Added— New in this release
- Every Learn page now has its own link preview. Paste one into a chat and you get that page's title, what it covers, and the one number it is known for — 170 dash codes and log conditions, 503 torque figures, 406 real log lines, 84 model-year belt specifications. Until now they all shared one generic picture, so four different links looked the same.
- A colour down the left edge says which shelf the page is on, so several links in one conversation are told apart before a word is read.
- Individual error codes and parts subsystems get their own previews too. An error-code link leads with the code itself and is tinted by how serious it is; a parts link leads with how many part numbers that subsystem holds.
Fixed— Was wrong, now is not
- The part-number total this site quotes was 1,041 in four places and is actually 1,010. Corrected everywhere, including the Learn page that republishes it.
3.31.2
13 September 2026Diagrams for the weather Learn page.
Changed— Different from before
- The weather Learn page now has drawings. Five of them: the three ways a ride gets a location and what each one is allowed to do, why the town your bike is kept in only describes short rides, how hours are answered when you name a place beside some of them, the single thing weather may do to a fault report, and your bike's own thermometer against the modelled air.
3.31.1
13 September 2026The Learn page catches up with hourly places.
Changed— Different from before
- The weather Learn page now explains how to describe a ride hour by hour, and what it deliberately will not do: no map, no line drawn between the places, no headwind figure, and no pretending that remembering several places is the same as having recorded the route.
- It also corrects what it says about your privacy. It used to say one map reference per ride leaves this site; when a ride names several places, it is one per place — still rounded to about a kilometre, still never your route and never anything that identifies the motorcycle.
3.31.0
13 September 2026Say where you were hour by hour, and each hour gets its own weather.
Added— New in this release
- A ride that passed through more than one place can now be described hour by hour. Open a ride longer than an hour, and under the weather card there is a row for each hour you were out — say where you were in each, and the reading uses that place for those hours. A coastal town and a mountain pass an hour apart are two different skies, and the temperature range will finally say which hour belonged to which.
- You never type a time. The hours come from the ride itself, so all you do is pick a place beside one of them, and "same as above" fills in the hour after without you searching again.
- Hours you did not place are shown as gaps rather than quietly filled in, and the card says how many of your hours it could describe. A place you named can stand for the hour either side of it, and where that happens the row says so.
Changed— Different from before
- Adding places does not turn a ride into a route. There is no map and no line drawn between the towns, because a line between two pins is a road you may never have ridden — and for the same reason a ride placed this way still shows no headwind figure. Only a recorded GPS track can say which way you were pointing, and the card now says that out loud instead of leaving the space blank.
- A ride placed hour by hour is still your own account of where you were, not a measurement, and it is treated exactly like a single pin everywhere it matters.
- If part of a ride could not be looked up, the card will no longer tell you the air was dry or that the bike had been sitting in the sun. Both of those need the whole ride, and the first of them is what removes the "it was probably just damp" explanation from a fault.
Fixed— Was wrong, now is not
- Rain spanning hours that were never looked up is no longer reported as one long shower. A gap in the hours, or a change of town, now ends a spell — so two brief showers in two places stay two showers rather than becoming one that never happened.
3.30.0
13 September 2026Gusts, humidity, the right clock, and a page explaining the whole thing.
Added— New in this release
- Wind now comes with its gusts. The card shows the strongest hourly wind with that same hour's peak gust beside it, because a steady 18 km/h and an 18 km/h average with 42 km/h gusts are different rides.
- Humidity is shown for the hours you were out. It is also the one weather reading allowed to affect a fault report, and only in one direction: if an isolation fault turns up on a day the air was dry, the "it was probably just damp" explanation is removed from that fault's advice. Wet weather never excuses anything.
- The sun icon is no longer drawn on a cloudy day. The reading for cloud cover is fetched and checked before anything claims the bike was sitting in the sun.
- A ride can be asked again. If you add a GPS track to a ride that already has weather from a pin or from where the bike is kept, press "Look it up again" on the weather card and it is recomputed from the better source.
- A new Learn page, "Weather on your rides", explains why a weather card is blank and the three ways to fix it, what the numbers mean and whose clock they are on, why a long ride gets nothing from the town the bike is kept in, what a shared link does and does not carry, and the things the page will never tell you however much you would like it to.
Fixed— Was wrong, now is not
- The hours on the weather card were in UTC and printed as if they were yours. A trip starting at 18:38 could be captioned "coldest at 06:00, warmest at 14:00" — hours it never covered. Times now show on your own clock, the same one as the ride's start time beside them. A reading stored before this fix is labelled UTC rather than silently shifted.
- The Heading chart could report a direction the ride never went. Averaging compass bearings the ordinary way puts the mean of "just west of north" and "just east of north" at due south; it now averages them as directions, so the figure matches the ride.
3.29.2
13 September 2026The trip page can now show its weather, and every chart says what it is.
Fixed— Was wrong, now is not
- A trip now looks up its own weather. It used to stay blank until you had opened each of its rides one at a time, which almost nobody would do.
- When a trip has no weather yet, the page asks you where it happened instead of showing nothing — and what you pick covers the whole journey, not one leg.
- The Heading chart was misleading in two ways. Its average could point the opposite way to the ride, and the line jumped from one side of the chart to the other every time you passed through north. Figures now read as a compass direction and the line breaks at north instead of drawing a jump that never happened.
- Every chart now carries a line saying what it is plotting. Some were easy to misread: the air temperature on a recording comes from your phone or GPS unit rather than from the bike, and the odometer chart is the bike's own reading rather than a total for that ride.
3.29.1
13 September 2026Two fixes to yesterday's weather, both found by using it.
Fixed— Was wrong, now is not
- Searching for a town now understands the language your browser is set to. Typing "Roma" used to offer you Romania, Spain and Lesotho before the city you meant, and adding the country made it worse rather than better.
- The demo account has a place of its own on the map. It could have shown the place a real rider had told us their motorcycle is kept, which was never anybody's intention.
3.29.0
13 September 2026Tell us once where your bike lives, and your rides get the weather they were ridden in.
Added— New in this release
- Say where your motorcycle is kept, once, on its page — and every short ride that has no GPS track gets the real wind, rain and temperature for the hours you were out. Your logs cannot see any of that, and it is often what explains a ride that drank more than usual.
- A trip now shows the weather across its legs: the temperature range with the time of each end of it, and any rain with the hours it fell. Where part of the journey has no weather, the page says so rather than quietly describing the rest.
- A shared trip link can carry its weather, if you tick it. It is off unless you ask for it, it never publishes the place you told us the bike is kept, and a link you have already handed out cannot start showing weather later.
- Your bike's own thermometer now has the modelled air temperature drawn beside it on the ride charts. When the two disagree by a lot, the bike was standing in the sun rather than the day being hot — which matters, because that reading feeds the range and battery-health estimates.
Changed— Different from before
- The AI reading of a ride is given the weather it was ridden in, and told what it may do with it: wind and rain can explain a thirsty ride, and mild weather can never soften a fault. Weather taken from where the bike is kept is background only — it is never used to judge anything.
- Weather from a declared base is used only for rides under 25 km. A longer ride could have ended anywhere, so we say nothing rather than guess, and the ride page tells you that is why.
Fixed— Was wrong, now is not
- Rides that had been opened without a location were left holding an empty weather record that could never refresh. They are cleared, and they now look up the weather properly once you say where you were.
3.28.0
13 September 2026A second parts shop is back, and a correction we owed it.
Added— New in this release
- A glossary: every term this site uses about Zero hardware and log files, defined once and linked from the pages that rely on it.
Fixed— Was wrong, now is not
- English Electric Motor Co. is listed again, with a correction published on the page. We had said its parts search found nothing, and that was our mistake: the site keeps its OEM parts in a different catalogue from its accessories shop, and every check we ran looked at the wrong one. Its catalogue holds a great many of the part numbers on this site, priced in pounds.
- Bike pages now link straight to the exploded parts diagrams for that model year. That shop cannot be searched by part number from a web address, so the link goes per motorcycle instead, and it is not offered for the bicycles and the scooter its catalogue does not cover.
3.27.0
12 September 2026What your bike is actually made of, and where to buy the piece that wears out.
Added— New in this release
- A component map: which fork, caliper, disc, belt, tyre and motor Zero specified for your exact model year, and how widely each was shared across the range. One rear brake caliper turns out to cover nine model lines from 2014 to 2026, across all three hardware generations.
- A part-number index: 1,010 Zero part numbers across nineteen subsystems, searchable by number, subsystem, model year or the catalogue's own model name, with a link that searches a Zero dealer for each one. It is the only place a part number appears on this site, because Zero's owner manuals print none.
- Your bike's page and the model comparison now list components. The comparison says what actually changed between two model years rather than which one has more parts listed — both bikes have a fork, so a difference in the count would be a fact about the manuals, not about the motorcycles.
- The buying guide gained a ledger of every component, ordered by what putting it right would cost against what the bike is worth. Seven of its twenty-four entries are invisible to every log ever written: we scanned all 363 log files in our corpus and the words "brake pad", "rotor", "caliper", "fork", "bearing" and "belt" appear in none of them.
Changed— Different from before
- Where a part number does not exist, the pages give the measurement instead. Your manual prints the thickness at which to replace a brake pad, per model year, with the page it is printed on — and unlike a dealer catalogue that figure does not go stale.
- Fitment is now shown exactly as the catalogue wrote it and is never widened. A part listed for "2015-2017" answers for 2016 and not for 2018, and a part listed under a platform name is not silently attributed to every bike on that platform.
Fixed— Was wrong, now is not
- An earlier draft of the component map explained a gap in the 2016 FX and FXS entries by saying that manual described those parts vaguely. It does not — page 122 names the fork and the shock in full, and our reading of it had missed them. Fifteen entries have been recovered from the manuals' own text, each one citing the page it came from.
3.26.0
12 September 2026A rider told us our in-browser reader called his Gen2 log a Gen3 one. He was right, and pulling that thread fixed the answers the assistant gives everyone.
Added— New in this release
- Buying used: a condition index. A new guide that reads a bike's own logs against Zero's published limits and says what shape it is in. It refuses to produce a figure when the seller has withheld what it needs, rather than quietly guessing one.
- The log reader now names the model. Drop a file on the decoder and it tells you which motorcycle the VIN describes, next to the reason it classified the log the way it did.
Changed— Different from before
- The assistant reads your bike's own manual. Zero reissues almost the same owner's manual every model year, and answers were being drawn from whichever edition happened to match the wording of your question. A 2023 S asking about winter storage was answered out of the 2019 manual, which gives a different state of charge and the opposite advice about leaving the charger plugged in. Every retrieved passage now comes from a manual that covers your model year.
- Email now comes from this site's own domain, so the sender matches the links the message carries. The messages themselves are unchanged.
- Coverage is stated as months with data, not months elapsed, so a gap in your uploads reads as a gap rather than as a bike that sat still.
Fixed— Was wrong, now is not
- Gen1 and Gen2 logs are no longer mistaken for Gen3. The in-browser reader had no way to tell them apart on a 2019-or-later VIN and produced thousands of plausible-looking rows with no rides in them. It now identifies the log correctly and says plainly that it cannot decode that family, instead of inventing an answer. The same mistake could happen server-side on the first upload for a bike that was not yet in your garage; that is fixed too.
- Four Gen3 telemetry channels were being read from the wrong place, and two temperatures were labelled as the wrong probes — motor and inverter readings were being stored as battery temperatures. Reparsed logs now carry the right values.
- Message text on some Gen3 logs was being decoded as state of charge, producing impossible battery readings.
- A trip nothing measured now reports nothing, not zero kilometres — an absent number and a zero are different claims.
- One corrupt ride window no longer discards a whole upload, and windows no motorcycle could produce are no longer created in the first place.
- Sums over an empty set report nothing instead of zero, in every place they are shown.
- The dashboard no longer serves a stale shell after an update.
- A refusal message that appeared in Italian on an otherwise English page now matches the rest of the page.
3.25.0
5 September 2026What a log actually says, shown rather than described.
Added— New in this release
- A new Learn article, "Anatomy of a Zero Log, Line by Line", shows what is really written inside a log file: real extracts from real bikes, annotated one line at a time, across switching on, riding, charging, standing parked, faults and switching off. It sets the bike computer's log beside the battery's, and the older platform beside the newer one, so you can see what each of them records and what it never records.
- The same article documents a fault that writes no fault line at all: when an onboard charger stops working, the log gains no error — it loses a line it used to write. Every VIN, serial number and firmware revision in the published extracts has been removed.
3.24.0
30 August 2026Vector maps, and the last of the security review closed.
Added— New in this release
- Maps are now drawn from vector tiles: crisper at every zoom, labels that stay readable, and a layer switcher with dark, light, Voyager and OpenStreetMap styles. Every overlay — route, stops, charges, photo pins, the hover readout — is unchanged.
- Signing in from a magic link now asks for one click ("Sign me in") instead of happening the moment the page opens, so an email scanner that pre-opens links can no longer use up your link.
Changed— Different from before
- Ten wrong passwords for one account inside fifteen minutes now pause sign-in for that account for a while (the response looks identical to a wrong password, and the reset and magic-link paths keep working).
- Passwords are limited to 72 bytes when set; the sign-in and reset forms say so before you submit. Existing longer passwords keep working.
- Deleting your account now asks for your current password.
- Each account has a storage allowance (5 GB across log files, recordings and photos; 2,000 log files). An upload past it is refused with a clear message instead of failing later.
- The AI assistant treats anything quoted from your logs and notes strictly as data; the ride-context fields (usage, climate, parking) accept only the values the editor offers.
Fixed— Was wrong, now is not
- Deleting your account now really erases what you uploaded: log files, decoded logs, recordings, photos and the bikes in your garage go with it, as the privacy policy promised. Deleting a single log file used to leave the file itself behind on the server; it no longer does.
- Exporting a report as PDF failed for any bike that had ever charged. Fixed.
- Adding a bike by hand from the garage failed with an error while the bike was in fact created; it also failed when the same bike had already been added by a previous owner. Both fixed.
- Ten wrong passwords in a row now say so: the sign-in page tells you how long to wait and points to the magic link, instead of insisting the password is wrong.
- The contact form no longer claims to have sent a message it could not prepare; if the page lost its session it asks you to reload.
- Maps still draw on browsers without WebGL (Lockdown Mode, some corporate builds): they fall back to the classic raster tiles instead of failing the whole page.
- Photos attached to a bike are now stripped of camera metadata and GPS position before they are stored, like trip photos and avatars already were.
- An upload with no sign-in, or one larger than allowed, is refused before a single byte of it is read.
3.23.0
30 August 2026The pages you share with strangers are now safe against the strangers.
Fixed— Was wrong, now is not
- A photo caption on a shared trip was inserted into the map's hover label as markup rather than as text. Captions, stop and charge labels are now always shown literally.
- A busy dashboard could sign you out when the server merely asked it to slow down. Only a real "not signed in" answer signs you out now; a temporary hiccup keeps your session.
Changed— Different from before
- The site framework moved to a current, patched release, the unused image-resizing endpoint is switched off, and the site no longer forwards API calls under its own address — every call goes straight to the API host.
- Links written by the AI assistant open in a new tab with their website shown next to them, and images in its answers are not loaded at all.
3.22.1
30 August 2026The front door gets stricter with strangers and gentler with you.
Fixed— Was wrong, now is not
- Opening a report with many charts could trip the server's per-visitor limits, which failed some charts and could even sign you out. The limits now ignore the browser's preflight requests and leave more headroom, and a trip page with a full gallery of photos loads every photo.
Changed— Different from before
- The server no longer answers requests that name a hostname it does not serve, no longer serves the image-resizing endpoint the site never used, and refuses the automated probes for PHP and credential files before they reach the application.
- Links and sign-in tokens are masked in the server's access log, so a log line can no longer be replayed as a login.
3.22.0
30 August 2026A security review of the whole service: what an upload, a shared bike or a stray photo could cost you, closed before anyone paid it.
Fixed— Was wrong, now is not
- A malformed upload request could freeze the service for everyone for close to a minute, no account needed. The library that reads uploads has been replaced with a version that is immune, and the rest of the dependencies that read your files (image decoding, the sign-in tokens) moved to current, patched releases at the same time.
- A phone recording archive that inflated to gigabytes could exhaust the server. Recordings are now checked for shape before they are opened: implausible compression, absurd column counts and oversized members are refused with a clear message, and honest multi-hour recordings still load.
- Profile avatars are now stripped of camera metadata and GPS position before they are stored, the same way trip photos already were. Transparent PNGs are flattened onto white rather than onto black.
- On a bike that has had more than one owner on this service, ride details, trip pages, photos, events, weather and the AI's history were partly readable across owners. Every one of those now shows each owner only their own data.
- The AI summary of a log no longer reads other people's reports for the same VIN when building its history.
- Names and ticket text written into the notification emails we receive are now rendered as text, never as markup; names are capped at 100 characters and ticket descriptions at 20,000.
- Changing your password now signs out every other device (they appear as inactive on the Sessions page), and the session you keep is a normal one that "Sign out" and "Log out this device" can revoke. A password reset signs out everything.
- Exporting a report as PDF failed with an error when no date range was given, and on bikes with two owners; both fixed.
Changed— Different from before
- Server logs now record the visitor's real address and a request id, and no longer contain email addresses in clear. Log retention on the server was extended so that an incident older than two days can still be investigated.
- Database backups are now readable by root only, are verified end to end before they count, and can be encrypted and copied off the server once that is configured.
- Map tiles no longer carry an "API KEY REQUIRED" watermark: the basemap provider started requiring a key on 26 August and kept serving tiles with the notice burned in.
3.21.1
28 August 2026Telling us an answer did not help now actually reaches us.
Fixed— Was wrong, now is not
- Saying that a reply did not answer your question sent us an email but left no mark in the app, so the ticket looked like any other until it was opened. It now shows as needing attention, including when you change your mind after first saying it helped.
3.21.0
28 August 2026When we answer your ticket, you can now tell us whether the answer actually helped.
Added— New in this release
- Under a reply on one of your tickets there is now a short question: did this answer it? Two buttons, and a box for what is still missing if it did not. Saying it did not reopens the ticket, so the answer goes back in front of us instead of into a statistic.
- The question appears once per reply and goes away when you have answered it, then comes back if we write again. Your earlier answers are kept, so "no, then yes" reads as what it is.
Fixed— Was wrong, now is not
- Replies sent from the contact inbox are recorded with the delivery receipt our mail provider returns, so a message that failed to go out can be told apart from one that went.
3.20.1
28 August 2026If you write to us through the contact form, the answer you get is now kept with your message.
Fixed— Was wrong, now is not
- A reply sent from the contact inbox was recorded but never shown back, so the thread you started looked one-sided from our side and a follow-up began by reconstructing what had already been said. Both halves of the conversation are now kept together.
- Replies are now stamped with the delivery receipt our mail provider returns, so a message that failed to go out can be told apart from one that went.
3.20.0
27 August 2026Your battery health figure was being measured against two different yardsticks on two different screens. Now there is one, and it is the one Zero's own warranty uses.
Changed— Different from before
- The state-of-health percentage on your dashboard and the one on your battery page disagreed by about ten points for the same pack on the same day. The dashboard was measuring against the number printed on the pack's badge — a figure no charge can ever deliver, because it counts the pack's energy at a voltage the cells only touch at the very top — so most people's figure will now read higher, and both screens say which yardstick they used.
- Because that yardstick is also the one Zero's warranty names, the "at or under the 80% line" marker on the model comparison page was flagging almost every used bike. It now compares against the same published figure the warranty text does.
- A health reading above 100% is no longer rounded down to 100. It is not extra health — it means the measurement disagrees with the pack's own specification — so it is shown as it is, in grey, with a line saying it is not a health figure.
Fixed— Was wrong, now is not
- Battery pages failed to load for anyone whose bike had recorded a real charge. Riders with no charges yet saw nothing wrong, which is why it went unreported for two weeks.
- A gap in how the battery configurator checked ownership could let one account reach another rider's bike data. It is closed, and a VIN already registered to somebody else is now refused.
- The ZF15.6 and ZF17.3 pages published the capacity figures from Zero's 2023 manuals. Zero revised both downward by 0.1 kWh from model year 2024, and the pages now carry the current figures with a note about the older ones.
- Every pack page called Zero's second capacity figure "usable". Zero never uses that word: it is the same charge measured at nominal cell voltage rather than peak, and what you can actually draw is lower than both. The pages say so now, and the badge-to-nominal step is no longer explained as a battery-management reserve, which it is not.
- The energy density shown on pack pages was worked out from weights that are the same figure repeated across packs of very different sizes, which pushed one pack to a number no production battery reaches. It is now shown only for the packs whose weight is independently sourced.
- Three places promised the cells' chemistry while the pages themselves explain that Zero does not publish it. The promises are gone; the explanation stays.
3.19.3
25 August 2026The support notice at the bottom of every page stops contradicting itself, and the error-code index finally points somewhere.
Fixed— Was wrong, now is not
- The small "supported logs" badge at the foot of every page said one range of motorcycles while the note it opens said another. They agree now, and the note is more careful about the oldest bikes: they are covered, but they are the least tested of the three generations, and it says so rather than implying otherwise.
- The error-code index listed every code and then left you there. It now explains what reading the log adds to what the dash already told you — when the fault happened, at what battery temperature and charge level, and what the minutes before it looked like — and offers the demo so you can see that before uploading anything.
- One guide's title was long enough that search engines cut it mid-phrase.
- Search engines were being told several sections of the site had not changed in weeks when they had, in some cases by nearly a month. Those dates are now worked out automatically at release time instead of being typed in and forgotten.
3.19.2
25 August 2026Page titles in search results are consistent again, and two battery packs rejoin the menu.
Fixed— Was wrong, now is not
- The name of this site was appended to page titles three different ways, and on many pages not at all — so a list of results from here looked like it came from several different places. There is one form now, and titles that were long enough to be cut off mid-sentence have been shortened to fit.
- Looking up an error code should now show you the code and the fault's name in the result itself. Before, the title was long enough that the fault's name — the half you were actually reading — was the part that got cut.
- Two battery packs, the integrated ZF6.5 and ZF7.2, were missing from the Batteries menu. Their pages existed and worked; there was simply no way to reach them from the menu, which listed twenty of the twenty-two packs.
- A few battery pages printed the same capacity figure twice in their title.
3.19.1
25 August 2026Some coloured backgrounds were missing, and every error code is now listed for search engines.
Fixed— Was wrong, now is not
- A handful of coloured backgrounds were not being drawn at all. On the front page three of the twelve feature icons sat on nothing instead of their colour, and in the log viewer the tinted bands that mark a charging stretch and a riding stretch were missing. The colours were correct everywhere they were written down; they were simply never reaching the page.
- The frequently-asked questions from the Learn index were being attached to all twenty-one Learn pages rather than just the index, which is the kind of thing search engines read as the same content repeated.
Added— New in this release
- All 170 error codes are now listed for search engines, so looking up the number your dash is showing can find the page directly instead of only through the index.
- The owner guides now carry a publication and revision date, so you can see how current one is before trusting it.
3.19.0
25 August 2026A page for every error code your dash can show you, and the catalogue pages finally link to each other.
Added— New in this release
- Every error code now has its own page. Look up the number your dash is showing and you get what it means, what to check, which motorcycles use that code table, and the codes most often seen alongside it. There are 170 of them.
- Those pages answer a question that has caused real confusion: the same number means different things on an older dash and a newer one. Code 01 is a high throttle reading on one and a throttle fault on the other; code 04 is a temperature warning on one and a serious throttle fault on the other. Your model name does not settle it either, because the S, SR, DS and DSR kept their names when they moved to the newer dash in 2024 — so each page shows you both readings and tells you which applies.
- Model pages and battery pages now link to each other. From your motorcycle you can reach the pack it carries, and from a pack you can see every model that takes it. Previously these were two catalogues with nothing joining them.
- The guides now offer a way through to the tool itself, so an article about charging or battery health tells you where to see the same thing in your own logs.
Changed— Different from before
- The one-line summaries that appear under a page's title in search results were rewritten across the site. Many were long enough that Google cut them off and wrote its own instead, which is how a page ends up described by a sentence nobody chose.
- The demo can now open directly on a particular page, so a link about charging costs lands on charging costs rather than the front of the dashboard.
Fixed— Was wrong, now is not
- A page describing how to read a log over a serial cable, and a few others, were summarised in search results by a sentence that trailed off mid-thought. They are written to fit now.
3.18.0
25 August 2026The home page now explains itself, and the footer stops telling Gen3 owners their motorcycle is unsupported.
Fixed— Was wrong, now is not
- The badge at the bottom of every page said Gen2 and Gen3 logs were supported, while the note behind it said Gen3 was not — naming the SR/F, SR/S, DSR/X and the MY22-and-later Cypher III bikes as out of reach. The badge was the right half: those motorcycles have been supported for months, and the note was left over from before that work. If you own one and had concluded this tool was not for you, it is.
- The battery catalogue described the cells in every Zero pack as a specific chemistry from a specific supplier. Zero has never published either, and the page itself says so a few lines further down — so the summary contradicted the article it was summarising. It now states only what the manuals actually give.
- On a phone, the menu called the log decoder a "VIN decoder". They are two different tools and both exist, so the one that reads a raw log now says so, and the VIN decoder has its own entry.
- Sharing a link to most pages produced a preview card with no image — including the front page, which asked for a large picture card and then supplied nothing to put in it. Links unfurl properly again.
Added— New in this release
- Every capability named on the front page now links to the page that explains it. The twelve cards described what the tool does and then went nowhere; ten of them now open the relevant guide, the battery catalogue, the demo or the in-browser decoder. Two still do not, because nothing public explains them yet — rather than send you somewhere useless.
- A "how it works" section on the front page, in three steps, with a real screenshot of a real battery page rather than an illustration. The pack in it is down to 73% of what it held when new, which for its age is close to normal — that is the kind of answer the tool exists to give.
- Six questions and honest answers on the front page: which motorcycles are supported, whether you need a dealer tool, what happens to your log file after you upload it, whether it is free, whether you can try it without an account, and whether Zero Motorcycles makes this. They were all reasonable things to want to know before handing over a file, and none of them was answered where you would look.
- The front page now says plainly that this is an independent project, not affiliated with or endorsed by Zero Motorcycles. It has always been true and was written on the About page; it was missing from the one page most people see first.
Changed— Different from before
- The contact form is now reachable from the footer of every page. It existed, and nothing linked to it.
- The footer gained a row for the parts of the site that had no route from the front page — the model and battery catalogues, the decoder, the range calculator and the changelog. The live service indicators down there are now a link to the status page they summarise.
3.17.2
24 August 2026Housekeeping behind the scenes; nothing on your pages changes.
Fixed— Was wrong, now is not
- A counting error on our own operator pages meant we had been under-reading how many log files riders upload each month — the figure sat at zero regardless of the real number. Nothing you can see, download or share was affected, and no data of yours was touched. It is recorded here because this list is meant to be complete rather than flattering.
3.17.1
24 August 2026The climb figure on a ride stays right after we re-read the recording.
Fixed— Was wrong, now is not
- When a ride's elevation gain was recalculated — because you corrected the clock on your motorcycle, re-processed a phone recording, or attached one to a different ride — the figure was replaced with the climb of the whole recording rather than of that ride. Two legs of one journey could each be credited with the entire day's climbing. Each ride is now measured over its own stretch, so the number stays the one you were shown.
3.17.0
24 August 2026A number that read differently depending on your browser.
Fixed— Was wrong, now is not
- Distances, speeds, weights and temperatures were formatted using your browser's language settings, while every other number on the same page used ours. On an Italian or a German machine that meant a distance reading 1.234 km beside a count reading 1,234 — the same number written two ways, on one screen. They agree everywhere now.
3.16.0
20 August 2026A way to reach the person who builds this, and a page explaining why it exists.
Added— New in this release
- There is now a contact form that works, and works without anyone having to publish an email address. Write to us and you get a confirmation link at the address you typed; the message arrives only after you click it, so nobody can send a message in your name and no address of ours ends up in a spam list.
- A page telling the story behind the tool: the motorcycle it was built for, what went wrong with it, and why reading your own logs turned out to matter.
- A support page, if you would like to put something towards the running costs. It is entirely optional and it buys nothing — no feature, no tier, no extra AI allowance. The tool stays free for everyone either way.
Changed— Different from before
- The About page was rewritten against what the tool actually does today: trips, revocable share links, the tools that need no account, your choice of units, and the export formats. The list of what this is not grew with it, because new features bring new limits.
- We were telling you your data was anonymised before the AI reads it. That was not true, and the page now says what really happens: an uploaded log is analysed automatically, and it goes to the model provider as it is, VIN included.
- Where the legal pages used to print an email address, they now point at the contact form.
3.15.1
20 August 2026A number that was missing from the public bike pages.
Fixed— Was wrong, now is not
- The real-world statistics on the model pages — range, efficiency and average battery health drawn from everyone's uploaded logs — were not being shown at all. They were not missing for want of data; the calculation behind them was failing on every request and the page was quietly leaving the section out.
3.15.0
20 August 2026Rides that your logs recorded but the app never showed you.
Added— New in this release
- The app now recognises a ride from the motorcycle's own movement, not only from the messages its firmware happens to write when you switch on. On our test collection this took the riding we could account for from 91.5% to 99.7% — about 260 rides and 4,500 km that were in the logs and had never appeared anywhere.
- Rides that the app had filed as workshop or diagnostic sessions are now checked against the distance you actually covered first, so a real ride is no longer hidden behind a maintenance label.
- Both of the above apply to logs read from now on, so your existing rides are unchanged until your files are read again. We do that for everyone, and nothing you already have is removed by it.
3.14.1
20 August 2026Small things, mostly about being honest with you.
Fixed— Was wrong, now is not
- The status page was naming the wrong model for the manual search, and its "Manual RAG" light was green whether or not the service behind it was answering. Both now report what is actually true, and the light can go red.
- When you share a bike or a trip, the dialog now tells you how many links you have left before the limit, and if you do hit it we say which limit and what to do.
- Photos of your motorcycle were stored under a filename you chose, which is often a place or a date. They are now stored under an anonymous name.
3.14.0
20 August 2026You can now tell us when a public page is publishing something it should not.
Added— New in this release
- Every public page — a shared trip and a rider profile — now carries a quiet "report this" link. Until now the person who published it was the only one who could take it down, and if you found something abusive there was no way to reach us. You do not need an account, and we do not store anything about you.
Fixed— Was wrong, now is not
- Text you type into your bike notes, your profile and your milestones is now checked the same way your ride notes already were. The older check could be slipped past with an invisible character, on fields that are read by the AI.
- On four motorcycles we had recorded the battery of a bike carrying one Power Pack when they carry two. The battery size was corrected earlier this week; their past rides still showed half the energy they should, and now match.
3.13.1
20 August 2026One more thing a shared link should not do on its own.
Fixed— Was wrong, now is not
- A trip you shared without a map could start showing your route later, if you uploaded a phone recording of that ride afterwards. Links now keep the map they had when you shared them, and one that had none never gains one. Nothing that was already visible has been removed.
3.13.0
20 August 2026Mostly corrections: numbers that were wrong on your pages, and what a link you shared keeps doing after you have forgotten about it.
Fixed— Was wrong, now is not
- Ride time could come out negative. One ride on one motorcycle had a corrupted end time, and that single row was enough to make the whole bike's ride hours read as a large negative number on the timeline, and as a dash on the dashboard. Every total now ignores a clock it cannot believe, and says how many it set aside.
- Energy, efficiency and cost per kilometre were computed against a guessed battery size on more than six thousand rides. They now use the pack your own charges measure. For most bikes the change is a few percent; for six it was much larger, and for one the figures were out by more than double.
- Four FX motorcycles were recorded with the battery of a bike carrying one Power Pack when they carry two, which halved every energy figure derived from it.
- Big numbers in the dashboard tiles were cut off with an ellipsis when the browser window was narrow. A cut number reads as a different number, so the tiles now give the figure room instead of trimming it.
- Revoking a shared link did not take the photos with it. They stayed reachable for up to a week after you revoked. That window is now half an hour.
- A link you had already shared could keep growing. Log lines, faults and charging stops on a published page are now fixed to the files you had uploaded when you shared it, and the activity strip on a bike recap no longer carries your whole ownership history in the page data.
- A shared page told the reader that places near your private locations were hidden. There is no such setting, so the claim is gone rather than reworded.
- The masked motorcycle number on a shared page kept its last four characters, which are the part that identifies your individual bike. It now keeps the part that describes the model and drops the rest. A bike recap shared without anonymising showed the number in full, which it no longer does.
- Published log lines carried the exact time of day, on a page that is otherwise built so nobody can tell when you were somewhere. They now show how far into the ride each line falls.
- Password reset requests were not rate limited, at either layer. They are now.
- The read-only demo account could write notes and start jobs through four routes that skipped the check.
- Charging sessions that spanned days or ended before they began no longer count towards your totals, and are repaired in place where the data allows it.
Added— New in this release
- Trips now show total climb, gathered across the legs that recorded altitude, with barometric drift filtered out rather than counted as hills. Figures already stored were corrected too.
- The decoder that runs in your browser now reads reverse and park records from Gen3 logs, so their battery and temperature readings are no longer discarded.
- We looked again at whether we can tell DC fast charging from AC, this time across every charge in the service rather than our own sample. We still cannot, honestly — the very high power readings turned out to be what the battery said it would accept, not what a charger delivered — so no such label is shown, and there is now a check that will notice the day a real one appears.
3.12.1
18 August 2026Nothing you can see — a maintenance re-run stopped charging riders for it.
Fixed— Was wrong, now is not
- Re-running the analysis across every motorcycle, which is maintenance rather than something you asked for, no longer counts against your own monthly AI allowance.
3.12.0
18 August 2026A page for charging, and a check that can finally say your charger stops short.
Added— New in this release
- A Charging section, where "Charging Costs" used to be, answering one question first: does your charger finish? Under it, every charge you have on record, and the costs page as it was.
- A check that compares your chargers against each other. If one of them habitually stops short of 100% while another finishes, it says so — and it says nothing at all when there is only one charger to look at, because with nothing to compare a low figure is just as likely to be how you charge.
- The faults your motorcycle logged during a charge, grouped by kind and ranked by how many charges each one touched, quoted in the bike's own words.
Fixed— Was wrong, now is not
- A charge that stopped at 32% was shown as "Full Charge". Completion is now read from the state of charge itself, and the shared-bike page no longer overstates how many charges finished — across all bikes it had been claiming 1,539 where the corrected count is 973.
- A charge the app had split into fragments minutes apart was counted as several charges that all stopped short. Adjacent ones now count as one attempt.
- Charging figures are shown as a lower bound, written "≥73%", because the motorcycle stops reporting once the charge current tapers off and the last level it logged is not where it finished.
- "Issues: None" on a charge page was never a measurement — nothing had ever filled that field. It has been replaced with what the logs actually hold.
3.11.1
17 August 2026The version number in the footer now names the release you are actually on.
Fixed— Was wrong, now is not
- The footer could show the previous release rather than the running one, which also made this page mark the wrong entry as current. Everything else in this release is deployment machinery with nothing to see.
3.11.0
17 August 2026This page.
Added— New in this release
- A page listing what changed in each release, reached by clicking the version number in the footer. Each release links to itself, so a particular change can be pointed at directly.
- Every release now says which version you are looking at and marks the one currently running, so it is clear whether a fix described here has reached you yet.
3.10.1
17 August 2026Phones get one navigation bar that works, and console captures get their clock right.
Fixed— Was wrong, now is not
- On a phone, two navigation bars sat on top of each other and the one that won carried fewer links. Timeline, Trips, Charging Costs, the log viewer, My Batteries, Log Files, Bookmarks, Shared Links, Feedback and Profile had no route at all from a phone; there is one bar now, with a drawer behind its last cell holding the rest.
- A fault message printed inside a badge pushed a shared trip page to 669 px wide on a 390 px screen, with the card's border ending mid-sentence. Short codes still get a badge; a sentence is now laid out as a sentence.
- Timestamps read from a console capture were stored seven hours early, because the motorcycle's console prints its own clock rather than UTC. Captures are now corrected — including short ones that carry only the capture tool's own header line — so charges and rides taken from a console dump line up with the ones from a binary log.
3.9.0
16 August 2026One rule for how big your battery is, and no impossible efficiency figures.
Fixed— Was wrong, now is not
- The pack size behind the dashboard battery gauge is measured by the same rule as the battery page, including the check that discards a charge claiming twenty points of state of charge across a one-point window. The same pack, on the same day, had been reading 3.83, 4.00 and 4.20 kWh on three pages of the app.
- An impossible efficiency is no longer published. 24 km on a three-point drop in state of charge works out at 235 km/kWh, and it was on a public page; the ceiling is now 80 km/kWh — twice the fleet's 95th percentile — which withholds 253 rides out of 9,272 rather than printing a figure nobody measured.
3.7.0
16 August 2026Trip and ride energy stop being measured against the badge on the battery.
Fixed— Was wrong, now is not
- A trip counted the same battery twice. A pack does not refill during a coffee stop but its state-of-charge reading recovers once the load comes off, so a nine-leg trip added up 68 points of drop on a pack that lost 45.
- Ride energy is measured from your pack's own charges rather than from the number on its badge. A 2016 FXS with 118 recorded charges measures 3.37 kWh against a 6.5 kWh badge, so every ride on it read about 1.7 times too high; 34 of the 66 bikes with enough charge history were over by more than 10%.
- A pack is never reported as holding more than it could when new. Four bikes had been raised past their own badge by charge energy metered at the wall, with the charger's losses counted as if they had reached the cells.
3.6.0
16 August 2026Added— New in this release
- The verdict on a published trip link can be refreshed after you write a note, without minting a new link. The address you already sent to a forum keeps working, and nothing is spent until you ask.
Fixed— Was wrong, now is not
- Clearing a note removed it from your account and left it on the public page, so a rider who changed their mind was told it was done when it was not.
- After rewriting a note, the page went on offering to refresh the verdict on every load, for ever. The offer now appears only when the verdict really is older than the note, and a refresh counts against the same monthly AI allowance as every other AI feature.
3.3.0
16 August 2026Write down what the log cannot record.
Added— New in this release
- Your own note on a ride, for the part a log cannot hold — the dash flashing, the throttle going dead after a long descent, that it happened four times. A note always reaches the AI verdict, and reaches the public page only if you tick the box.
- A photograph of the motorcycle and the outline of a route can appear on your public rider page. What is published is a separate stripped copy with no camera data and no location in it, and unticking the box deletes that copy rather than merely hiding it.
Fixed— Was wrong, now is not
- Two shared links to trips ridden out of the same town could not be told apart — both read "Formia, Italy" with the date in small grey type. A shared link now carries its place and its day together, which is what names a trip.
- The route outline drew a straight line across the area the privacy trim had just hidden. It breaks the line there now, the way the map beside it always has.
- Shared ride photo links no longer carry an internal account identifier.
3.0.0
16 August 2026A public rider page, off until you turn it on twice.
Added— New in this release
- A public rider page at a handle you choose. Two separate switches, both off until you set them: one says you have a page at all, one says a particular ride appears on it, and turning the page off clears every ride from it.
- A page carries at most three rides, and one generated sentence says how many were chosen, how many are anonymised and whether the motorcycle is named — so three rides do not read as a rider who has ridden three times.
- The year on your page is the year you started riding, declared by you. It used to be the year you signed up here, which told an owner who bought their bike used in 2019 that they had been riding since 2026.
Changed— Different from before
- A published link can be made to show less while keeping its address. Tightening a link you have already sent out no longer means revoking it and losing every reader you sent it to.
Fixed— Was wrong, now is not
- The page says why a ride cannot be listed before you tick the box, instead of failing afterwards with a message that slides away.
- Using a Gravatar on your page is a choice you make, and the page states its cost where the choice is made: the address in a Gravatar URL identifies you on every site that uses them.
2.99.0
15 August 2026Added— New in this release
- A page listing every link you have published, ranked by how much each one gives away rather than by date. The owner of this app had four live links and remembered one; among the forgotten was a bike recap serving a full VIN, the odometer and six years of ride history to anyone with the address.
Fixed— Was wrong, now is not
- A 40 km ride showed as 7 km. The log held the whole climb — odometer 33,664 to 33,704, state of charge 96 to 53 — and the report had finished with no error and no warning; across the whole 861-file test corpus this recovers 9,592 km and 886 rides.
2.98.0
15 August 2026Fixed— Was wrong, now is not
- Charging sessions of impossible length are no longer created. One session in the database ran 305 days as a single charge, with 196 more over eight hours and 43 that began and ended at the same instant.
- State of health now divides by one usable-capacity figure instead of two that disagreed by 2.3%, which is why a pack in ordinary condition could publish 102%. Every pack Zero has sold has a usable figure between 87.5% and 89.3% of the number on its badge.
2.97.1
15 August 2026Added— New in this release
- Battery telemetry from the console captures of 2020-era battery boards: cell voltages, pack voltage, temperatures and current, 4,686 samples over two months on the reference capture. Those captures carry no state of charge at all — the reading is stuck at 100 in every record — so none is shown.
Fixed— Was wrong, now is not
- The Battery State of Health card came back for six bikes that had lost it. Two of its three rungs are specifications, true whether or not anything has been measured, so the explanation should not disappear along with the figure.
- The overall battery score no longer jumps at a round number. It cost 14 points at 70.0% state of health and 25 at 69.9% — eleven points, on a figure that moves when your next charge arrives.
2.97.0
14 August 2026Fixed— Was wrong, now is not
- A 2020 battery console capture holding two months of history was refused with "no log entry table found", and its owner was told to run the dump again. It reads now: 21,148 entries.
- The battery capacity quoted by the chat assistant follows the same rule as the battery page. It had been averaging the twenty most recent charges regardless of which pack they came from, and comparing the result against the badge.
2.95.0
14 August 2026The battery page counts its evidence before it scores anything.
Added— New in this release
- A battery health guide in the Learn section: what makes a charge count, why a charge from 60% to full is worth twice an 80% top-up, and why rides draw on the chart without voting on the number.
Changed— Different from before
- Four charges are needed before a state-of-health percentage is published. Below that the tile shows how much evidence exists — "2 of 4", with a filling bar and never a percent sign, because the one thing it must not resemble is a very low state of health.
- The battery page labels its three capacity figures Badge, When new and Today, and state of health divides by what the pack gave when new rather than by the badge. That step from badge to usable was true the day the motorcycle was sold, and charging an owner for it is what makes an ordinary ten-year-old pack look ruined.
Fixed— Was wrong, now is not
- 32 bikes published a state of health of exactly 102.3%, a figure that contained no measurement at all — most modern Zeros carry no electrical telemetry to measure with. Published figures go from 118 to 56 and readings above 100% from 86 to 3.
- A motorcycle whose pack cannot be measured no longer scores 100 "Excellent" on the strength of never having been checked.
- The overall health verdict listed the same three bullet points every time, so the two deductions that dominate — a live critical fault and worn capacity — were never among them. Measured on one bike: a score of 57 above three visible bullets worth nine points between them.
- The cell-spread warning judges the sustained spread instead of the worst instant. Cells separate under hard acceleration; 53 of 124 bikes were flagged, 2 are.
2.83.0
12 August 2026Battery pages stop contradicting each other.
Added— New in this release
- Recurring battery faults are listed on the battery page. All twelve of the bikes with the most log files carry at least one recurring fault family and the page had shown none of them, ranked so that 996 failures which stopped in 2020 describe a motorcycle that was repaired.
- Each capacity reading carries the temperature it was taken at, with the weather drawn under the capacity curve on a shared time axis. Measured over 1,986 charges across 46 bikes, a pack below freezing hands over about 83% of what it gives at 22 °C.
Changed— Different from before
- The AI fleet verdict expires when new logs arrive instead of standing for ever. It is not regenerated automatically, because that would spend your metered allowance on an opinion you did not ask for.
Fixed— Was wrong, now is not
- All-time battery records could be set by a corrupt reading, so a few bikes showed an impossible cell voltage as their headline figure — one read 16,546 mV for a single cell, and 21 of 123 bikes with cell data were affected. The low end mattered more, because it drives a warning: two bikes reported minima of 384 mV and 45 mV against true minima of 3,573 and 2,801.
- A pack is no longer reported as holding more than its badge. "7.22 kWh maximum" on a 6.5 kWh pack was being admitted deliberately, by a band that ran to 15% above the nameplate.
- A replaced battery was averaged with the one you ride. 56 charges on the outgoing modules at 2.90 kWh and 34 on the incoming pack at 4.00 came out as roughly 3.0 and a headline of 52%, describing a battery that has never existed.
- The health ring read 97 "Excellent" a few centimetres above this same page's own verdict of 70%, because it scored how the pack behaves and never asked how much of it was left. "Health vs Age: 104%" had the same shape: a ten-month-old pack graded against the age of the motorcycle.
- Tyre pressure and riding mode were saved and never sent back to the page, so every reload showed empty boxes and the values looked lost.
2.82.0
12 August 2026A range calculator anyone can use.
Added— New in this release
- A public range calculator: pick a model year, a speed, a load and a gradient. It never asks you for a drag coefficient — nobody knows theirs, so it is solved from Zero's own published highway range — and the whole configuration lives in the address, so a setup can be handed to someone else.
Fixed— Was wrong, now is not
- The range calculator was absent from the menu below 1280 px and had no entry at all on a phone, which is most of the people who would use it.
- Total ascent was over-counted on a route: a 9.77 km loop that ended where it started reported 84 m of climbing against a true 68.
2.73.0
6 August 2026Phone navigation for the public pages, four new Learn guides, and battery identity read out of the logs.
Added— New in this release
- The public pages have navigation on a phone. Below 768 px there was none at all: the model catalogue, the log decoder and every Learn topic were unreachable from any page, and the de facto menu was a row of 20 px footer links.
- Four new Learn guides written from Zero's own manuals: fastener torques (503 figures from 31 manuals, including the nine specifications Zero changed between model years), the 12 V system (343 fuse rows), thermal limits, and drive-belt tension.
- Compare two model years side by side. The catalogue could compare every model and no two motorcycles, so a 2016 against a 2022 was unreachable; the comparison also states what a battery failure costs, from dealer part numbers.
- Weather for a ride whose location you told us, hourly and back to 2017. Only for a location you asserted yourself, because guessing it turns "it has been dry all week, so this is not water" into a confident wrong answer.
- Efficiency is compared against your own history as well as against the fleet. One rider's 365 rides have a median of 15.4 km/kWh against the FXS fleet's 20.5, so every trip they published read "below average" and said the same thing for ever.
Changed— Different from before
- A declared change of owner reaches the dashboard, the costs page, the AI verdict and your shared links, rather than one aggregate. History views still show everything, with a marker on the day the boundary falls, because truncating a rider's journeys at the day they bought the bike would destroy what a second-hand owner said was valuable.
Fixed— Was wrong, now is not
- A quarter of every console capture never reached the database — 5,292 rows stored out of 7,011, with nothing anywhere saying so. Separately, a capture whose terminal had wrapped every line was refused outright; one such 1.2 MB file now yields 7,015 entries over 19 days.
- Selecting a battery module did nothing: either module returned identical charts, which is worse than an absent feature because it looked like it worked. Selecting a retired pack also put the current pack's cells under the old pack's name.
- The report page showed a green "No errors or warnings" card for a motorcycle with 97 error rows, and the rows behind a ride's error count can now be opened and read.
2.59.0
3 August 2026Added— New in this release
- Photographs on a shared trip, uploaded from the trip page. The file is decoded and re-encoded before storage so no location, device or timestamp survives, and a photograph whose position falls inside the hidden part of the route is published without a pin rather than not at all.
- Photographs with no position ask you where along the route they belong, and your placement always beats the camera's.
- The data-quality panel the owner sees is on the public page too, with GPX download and Google Maps and Waze links beside it.
2.50.0
3 August 2026Added— New in this release
- Every parse now checks the raw file independently and reports when it demonstrably holds records later than anything that was read. This is the failure that keeps recurring, because nothing about it looks like an error.
Fixed— Was wrong, now is not
- A rider's most recent day of riding was missing from reports that completed without a single error. Across the test corpus this recovers 3,088 entries and 44 days on 90 files, 25 of which now reach a later date and one of which gains three months.
- Because there were no rides for that day, every phone recording uploaded afterwards was refused with "no matching ride" — a symptom of a problem two layers away from where it appeared.
2.44.0
2 August 2026The public trip page.
Added— New in this release
- A shared ride opens as a navigable layered map with its sensor charts and whichever sections the owner turned on.
- Four switches on each link: the bike's telemetry, a fault summary, the raw log lines, and the model and year. Every one is off by default, and links already handed out were not widened by the change.
- Raw log lines are published with the identifiers taken out of them — VINs, serial numbers, firmware strings, hardware addresses and coordinates written into free text. Fault codes, temperatures, voltages, currents and state of charge are kept, because a redaction that eats the fault codes removes the reason to publish a log at all.
- The page says two things out loud: that a shortened route is deliberate, and that identifiers were removed from the log lines. Otherwise both read as a broken upload.
2.43.0
2 August 2026Trips.
Added— New in this release
- Rides grouped into the journeys you remember taking. A ride ends when the bike is switched off, which is right for engineering and wrong for "show me last Sunday": stop for coffee and one outing becomes three rows.
- A trip page with a layered map, the route colourable by any channel, and one shared cursor across the map and every chart. Legs with no recording are named and counted rather than drawn across.
- GPX export with one track segment per leg, so no viewer draws a straight line across the hour you spent at lunch.
- Route privacy for public links, chosen per share from a default you set once. The trim is applied when the page is built, so your stored track is never modified.
2.42.0
2 August 2026Record a ride with your phone.
Added— New in this release
- Phone recordings are read properly, gyroscope included: yaw rate, roll rate and corner radius, from the one sensor that measures cornering directly rather than inferring it from where the bike ended up.
- Nothing from the motion sensors is published below 15 km/h. A phone cannot tell riding from carrying — ungated, a 2 km walk reported a 13° lean and a 40°/s yaw rate.
- A recording works out which ride it belongs to, and one that spans several rides is split between them. Coverage and gaps travel with every match, so a recording that died ten minutes into an hour says so instead of presenting a sixth of the ride as the ride.
- A phone telemetry guide in the Learn section, written from measurements rather than from the apps' own documentation: Sensor Logger asks Android for 100 Hz and delivers 62 Hz over 90 seconds but 15 Hz over 21 minutes.
2.41.0
1 August 2026The parser had been stopping partway through a log and saying nothing.
Added— New in this release
- Export All now exports: one ZIP for a whole upload session, with selectable parts — summary statistics, decoded log text, telemetry as CSV, rides and charges, and the original files as uploaded.
- The upload assistant names the one case that is ours rather than the motorcycle's: a thin report because we did not finish reading the file, carrying the opposite advice — re-parse what you already uploaded instead of downloading it again.
Fixed— Was wrong, now is not
- A log that appeared to cover nine days actually held ten months. One bike's file reported 42 rides over 301 km and holds 114 rides, 573 km, 12 charges and an odometer reaching 33,249 km; the report ended in a smooth ladder of identical status rows and read as uneventful.
- A single torn record no longer defines a report. Five bad rows out of 6,609 had given one motorcycle a state-of-charge range of 24% to 253%, a 1,784,914 V pack and a 2,157,131 kW discharge.
- Fake pack-voltage samples are gone. One record type never carried a voltage at all and had contributed 77,999 readings — 27% of every battery voltage figure in the database; with it removed, the two independent decoders agree on the same pack to within 0.2 V.
2.39.0
31 July 2026Fixed— Was wrong, now is not
- The decoder that runs inside your browser skipped four bikes' battery logs entirely — 1,442 records it never read. It now returns exactly what the server returns on the same files: 107,728 entries each, with no disagreement left between them.
- A report could claim more entries than it actually held.
2.38.0
31 July 2026Fixed— Was wrong, now is not
- Six logs from newer bikes were read by the decoder for the older platform, because the file's own name said so. They held 1,643 to 1,741 entries where a correctly read file of that kind holds about 2,355. The bytes decide now, not the label.
2.37.0
31 July 2026Fixed— Was wrong, now is not
- Battery current was read as half a number. The stored value wrapped every 65.5 A and inverted its sign as it wrapped, which is why a charge could read as a discharge. Checked three independent ways before it was changed: against the pack's own state of charge, where the direction now agrees on 83 of 84 charge segments instead of 49, and against internal resistance on 35 of 38 bikes.
- A current that cannot be read is recorded as unknown rather than as zero, because zero reads as an idle pack. A genuine zero is kept — it is a real reading on a fifth of all records.
2.36.0
31 July 2026Fixed— Was wrong, now is not
- One of our own decoders had been taking over from a better one and halving what those bikes recorded. The stored average fell from about 6,200 rows to about 3,500 on 29 June and nothing reported it; re-read across 191 files it goes from 3,449 to 7,191 entries on average. It now takes over only where the other decoder came back with nothing usable.
2.35.0
31 July 2026Fixed— Was wrong, now is not
- A Gen3 battery temperature that was never a temperature is withdrawn — charted, stored, documented and published on the strength of a byte that sat in a plausible range and was never checked against a second instrument. The same mistake as the accessory rail once published as an odometer, and an absent reading is better than an invented one.
2.34.0
31 July 2026Fixed— Was wrong, now is not
- A third of every uploaded log was being discarded as it arrived. Across every Gen3 file on the server, 672,818 parsed entries had become 430,222 stored rows, because the rule that drops duplicates was matching on a field none of the readings carry. Files uploaded before this still lack those rows; a re-parse recovers them.
- Dates the app was not entitled to believe: 92% of Gen3 reports claimed a span longer than two months, some starting in years before the platform existed. An impossible span is now refused rather than reasoned from, and a ring buffer's two dates are described as the oldest and newest records that survived, not as a period covered continuously.
- The warning that only the last few days before export would appear was being shown to every Gen3 owner. 91 of 259 of those reports are not ring-buffer files at all.
2.33.0
31 July 2026The app explains what happened to your upload.
Added— New in this release
- After an upload you are told what was found: the identity recovered from the bytes, why a timeline is empty, whether the export was cut short near the end of the buffer. Every observation is measured from the finished report rather than written by a model, and when your browser is not set to English they are translated — translated only, with anything invented thrown away.
- An upload no longer redirects you into an empty page. When there is something you need to see first, it stops and says it.
Fixed— Was wrong, now is not
- An upload that fails now says something you can act on. A network failure names what goes wrong there; a structured server error used to render as the literal text [object Object]; a file the picker rejected was dropped in silence, with nothing to say it had gone.
- The whole file is read in your browser when you pick it, not just the first kilobyte, so a file that cannot be read is caught while the advice is still useful.
2.32.0
31 July 2026Fixed— Was wrong, now is not
- A log renamed by hand — or by a browser adding "(1)" to it — lost the identity we had been reading out of its filename, and lost the rides inside it with no sign that anything was wrong. Eight files belonging to one owner were already affected: 0 rides became 2,199 once the identity was read from the bytes instead. Every bike-computer log carries its own VIN in a fixed place, and the upload now reads the file before it asks you anything, asking which bike it is only when neither the name nor the bytes answer.
- Some riders were placed on a "local network", which is not a place — and they were not mislabelled on the admin map so much as deleted from it. Their real addresses were recovered.
2.31.0
30 July 2026A decoder anyone can use, without an account and without uploading anything.
Added— New in this release
- A page for anyone holding a Zero log: drop the file in, read the decoded text, download it. The decoding runs inside your browser and the file never leaves your machine.
- Gen1 and Gen2 logs are recognised, identified and honestly declined there rather than half-decoded — measured coverage had we tried was under 1% of the readings that matter.
Fixed— Was wrong, now is not
- "Mask identifiers" now masks all of them. It had been redacting one field of five while the line two above it carried the filename, which on every real Zero export is the VIN.
- Zero's VIN tables are indexed by model year and ours had been flattened, so a code the factory reused across years decoded silently wrong: a 2015 SR came out with a pack Zero never sold, and that figure reaches the stored capacity and the state of health divided by it.
- Charging says what it cannot know. The split between the onboard charger and a supplemental one now has an explicit unknown, and the page states once, plainly, that DC fast charging cannot be told apart.
2.30.0
30 July 2026The Learn section, audited against the manuals and the real logs.
Fixed— Was wrong, now is not
- Onboard charger power was published from a year-blind table and understated by up to 2.2 times — the DSR/X at 3.0 kW against a true 6.6 on every manual sheet. It resolves by model year now.
- Gen3 dash codes: 19 were missing, five were wrong and two had been invented, including one published as "No Error" where the manual says a turn-signal bulb is out.
- Claims about hardware that does not exist: the SR/F described as liquid-cooled where every manual sheet says air-cooled, and a CHAdeMO row against the DSR/X.
- Claims that would mislead an owner about their own motorcycle. Gen2 owners were told their logs grow without limit and keep months of history, so there was no hurry to export; the file is a fixed-size ring buffer like everyone else's. The error-code search filtered Gen2 without the DSR or FXE and Gen3 without the S/F, so those owners filtered themselves out of their own dash codes.
- A banner told every Gen3 owner that the tool could not read their logs. It had been reading them for some time.
2.29.0
30 July 2026Gen3 bikes stop reporting an odometer, because they never had one to report.
Changed— Different from before
- SR/F, SR/S and DSR/X reports no longer show an odometer or a per-ride distance. The figure came from four bytes that were never a distance: it rose on only half of its transitions, and read between 143 and 13,440 "km" on five unrelated bikes across three families and five model years. It is a 12 V accessory rail, and is reported as one now. Gen2 and 538XX bikes carry a real odometer and keep it.
Added— New in this release
- Measured pack capacity on the battery page, read from the battery's own full-charge register — decoded and stored for a long time, and never once read back.
- A page documenting the Gen3 log format record by record, with a decoder that runs in your browser, and a VIN page with all 17 positions and the tables behind them.
Fixed— Was wrong, now is not
- Exporting a report as PDF failed on any report with more than one ride.
- Gen3 rides were vanishing from the timeline: they carry no distance and no speed, and that was being read as "not a ride". One file lost every ride it had.
- The ring-buffer retention figure was wrong by about half everywhere it appeared, including in the app's own warning. A parked Gen3 fills its buffer in about 3.2 days, not five to seven.
2.27.0
28 July 2026Changed— Different from before
- The account overview and the per-bike battery figures are cached, so the slowest page in the app stops being slow. Anything you change clears your own cached figures, so a stale number cannot outlive the edit that made it wrong.
2.26.1
27 July 2026Fixed— Was wrong, now is not
- Battery statistics were cached against the motorcycle alone, so the second owner of a resold bike could be shown the first owner's figures. Every cached figure is scoped to the account that asked for it.
2.26.0
27 July 2026Changed— Different from before
- You stay signed in. A sign-in lasted 30 days with no way to renew it, so you were signed out roughly monthly with no warning; it now renews while you are using the app.
2.25.0
26 July 2026One mark, and a green that is not the manufacturer's yellow.
Changed— Different from before
- One identity replaces four that contradicted each other, and the accent moves from yellow to green: this is a third-party tool and must not dress as Zero Motorcycles. Yellows that carry meaning were left alone — a dashboard lamp that is amber on the motorcycle is still amber here.
- Email is rebuilt on the same identity, with the name carried in live text as well as in the image, because most mail clients block remote images by default.
Fixed— Was wrong, now is not
- Every button in every email painted white text on a gradient with no fallback colour. Outlook and Windows Mail drop the gradient, so the label rendered white on white and the button read as empty space.
- The site icon and the link-preview image were declared on every page and returned nothing.
2.24.0
23 July 2026Added— New in this release
- The date a battery was installed is yours to set, and re-parsing your logs never overwrites it.
Fixed— Was wrong, now is not
- The battery date pickers rejected valid dates: a date with no time of day was refused outright by the server, and the dialogs said nothing at all when a save failed, so it looked like pressing Apply did nothing.
- Bike photos, ticket attachments and share-card images failed to load.
2.23.0
12 July 2026Shareable bike recaps.
Added— New in this release
- Public, revocable links that show one bike's recap — riding, charging and a 26-week activity calendar — with everything identifying it off unless you turn it on.
- Pasting one into a chat or a social network unfurls a card drawn for that link.
- A photograph of your own bike, which replaces the model placeholder wherever that bike appears.
Fixed— Was wrong, now is not
- A shared recap counts only the owner's own uploads, so a resold motorcycle can never blend two riders' history onto one public page.
2.22.0
12 July 2026Added— New in this release
- Metric, imperial or UK units, chosen once on your account and applied everywhere.
- For owners whose file download fails or arrives truncated: upload the serial-console capture instead, with a guide to taking one over cable or Bluetooth.
Changed— Different from before
- Bike cards show the real odometer and the distance your uploaded logs cover as two clearly separate figures, because on a ring-buffer bike they are not the same number.
2.21.0
11 July 2026Added— New in this release
- A reply to a feedback ticket became a conversation rather than a single answer: both sides can add to the thread, and the reply reaches you whether or not your address is verified — gating it would swallow the answer you are waiting for.
Changed— Different from before
- The dashboard headlines the real odometer, the highest reading in your logs, instead of the sum of the rides that survived in the file. On a ring-buffer bike the sum is always short, and it looked like the number that was wrong.
2.20.0
11 July 2026Added— New in this release
- A configurator for the hardware actually fitted to your bike — an upgraded pack, a swapped motor, a different controller, a supplemental charger — chosen from a catalogue rather than typed as free text. A declared pack sets the nameplate capacity that every other figure is measured against.
2.19.0
11 July 2026Added— New in this release
- A deep reading of the raw log, on request. The text is read in sections, each one summarised, then synthesised into a single verdict. It spends from your allowance, so it runs only when you ask for it.
2.16.0
11 July 2026Added— New in this release
- Garmin FIT export, beside CSV and GPX, so a ride opens in Garmin Connect and the tools that read FIT.
Changed— Different from before
- Signing out now signs you out. A sign-in was valid for 30 days whatever you pressed; sessions are ended on the server, and you can end one from your account.
- Campaign email carries the headers Gmail and Apple Mail use to offer their own one-click unsubscribe.
2.14.0
9 July 2026Added— New in this release
- The assistant and the diagnosis read Zero's own manuals: passages from the owner and service manuals for your model are retrieved and given to the model as context, instead of it answering from memory.
2.13.70
5 July 2026The manuals, and a public catalogue built out of them.
Added— New in this release
- A public catalogue of every Zero model: a searchable index with real photographs, a spec sheet per model covering motor, battery, charging, belt, suspension and brakes, and a comparison page with an efficiency column and the trade-offs drawn out.
- An owner's guide per model, ten sections and a dozen questions each, written from the official owner and service manuals: controls, riding, charging, maintenance intervals, torque figures and wear parts, with real figures from uploaded logs beside them.
- Every catalogued pack carries a researched weight and the energy density that follows from it, each with a note saying where the figure came from, because Zero publishes almost none of them.
- Attach a GPX from a phone, a Garmin or Strava and the ride gains a route map coloured by any channel, with the map and the charts highlighting each other, plus a clock alignment that proposes the offset by matching GPS speed against logged speed.
2.13.30
4 July 2026Added— New in this release
- A diagnosis centre that puts the rules first and the model second: what can be established from the log is established before anything is asked of a model, and the model cannot overrule it.
- A catalogue of error families behind every error and warning in the log viewer, so a line in your log links to what that family means.
- A thumb up or down on a ride or a charge, with a note, when a figure is wrong — and somewhere those reports are read.
- The model your VIN decodes to can be corrected by hand when it decodes wrong, and your correction wins everywhere.
- The savings-against-petrol figure works out litres per 100 km from your bike's own power instead of a fixed number, and you can override it.
Fixed— Was wrong, now is not
- Long log lines were being clipped twice over, once by the column that stored them and once on the way in.
2.13.7
2 July 2026Added— New in this release
- A read-only public demo: one click signs you into a shared account with real, anonymised data, and nothing in it can be changed.
- A public status page that probes what the app runs on and shows what is up.
- A catalogue of every Z-Force pack with a compatibility matrix, and a way to add a pack the logs cannot name: FXS battery logs carry no serial, so a physically swapped pack was being merged into the old one and never appeared.
Fixed— Was wrong, now is not
- A bike whose VIN does not decode falls back to its stored model and that model's specifications instead of reading "Unknown" everywhere.
- The timeline lands on your latest data instead of an empty current month.
- Model names containing a slash were being split, so "SR/F" displayed as "SR".
2.12.0
2 July 2026A dashboard for more than one bike.
Added— New in this release
- A fleet dashboard: account totals, per-bike statistics, costs and battery health in one read, with an AI verdict over all of it that you ask for rather than one that regenerates itself and spends your allowance.
- A charge has a page of its own now, with the curve behind it: state of charge, voltage, current, power, temperature and cell imbalance across the charge window. Sixteen list-to-detail paths that dead-ended go through.
Fixed— Was wrong, now is not
- Days since your last ride is counted from the last ride, not from the last session of any kind.
- The battery-swap detector needs a sustained jump during a deep charge, so ordinary noise no longer reads as a new pack.
2.11.0
1 July 2026Capacity, state of health, and the charges nobody recorded.
Added— New in this release
- Usable pack capacity and state of health on the battery page, estimated from charge energy against the state of charge gained over the clean charges, and shown against the badge and the usable-when-new figure rather than as one number on its own.
- Gen3 charge energy is measured instead of guessed. It had been an average power multiplied by a ring-buffer duration, which is how it came out empty or absurd; it is integrated sample by sample now.
- Charges the current-based detector never saw are recovered from gaps in state of charge — common on a bike that charges switched off — and marked as estimated everywhere they appear.
- Colour by activity in both log viewers: riding, charging, parked, warning, error, from one shared rule.
Changed— Different from before
- Measured and estimated energy are kept apart everywhere. The headline stays measured, with the estimate annotated beside it, because an estimate must never pass for a reading.
- A charge that is a plug tap — plugged in and unplugged straight away — is left out of the timeline, the counts, the energy totals and the costs.
Fixed— Was wrong, now is not
- The battery page took 17 to 43 seconds, almost all of it spent planning the query rather than running it: a handful of impossible timestamps had smeared the readings across 1969 to 2106, into roughly 3,300 weekly slices.
2.10.35
30 June 2026What a charge costs, and what the bike did while it was parked.
Added— New in this release
- A charging costs page: a flat rate or time-of-use bands, what each charge cost, per kilometre and per day, by charger, with export and a what-if.
- Charges are classified as onboard or supplemental. The onboard charger often stops below 100% while a supplemental brick finishes the job, which is a pack-imbalance signature worth being able to see.
- Parking sessions on the timeline, derived from the gaps between rides and charges, with the standby drain across each one.
- The worst and the average cell spread across every battery file for the bike, on one chart with the watch and high reference lines.
- The per-ride debrief reads real telemetry and the context you give it — riding mode, passenger, load, tyre pressure — instead of summary statistics alone.
2.10.18
30 June 2026Added— New in this release
- Ride energy is measured where the electrical telemetry exists: the integral of real power, net of regeneration, instead of state of charge multiplied by pack size.
- A chart computed from other channels carries a badge saying so, so a derived series is never mistaken for a sensor reading: cumulative energy, regeneration recovered, efficiency in Wh/km, internal resistance.
- Faults and warnings are marked on the charts where they happened, with a list of them above.
- A GPX uploaded onto a report draws the route with an elevation and gradient profile aligned to the log's own clock.
2.10.12
29 June 2026Fixed— Was wrong, now is not
- Some 538XX bikes were moved by a firmware update onto a log format nobody had decoded, so their files read as nearly empty. One owner's log recovers 97 rides and 654 km.
2.10.10
29 June 2026Fixed— Was wrong, now is not
- Battery charge detection was near-universally dead. A session ended at the first entry that was not a charge sample, and this firmware writes ordinary telemetry between them, so every charge fragmented into single samples and disappeared.
- A charge window is anchored to the file that actually carries the telemetry, which ends the 29-hour charges reported on FST bikes.
- Gen3 logs that were being routed to the empty path for the older platform are read properly.
2.10.2
28 June 2026Fixed— Was wrong, now is not
- Deleting a log file left its rides and charges on the timeline. The file and its readings went; the sessions built out of them stayed.
- A truncated or corrupted upload is identified as one, from the structure of the file and from the size every other export from that bike has had, rather than looking like a motorcycle that did nothing.
- The database was being killed for using too much memory, which surfaced as a connection closing unexpectedly and looked like a network fault.
2.10.0
27 June 2026A security and correctness review.
Changed— Different from before
- Sign-in, sessions, uploads and per-bike access were reviewed end to end and hardened.
Fixed— Was wrong, now is not
- A run of wrong numbers: a state of health above 100%, battery sizing by model, temperatures below zero read as positive, and 2019 timestamps on Gen3 files.
- Charts are grouped at the resolution asked for in the database, and a log download streams instead of being assembled whole, so both hold up on a large file.
2.9.0
10 May 2026Telemetry you can put on video, and the battery's modules one at a time.
Added— New in this release
- Export your telemetry as CSV or GPX for the video overlay tools — Telemetry Overlay, RaceRender, Dashware, Insta360 Studio, Garmin VIRB — with a synchronisation column, and with the bike-computer and battery files for the same ride merged into one export.
- Per-module battery diagnostics: contactor events, voltage range, imbalance and precharge for each module, and a warning when a module slot reports a serial it has not reported before, which is what a replaced pack looks like.
- Opening a bike-computer report finds the battery file covering the same days and draws its cell spread and weakest-cell readings beside it, each card naming the file it came from.
- Deleting a bike, with a preview of exactly what goes with it, and the same for a single log file.
- The upload page explains what each of the two file types holds, and says so when only one of them has been uploaded.
Changed— Different from before
- The parser reads the upstream library's structured output instead of its printed text. The text renames its fields with every upstream release, which is how a silent loss of data happened in May; the structured path gains a quarter more entries on a Gen2 bike computer, and thousands of battery readings that were being missed entirely.
Fixed— Was wrong, now is not
- A log that looked corrupt was not. A Gen3 bike parked long enough overwrites its own rides, and the app explains the ring buffer instead of leaving it to look like damage.
- A link to a session that has since been rebuilt resolves to its replacement instead of dead-ending.
2.8.0
6 February 2026The 2020-on platform is read.
Added— New in this release
- SR/F, SR/S and the bikes sharing their electronics are decoded: state of charge, speed, temperatures, pack voltage and current, out of files that until now yielded nothing.
- Every report says which generation the motorcycle belongs to, and a Learn page explains what changes between them.
2.7.4
5 February 2026Fixed— Was wrong, now is not
- A Gen3 log no longer takes the whole parse down with it. One record that could not be read used to abort the file; unreadable records are skipped and everything else is kept.
2.3.0
5 February 2026Changed— Different from before
- The pack a bike carries is worked out from the battery's own logs rather than from the model alone, which is the only way a capacity figure can be right for a bike with modules added or taken away.
2.1.0
5 February 2026Added— New in this release
- The Learn section gains a searchable catalogue of dash codes and log conditions, a page on what battery health means and how it is measured, and a timeline of the generations.
2.0.0
5 February 2026The first numbered release. Everything between this and the first version shipped without a number.
Added— New in this release
- A reading of a report and of each ride written by a model, with a monthly allowance you can see, and an assistant that can see the report you are looking at.
- Charging costs: tell it what you pay for electricity and it tells you what each charge, and each kilometre, cost you.
- A timeline across every file you have uploaded, a day opening into a session and a session into the report behind it, and saved reports and bookmarks to come back to.
- A PDF of a report with its charts, its statistics and its written reading.
- The Learn section: public pages explaining what a Zero log holds and what the numbers in it mean.
- Sign-in links, address verification and notifications by email.
Changed— Different from before
- Releases carry a version number, and a changelog, from here on.
1.0.0
9 December 2025The first version.
Added— New in this release
- Upload a Zero log file and read what is in it: rides and charges found in the entries, speed, state of charge, pack voltage, current and temperatures charted over time, and the decoded log lines beside them.
- Both exports are read together — the bike computer's and the battery's — with their clocks aligned, so one pair of files reads as one history.
- A profile for the motorcycle built out of its VIN: model, year, motor and pack, with the specifications that go with them.
- An account, so that what you upload is yours.
The record runs back to 1.0.0, the first version of this tool. Releases from 2.41.0 onwards were written for riders on the day they shipped; the older ones were reconstructed afterwards from the engineering changelog and the commit history, so they are shorter and list only what you would have noticed. Work that changes nothing you can see is in the engineering changelog only.