Important
💾 Upgrade Notice: Always remember to back up your database and environment before upgrading to a new version.
👍 Community Prioritization: Want to see a specific feature or fix in the next release? Add a 👍 reaction to open Issues to help us prioritize what to build next!
🚀 Key Highlights
- Adaptive calorie budgets: Dynamic Goal and Percentage Earn-Back no longer add activity calories or optional BMR credit to an Adaptive target a second time. Remaining calories may be lower after upgrading because these duplicate credits are removed. Recorded activity remains visible, and Manual targets retain their existing earn-back behavior.
What's Changed
Features
- feat(mobile): supplement barcode scanning by @Jerrys-modz in #2796
- feat(mobile): add Lock Screen widgets and controls for calories, water, fasting and food- #133 by @Jerrys-modz in #2814
- feat(exercises): add a warm-up set generator to the active workout by @Jerrys-modz in #2795
- feat(mobile): log a mood check-in and show it on the dashboard by @Jerrys-modz in #2820
- feat(mobile): add an iOS water widget with a log-a-drink button by @Jerrys-modz in #2822
- feat(mobile): fill in a supplement from a photo of its label by @Jerrys-modz in #2816
- Feat(mobile): Celebrate personal records on the watch by @Jerrys-modz in #2824
- Feat(watch): log effort (RPE) after a set by @Jerrys-modz in #2827
- feat(mobile): show the exercise, set, and target on the workout Live Activity by @Jerrys-modz in #2828
- Feat (Mobile): add fasting settings and fasting report by @Jerrys-modz in #2830
- feat(mobile): create and edit workout plans by @Jerrys-modz in #2842
- feat(mobile): GLP-1 injection tracking by @Jerrys-modz in #2844
- feat(watch): add Fasting and Steps pages, fasting from the wrist, and macro, fasting and steps complications by @Jerrys-modz in #2845
- Feat(mobile): Add water tracking settings to the mobile water containers screen by @Jerrys-modz in #2847
- Feat(watch): medications page by @Jerrys-modz in #2850
- feat(mobile): record GPS activities (walk, run, ride) by @Jerrys-modz in #2855
- feat(watch): edit the running workout from the watch: add and delete sets and exercises, set type by @Jerrys-modz in #2858
- feat: weight trend, weekly rate and projected goal date on the web Reports chart and the mobile dashboard by @Jerrys-modz in #2865
- feat(mobile): auto-pause, voice cues, laps, start countdown and pace chart for GPS recording by @Jerrys-modz in #2864
- Feat(mobile): goals screen by @Jerrys-modz in #2871
- Feat(mobile): reports hub by @Jerrys-modz in #2872
- feat(mobile): record indoor sessions and estimate their distance from steps by @Jerrys-modz in #2874
- feat(watch): record a walk or run, indoors or out, from the watch alone by @Jerrys-modz in #2876
- feat(mobile): timed interval plans (run/walk, speed repeats) for GPS recordings by @Jerrys-modz in #2875
- feat(mobile): show the water from food on the watch Water page by @Jerrys-modz in #2878
- feat: optional run programs (Beginner 5K to marathon) that Sparky can adjust, and open recorded runs from the diary by @Jerrys-modz in #2884
- feat(watch): walks and runs on the Apple Watch with plans, live view, phone start, toggles, pace and heart-rate alerts, Live Activity, GPX export, treadmill calibration and personal records by @Jerrys-modz in #2890
- feat(chat): add editable voice dictation on web and mobile by @romanchenkop in #2755
- feat: add daily steps goal by @Jerrys-modz in #2899
- feat: training load, and a run program that adapts (ease back after a break or a spike, effort rating in the Diary by @Jerrys-modz in #2910
- feat: coaching audio for runs on the phone and the watch (program-aware, countdown, milestones, suggested ranges) by @Jerrys-modz in #2905
- feat(mobile): allergen settings, food badges, and scan warnings by @Jerrys-modz in #2906
- feat(nutrition): add Swedish Food Agency (Livsmedelsverket) integration by @nalvazhvu in #2911
- feat: interval steps by distance (6 × 400 m, 5 × 1 km, custom, metres or miles) by @Jerrys-modz in #2909
- feat(mobile): scan nutrition labels while editing foods by @Bl4nk24 in #2916
- feat(mobile): program calendar, your own plans and race plans by @Jerrys-modz in #2926
- feat: add running shoe inventory with mileage tracking by @Jerrys-modz in #2925
- feat: running trends (weekly mileage, long run, efficiency, race time estimates) on mobile and web, and a pace chart in the web cardio list by @Jerrys-modz in #2931
- feat(mobile): symptom severity chart, calendar and episode detail by @Jerrys-modz in #2943
- feat: nine more training programs, 3 or 4 run choice, race-based pace ranges and new workout types by @Jerrys-modz in #2946
- feat(mobile): manage custom nutrients, nutrient display and custom nutrient goals by @Jerrys-modz in #2944
- feat(frontend): compare and time-lapse progress photos on the web by @zeusal in #2965
- feat(mobile): register Turkish (tr) as a shipped locale by @tugkanboz in #2959
- feat: add GPT-6 reasoning settings and cited food research by @MetalHepple in #2807
- feat: add recoverable food tasks and lasting preferences by @MetalHepple in #2808
- feat(mobile): add app icon quick actions and Quick Settings tiles on Android by @zeusal in #2989
- feat(mobile): add configurable "Remind in" medication snooze by @vcdx71 in #3005
- feat(mobile): optional energy and focus ratings and a journal box on the mood check-in by @Bubbles840 in #3012
- feat(server): several mood check-ins per day behind a version header by @Bubbles840 in #3013
- feat(google-health): attach overnight HRV and resting heart rate to sleep entries by @Bubbles840 in #3003
- feat(frontend): show the day's mood check-ins with add, edit and delete by @Bubbles840 in #3016
- feat(mobile): rework the exercise History tab and use logged effort (RPE) by @Jerrys-modz in #3008
- feat(mobile): add Top Sources card to nutrient trends by @Jerrys-modz in #3009
- feat(mobile): record cadence and stride length on phone-recorded runs, and share a workout as an image overlay by @Jerrys-modz in #3014
- feat(mobile): add the Android water widget by @zeusal in #3020
- feat(health-connect): attach overnight HRV and resting heart rate to sleep by @Bubbles840 in #3019
- feat(mobile): log several mood check-ins a day with a day view by @Bubbles840 in #3018
- feat(routes): saved routes library by @Jerrys-modz in #3022
Fixes
- fix(mobile): align placeholders and plural forms in German locale by @nalvazhvu in #2788
- ci(android): increase Gradle heap memory to prevent OOM during release packaging by @nalvazhvu in #2799
- fix(ci): ensure newline when appending gradle caching property by @nalvazhvu in #2803
- fix(integrations): make sleep, custom category and check-in writes safe when they overlap by @SisyphusMD in #2777
- fix(workout-plans): keep workouts logged from a plan when it is edited or toggled by @DUC750 in #2781
- fix(mobile): only ask to update a preset when its structure changed, and ask on the watch when Finish is tapped by @Jerrys-modz in #2794
- fix(goals): edit goal weight from the Goals page by @Jerrys-modz in #2817
- fix(frontend): constrain calendar month and year dropdowns by @D1822787566 in #2818
- fix(frontend): stop browser page translation from crashing the web app by @DUC750 in #2832
- fix(ai): support Claude Haiku/Sonnet/Opus 5.5 on Anthropic by @yuisheaven in #2837
- fix(workouts): give each exercise its own time and duration in live sessions by @DUC750 in #2843
- fix(garmin): persist total_calories from daily summary sync by @cpruijsen in #2813
- fix(health-data): copy resting heart rate and VO2 max into the daily wearable summary by @DUC750 in #2846
- fix(ai): use JSON mode for DeepSeek OpenAI-compatible endpoints by @liavah in #2852
- fix(mcp): don't count servings twice when the diary reference is in servings by @DUC750 in #2854
- fix(workouts): keep the stored duration of resumed exercises by @DUC750 in #2848
- fix: classify stair workouts and show floors climbed and elevation gain by @Jerrys-modz in #2861
- fix(workouts): keep preset session exercises in their planned order by @Jerrys-modz in #2877
- fix(server): keep the heart rate series a watch sends with a run by @Jerrys-modz in #2879
- fix(watch): un-log a set from the watch, and follow an un-log made on the phone by @Jerrys-modz in #2880
- fix(ai): downscale oversized food photos and handle patch limit errors by @nalvazhvu in #2882
- fix(mobile): keep the mindfulness modals clear of the Android system bars by @zeusal in #2892
- fix(mobile): build production iOS on the Xcode 27 image by @Jerrys-modz in #2889
- fix(mobile): handle Android Back in the Add sheet by @zeusal in #2895
- Localize onboarding using selected language by @Yukixu0106666 in #2891
- fix(server): convert the chatbot's mood score to the scale it is stored on by @zeusal in #2508
- fix(i18n): make hardcoded web strings and symptom chips translatable by @Jerrys-modz in #2893
- fix(settings): keep a hydration factor of 0 when saving a drink preset by @developerjillur in #2907
- fix(mobile): use a CJK-capable font for iOS chart axis labels by @Jerrys-modz in #2914
- Fix Sparky voice input failing on bare 'en' locale by @Jerrys-modz in #2922
- fix(check-in): align measurement inputs across columns by @romanchenkop in #2923
- fix(mobile): recover from unregistered activity result launcher on photo picker by @nalvazhvu in #2932
- fix(mobile): prevent Apple Health meal import double-counting by @nalvazhvu in #2933
- fix(server): keep sports without a distance standard out of the perso… by @Jerrys-modz in #2930
- fix(mobile): keep the set keyboard bar above Android's navigation bar by @zeusal in #2942
- fix(usda): map Vitamin A using RAE nutrient id 1106 by @nalvazhvu in #2947
- Fix FIT import dating activities 20 years ahead by @Elvan-DUVAL in #2962
- fix(food): define named portions on web and mobile by @Bl4nk24 in #2919
- fix(calories): avoid duplicate activity and resting-only workout credit by @Bl4nk24 in #2940
- fix: save diary meals with unlinked or zero-quantity ingredients by @MetalHepple in #2901
- fix(mobile): allow label library without camera permission by @Bl4nk24 in #2980
- fix(fatsecret): keep the OAuth error code on token rejections so premier entitlement failures start the cooldown by @SisyphusMD in #2977
- fix(googlehealth): store activity minutes from Google's daily rollups, read core temperature from temperatureCelsius by @benjamin-m-holden in #2969
- fix(frontend): honor the 24-hour time format preference in time fields by @0xN1C04ND3 in #2974
- fix(mobile): re-request Apple Health access so existing installs grant caffeine by @SisyphusMD in #2971
- fix(exercise): estimate calories when the log dialog field is left blank by @Jerrys-modz in #2983
- Feature: Keep adaptive goal mode when saving macro-only goal changes by @Jerrys-modz in #2984
- fix(frontend): start date picker weeks on the Start Day of the Week preference by @0xN1C04ND3 in #2987
- fix(exercises): relax strictness on exercise entry and progress response schemas by @nalvazhvu in #2992
- fix: verify food portions and provider identity before logging by @MetalHepple in #2806
- fix(mobile): handle Android medication notification actions in backgr… by @vcdx71 in #2985
- fix(garmin): answer the pending MFA challenge instead of signing in again by @SisyphusMD in #2995
- fix(api-docs): quote the run-program swagger description by @SisyphusMD in #2997
- fix(tdee): cache adaptive TDEE for 5 minutes instead of an hour by @SisyphusMD in #2999
- fix(backup): delete the uploaded archive after a restore by @SisyphusMD in #3000
- fix(mobile): apply progression to workouts started from the watch by @Jerrys-modz in #3010
- fix(nix): fix obsolete system reference by @giggio in #3015
- fix(mobile): keep the calorie and macro widgets' midnight refresh going after a failed redraw by @zeusal in #3021
- fix(frontend): hide the token expiry for providers that refresh it automatically by @SisyphusMD in #3023
Other Changes
- chore(umbrel): update app package to v1.8.0 by @github-actions[bot] in #2791
- chore(helm): update chart version to v1.8.0 by @github-actions[bot] in #2790
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2805
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2809
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #2887
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2888
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2902
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2903
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2904
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2924
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2928
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2945
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2981
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #2990
- chore(i18n): sync translations from Weblate by @github-actions[bot] in #2991
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2993
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #3017
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #3024
- chore(i18n): sync translations from Weblate by @github-actions[bot] in #3025
New Contributors
- @D1822787566 made their first contribution in #2818
- @yuisheaven made their first contribution in #2837
- @cpruijsen made their first contribution in #2813
- @liavah made their first contribution in #2852
- @Yukixu0106666 made their first contribution in #2891
- @developerjillur made their first contribution in #2907
- @Elvan-DUVAL made their first contribution in #2962
- @MetalHepple made their first contribution in #2901
- @benjamin-m-holden made their first contribution in #2969
- @0xN1C04ND3 made their first contribution in #2974
- @tugkanboz made their first contribution in #2959
- @vcdx71 made their first contribution in #2985
- @Bubbles840 made their first contribution in #3012
Full Changelog: v1.8.0...v1.9.0