Skip to content

OpenVitals 2.8.0

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

Released 2026-09-12.

This release corrects the altitude of imported routes from elevation tiles stored on the phone, so a drifting barometer no longer inflates the gain. Workout plans gain sets, weight and rest per exercise, home widgets refresh on an interval you choose, older Garmin watches such as the Instinct 2X now sync, voice cues duck your music, and Body Energy counts respiratory records and holds steady after a heart zone edit.

Added

  • Elevation correction from offline elevation tiles. Older barometric altimeters drift, so an imported route carries wrong altitude and an inflated gain. Settings > Activities gains Elevation correction: import SRTM .hgt tiles (or a zip holding one) downloaded on a computer, switch on Correct altitude on import, and every route imported from then on - GPX, TCX, KML, KMZ and FIT, whether one file, a folder or a watch sync - takes its altitude from the tiles and has its gain recomputed with the same smoothing a recording uses. A route with even one point outside your tiles keeps the altitudes it came with, and the import log says so. Phone recordings and activities already in Health Connect are untouched. The app downloads nothing; the tile card links to the guide that says where to get them.
  • Sets, weight and rest per exercise in workout plans. A strength plan such as "lat pulldown, 3 sets of 12 at 50 kg, 2 min rest" took six rows to build. An exercise row now has Sets, Weight (kg) and Rest after each set. Saving unrolls the row so Health Connect and other apps see plain steps; loading folds identical runs back into one row. The weight goes all the way through: the guided run shows and speaks it and its banner adds "Set 2 of 3", the review form prefills it per set so a lighter or heavier set can be corrected before saving, and the workout detail shows a Weight row. Durations can be typed in seconds or minutes, and whole minutes read as "2 min" in the builder, the setup card, the run banner and the voice cues. Older drafts still load.
  • Choose how often home widgets refresh. 2.7.3 fixed the widgets at every 30 minutes. Settings > Display now offers 15, 30, 60 or 120 minutes; 30 stays the default, and changing it re-plans the running refresh at once. Android decides the exact moment, and shorter intervals use more battery.
  • Older Garmin watches sync too. Watches on Garmin's older Bluetooth transport, such as the Instinct 2X, used to pair and then fail on their first sync. They now sync and receive forwarded notifications. Live heart rate and step streaming need the newer transport, so such a watch syncs but shows no live readings. Body weight a watch relays from a paired Garmin scale lands in Health Connect. A watch that lists no files on the first try is asked a second way, and a sync cut off midway keeps what arrived and is reported as interrupted so the next sync retries the rest. Contributed by hawk01.

Changed

  • Voice announcements duck other audio. Announcements and plan cues spoke over music at full volume. They now hold audio focus while speaking, so music dips and comes back when the last queued cue ends. Speech is tagged as guidance, so headphones play it on the media stream.

Fixed

  • Body Energy counts respiratory records. The Respiration modifier always said "0 records": the 28-day respiratory baseline was never computed, and the day's records were only read once a baseline existed. Both now work the way HRV does.
  • Body Energy holds steady after a heart zone edit. Changing the zone mode made the score alternate between two values: today opened on the neutral 50 until the history was rebuilt, then jumped back on the next load. Today now keeps its last known value while the rebuild runs, the rebuild starts as soon as the setting is saved, and the dashboard card and detail screen reload once it lands.
  • The app icon renders on every launcher. The adaptive launcher icon was broken on some devices. The whole icon set, debug variant included, was redrawn as vectors following Android's adaptive icon guidelines. Contributed by Teccheck.
  • Imported route gain is smoothed. The gain of an imported route now goes through the same smoothing filter a recording uses, as the documentation already said, instead of a raw sum of every climb.
  • Translations. German updated to 99%; Polish is progressing on Codeberg Translate and will be offered in the language picker once it passes 70% coverage.

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.8.0.md. Edit it there; changes made here are overwritten.

Home

Features

How-to

App

Reference

Engineering

Proposals

Releases

Project

Clone this wiki locally