ZeppBridge 2.1.2
If ZeppBridge will not start on Windows, read this first
Until this release, a failed launch on Windows produced nothing: no window,
no message, no log. What people saw was a tray icon that did nothing when
clicked — and that icon was left behind by a process that had already quit.
Reinstalling did not help, because the data folder sits next to the installation
and survives an uninstall.
Three things change:
- The app falls back to a writable folder. ZeppBridge keeps its database in
adatafolder next to where it is installed. The.msiinstalls into
Program Files, where a standard user has no write permission; Controlled
Folder Access and some antivirus products block it too. macOS and Linux
already had a fallback for exactly this and Windows did not. It now falls back
to%APPDATA%\zeppbridge\ZeppBridge\data. The one case it refuses to do
quietly is when a database is already sitting in the blocked folder — starting
somewhere else would look like every record had vanished, so it reports both
paths instead. - A start-up failure shows a dialog naming the exact folder and the
operating-system error, and writeslogs/startup-error.lognext to your data. - Every launch writes
logs/zeppbridge.log(2 MB per file, three kept). If
something goes wrong, that file is what to attach to a bug report. It contains
paths and version numbers, no account data.
You can also point the app anywhere with the ZEPPBRIDGE_DATA_DIR environment
variable.
Added
- Miles. Distance, pace, ascent and the pace and altitude charts follow a
setting next to the language switch, and default to miles only where the
system region actually uses them. Exports do not change — JSON, CSV, GPX and
FIT stay metric, because that is what the command line, the MCP server and
every third-party platform read them as.
Fixed
- Workout files import into Garmin Connect and Strava. Every FIT file needs
at least one lap, and ZeppBridge only wrote laps for the per-kilometre splits
Zepp returns — which it does not return for indoor workouts, or for outdoor
ones that never reached a full kilometre. Those files went out with zero laps
and were refused on import, while the export itself reported success. On one
real library of 332 workouts, 168 of the 313 exported files were affected, and
not only treadmill sessions: 99 runs and 9 rides were among them. Those files
now carry a lap covering the whole activity, built only from figures already
measured. Two smaller things in the same files: the local time zone is
recorded, so a 6am run no longer shows up as the previous evening, and a point
sitting exactly on the antimeridian keeps its coordinates. This is the other
half of #28 — 2.1.1 made the FIT button clickable, this makes what comes out
of it acceptable to the platforms people asked for it for. - Restoring from a backup can no longer corrupt the library it restores.
SQLite keeps a write-ahead log beside the database file, and the old log was
removed only after the new database had already taken its place. If that
removal failed, or the machine lost power in between, SQLite replayed the
previous database's log into the new one. - Large heart-rate ranges no longer lose everything after the first page. A
paging cursor mixed seconds and milliseconds, so any range dense enough to
need a second page silently came back empty from there on — and the sync still
reported success. - An interrupted database upgrade no longer leaves the command line locked
out. The upgrade is now one all-or-nothing step. - A very long workout is no longer cut off after twelve hours. Ultramarathons,
Ironman races and long tours routinely run past that, and everything after the
twelfth hour was discarded on decode. - A firmware version is no longer displayed as if it were a device. Some
accounts' device lists carry no name field at all, and the app fell back to
the only other text in the payload — the hardware version. The sidebar showed
data sources called0.91.20.5that did nothing when clicked, and a Bip 6
owner wrote in to say their watch "says 0.135.23.0". Those entries are real
devices on your Zepp account; they now read "Not identified" and offer the
model picker, and repeated bindings of the same watch collapse into one row. - Two startup tasks now respect the single-writer lock they were supposed to
hold, so running the command line or the MCP server while the desktop app
starts no longer means two processes writing the same database at once. - When Zepp accepts a request and then refuses it, the app says so. These
responses arrive looking like ordinary successful ones, with the refusal
written inside, and they were reported as unreadable data — leaving the app
neither asking you to sign in again nor ever showing anything. - The app starts faster on Windows, by asking the system for your display
language directly instead of launching PowerShell to ask on its behalf. That
is also the small console window some people saw flash on startup. Worth half
a second to two seconds on machines with antivirus or restrictive group
policy. - Opening the data folder works on Linux.
Changed
- The command line speaks English (#40).
zeppbridge-cliships inside every
installer, and its help text, prompts and usage errors were all Chinese.
--jsonfield names and exit codes are a contract and were not touched.
Errors that come up from the shared core are still Chinese; translating those
is a separate piece of work, and doing half of it would mix the two languages
inside one sentence. - The workout-type list is ordered by the names you can actually read. It
came back sorted by the Chinese names, so an English interface listed a
hundred-odd sports in Chinese pinyin order. - An error report can carry the code the Zepp cloud refused you with — the
number, which data stream, and when. Never any text the cloud returned. No
failing code has ever been observed here, which is why the app does not decide
on its own that a given code means "sign in again"; one real report with that
number is what will let a later release tell people with an empty-looking
account to reconnect.
Notes
- The database schema moves to v20. The command line and the MCP server ship
with the app and move with it; if you run them from a different install,
update both to the same version. - Linux packages remain a preview. Nobody has tested them on real hardware yet.