Skip to content

OpenVitals v2.13.0

Latest

Choose a tag to compare

@github-actions github-actions released this 07 Oct 12:00
· 19 commits to main since this release

Released 2026-10-07.

This release brings the first bathroom scale to OpenVitals. Set up a Xiaomi Body Composition Scale S400 once in Settings > Scales, and every weigh-in is saved to Health Connect as it happens, with the app open or closed: weight and heart rate as the scale measured them, and body fat, lean body mass and body water estimated on the phone. OpenVitals never connects to the scale, and nothing is sent to the internet. A Wear OS watch now shows whether the OpenVitals watch app answers, Medical records are back in the Play build, a Garmin watch's Stay connected acts on the right signal, and the project has moved to GitHub.

  • Bathroom scales. Settings has a new Scales section, for the Xiaomi Body Composition Scale S400. Add a scale by stepping on it, tapping Find in Android's own device dialog, which lists the scales it hears and asks whether OpenVitals may use the one you pick, and pasting the scale's Bluetooth key once, read from your Xiaomi account with a token extractor. From then on every weigh-in is saved as it happens: Android wakes OpenVitals when someone steps on the scale, the phone listens for up to 45 seconds and shows a silent notification while it does. The scale sends its result for about two seconds once it has finished measuring, which is why Android has to wake the app. On Android 11 and older, weigh-ins are saved while the app is open.

  • What a weigh-in saves. Weight and heart rate as the scale measured them, plus body fat, lean body mass and body water mass estimated from the scale's impedance with published equations and the height and sex in your body profile; without those two, only weight and heart rate are written. The estimates differ from the figure the scale displays. Both impedance readings are kept on the phone, so the estimates can be recomputed if the equations change. A weigh-in Health Connect cannot take at that moment, for a missing permission or a paused sync, waits on the phone and is written later.

  • Your user on the scale. The scale tells its users apart. The first weigh-in tells OpenVitals which of the scale's users is you, and weigh-ins the scale files under someone else are left out, with a That was me button to claim one.

  • The scale's screen. The scale's card opens a screen that shows whether the phone is listening, the last weigh-in, what Health Connect still lacks, your user slot and the key. From there you can rename the scale, change the key, delete the last weigh-in with all its records, or remove the scale, which erases the key and stops the listening. Weigh-ins already saved stay. The scale broadcasts neither its battery nor any settings, so OpenVitals shows neither.

  • Wear OS app status. A Wear OS watch added under Settings > Watches has a Wear OS App Status card: whether the watch is paired with this phone and whether the OpenVitals Wear OS app on it answers over Bluetooth, with a Validate Wear OS App button to check again. The watch app itself is still in development and not yet published. A paired watch is recognised as Wear OS by its name or by the OpenVitals app on it; Garmin, Fitbit and Huawei watches, which report the same Bluetooth class, no longer land in the Wear OS flow.

  • Medical records on Google Play. The Play build includes the Medical records area again, with the camera for scanning a SMART Health Card. The two previous Play releases left it out while the listing moved to a Play account that can declare the medical permissions.

  • Moved to GitHub. The project lives at github.com/OpenVitals-MTU/android-app. The privacy policy link in the app, the README and the engineering docs point there, and releases are published on GitHub Releases. Translations stay on Codeberg Translate.

  • Privacy policy. A new Bathroom Scales section describes the listening, the key, what is kept on the phone and what happens to another person's weigh-ins. The app asks you to read the updated policy once.

  • Translations. Galician, Japanese and Simplified Chinese updated from Codeberg Translate. A Hebrew translation has started and joins the language picker once it passes 70%.

  • Garmin Stay connected. Android tells only one part of an app that an associated device is back in range, and for a Garmin watch that signal went to the wrong one and was never acted on; the link resumed only because Android had started the app for it. The watch's return is now acted on directly, and the app declares one companion service instead of two.

The app keeps the same package name and signing certificate, so this installs as a normal update.

Distribution flow:

  • GitHub release with signed APK, signed debug APK, and signed Android App Bundle assets.
  • Direct Google Play production upload from the approved production run of the release workflow.