Skip to content

OpenVitals 2.5.0

github-actions[bot] edited this page Nov 9, 2026 · 1 revision

Released 2026-08-04.

OpenVitals is native Kotlin again. Every feature the 2.x line added has been rebuilt on the Android-native app, and this release adds what it was rebuilt for: a second phone across the table, a folder of CSV files, and a clearer story for the watch on your wrist — all of it without an account and without the internet. Your data and settings from the previous version are imported the first time you open it.

Added

  • Sync health data with another phone over Bluetooth. Two phones, a code you confirm on both, and a report of what moved. No account, and no internet is used at any point. Records keep their original source: an activity that Gadgetbridge wrote on one phone still says so on the other.
  • Import health data from CSV files through a guided wizard that maps your own columns onto the records they belong to.
  • Units that follow your device. The unit setting now defaults to your Android measurement-system preference, and every quantity can override it on its own — kilometres for distance, pounds for weight, and Celsius for temperature can all be true at once.
  • Quick-add a drink from the reminder. One tap on the notification logs it — the app never opens — and the countdown to the next reminder is anchored to your last drink rather than to the clock. Reminders now survive a reboot and a change of timezone.
  • Record a run or ride without GPS. The barometer still counts your climb and the phone still counts your steps, so an indoor or tunnelled session is a real activity rather than a gap.
  • A guided heart-rate recovery test, recorded as part of the session it follows.
  • TCX and indoor-workout file import, for treadmill runs, trainer rides and strength sessions — files with no route, which is not the same thing as a broken file.
  • The Body Energy home-screen widget draws its day again, with the start and end values labelled on the curve.
  • Settings additions: Body profile is now a section of its own, carrying your height and the measurements Health Connect resolves; high and low heart-rate alert thresholds; a stepper for the hydration goal; and a toggle for the mindfulness integration.

Changed

  • Smartwatches sync through Health Connect. OpenVitals does not pair with watches: Gadgetbridge or your vendor's app syncs the watch into Health Connect, and OpenVitals reads everything there — steps, heart rate, HRV, sleep and workouts — with the original source shown on each record. Bluetooth sensors are unaffected: heart-rate straps and cadence and power sensors still stream live into a recording.
  • Your previous version's data comes across on first launch. Goals, units, theme, caffeine and body profile, custom drinks, paired sensors, reminders, offline map packs and home-widget selections are imported automatically the first time 2.5.0 opens. Nothing from the old version is deleted.
  • Elevation is more accurate. GPS noise no longer banks itself as climb: altitudes are smoothed and thresholded the way the barometer path always was, so a climb below the noise floor honestly reports zero.
  • The dashboard only offers tiles your device can fill. A metric your phone cannot provide gets no tile instead of an empty one, and edit mode still lists it so adding it back is never a dead end.
  • Chart settings live together. Rolling dates moved next to aggregate charts under Display.

Fixed

  • Sleep no longer double-counts overlapping stages. When a source records the same stretch as both light and deep sleep, the deeper stage wins and the total can never exceed your time in bed.
  • Year views load again on large libraries. Yearly calories, steps and heart metrics are served from the app's daily-history cache and read in slices, instead of one oversized Health Connect request that could silently come back empty.
  • The dashboard syncs once per open, with one status banner instead of two.
  • The Body Energy widget no longer forgets its morning. A transient permission hiccup used to reset the day's start to 50; the widget now keeps the value carried over from yesterday.
  • Elevation on backfilled activities now runs through the same smoothing as a live recording and an imported route.
  • The skin-temperature card no longer blanks when the newest reading carries no change — it reads the newest reading that actually has one, the same data its chart draws.
  • An unchanged battery reading no longer re-stamps its time, so a device that reports the same percent does not look freshly updated.
  • A permission error now offers a way to grant access instead of a dead-end message: the real request inside Health Connect, or Health Connect's settings outside it.

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

Distribution flow:

  • Codeberg release with signed APK, signed debug APK, and signed Android App Bundle assets.
  • Direct Google Play production upload from the approved Woodpecker deployment.

Generated from docs/releases/2.5.0.md. Edit it there; changes made here are overwritten.

Home

Features

How-to

App

Reference

Engineering

Proposals

Releases

Project

Clone this wiki locally