github lingcang728/ZeppBridge v2.1.2
ZeppBridge 2.1.2

3 hours ago

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
    a data folder next to where it is installed. The .msi installs 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 writes logs/startup-error.log next 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 called 0.91.20.5 that 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-cli ships inside every
    installer, and its help text, prompts and usage errors were all Chinese.
    --json field 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.

Don't miss a new ZeppBridge release

NewReleases is sending notifications on new releases.