Skip to content

OpenVitals 2.4.1

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

Released 2026-08-01.

A paired Garmin watch learns two new tricks - your phone's notifications on the wrist, and step counts that finally match it - while readiness moves in with Body Energy and the dashboard puts the tiles you actually use first.

Added

  • Phone notifications on a Garmin watch. Turn on Send notifications to the watch on the watch's screen and your notifications appear on the wrist, where they can be dismissed, answered or acted on. No Garmin account, no Garmin Connect, no network - the watch is spoken to over its own Bluetooth protocol, and the app still ships no INTERNET permission. Off by default; an Apps to silence list decides what gets through. Experimental, verified against a vívoactive 5.
  • Daily Readiness lives inside Body Energy now. The two screens described the same day from adjacent angles, so they are one view: the battery first, then the readiness verdict, what moved it, and what it means for today. The verdict finally weighs the measured battery - no combination of good sleep and calm vitals can outvote arriving at the day drained. The old standalone screen and its app-bar icon are gone; a readiness home-screen widget keeps working and opens the merged view.
  • Drink from the notification. The hydration reminder carries two quick-add buttons with the last two cup sizes you used ("Add 350 ml" / "Add 250 ml"). One tap logs the drink in the background - the app never opens - and the reminder is dismissed. Android only; iOS keeps the plain tap-to-open reminder.
  • The dashboard sinks tiles with no data below the ones with some. What you actually track is in reach without manual reordering; your saved order still rules within each group, and edit mode shows the true order so drags land where they look. Straight from user feedback, implemented verbatim.
  • Import reports can be shared. The CSV importer's result, the Apple Health import card and the device-sync report can now send the report to another app - a message, an email attachment - through the system share sheet, as an attached .txt.

Fixed

  • Steps from a Garmin watch now match the wrist. The monitoring counters are differenced per activity type against a per-day watermark, the day's last quarter-hour is no longer silently dropped, and an untyped whole-day restatement can no longer mint steps that were never taken. The failure modes this closes were spectacular: 6,323 steps arriving as 19,906, days re-counted once per sync, every day short by its final minutes. The algorithm now follows Gadgetbridge's, translated to Health Connect.
  • Elevation gain is no longer inflated by GPS noise. A real 750 m climb saved as ~15 km: every metre of GPS jitter was banked as climb, thousands of times an hour. Altitudes are now smoothed and thresholded the way the barometer path always was, the live recording dashboard shows the same figure that gets saved, and climbs below the noise floor honestly report zero.
  • One bad sleep record no longer stretches the schedule chart to 36 hours. A physically impossible night (16 h or more) no longer sets the week/month chart's scale; it is still drawn, clipped, so the anomaly stays visible.
  • The top-bar battery icon means something again. It shows only for devices the Sensors & devices screen actually lists - pairing a smartwatch no longer puts up an icon that opens an empty screen.
  • Saving an import report on Android lands somewhere you can reach. Save went through a picker Android does not implement and fell back to an app-private folder ("Report saved," for a file no file manager shows); the device-sync report's save button crashed outright. All report saves now use the same working dialog the route export always had.
  • The Apple Health import card no longer crashes the app when Settings closes mid-load.

German, Italian and Estonian translations are complete (machine-assisted, awaiting native-speaker review - corrections welcome on Codeberg Translate), and Spanish keeps flowing in from Weblate.

The Codeberg and Play builds keep the same package name and signing certificate, so this installs as a normal update.

Distribution flow:

  • Codeberg release with per-ABI signed APKs (arm64-v8a and armeabi-v7a) and signed Android App Bundle assets.
  • Direct Google Play production upload from the approved Woodpecker deployment.

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

Home

Features

How-to

App

Reference

Engineering

Proposals

Releases

Project

Clone this wiki locally