Releases: CodeWithCJ/SparkyFitness
Release list
v1.6.2
💙 Support SparkyFitness
If SparkyFitness has been useful to you & your family, please consider supporting the project. Your support helps cover recurring costs such as AI coding tools, development infrastructure, and Apple & Google Developer Program memberships to keep the project actively maintained.
🚀 Key Highlights
Mobile
💧 Individual Water Entries Sync — Sync individual water intake entries from Apple HealthKit and Android Health Connect.
🏃 Advanced Exercise & Workout Sync — Sync detailed workout data, including calories, GPS, heart rate, and more.
🖼️ Exercise Images — Add images to exercises for better visual guidance while working out.
🔄 Full Health Data Backfill — Sync your complete historical health data, not just new entries.
💊 Supplement Tracking — Track your daily supplements and keep your nutrition and wellness data organized.
Web
🍎 Food & Meal Images — Import and set images for foods and meals.
## What's Changed
Features
- fix(water): Allow sync individual water entries from Apple & Android health data by @CodeWithCJ in #2030
- feat(mobile): full history health data backfill by @apedley in #2032
- Feature: Supplement tracking by @jsandai in #2031
- fix: add logging for all mcp requests by @apedley in #2046
- feat: crossfade for exercise images by @apedley in #2047
- (feat) Mobile exercise & workout advanced details sync such as Cal, GPS, HR etc by @CodeWithCJ in #2042
- feat(ci): generate db_schema_backup.sql after merge by @apedley in #2065
- feat: import Garmin daily calorie totals by @kreativmonkey in #2019
- feat: add table type filter to reports table view by @dalekirkwood in #2066
- feat: add recording timezone and UTC offset to sleep entries by @apedley in #2070
- (feat) Added additional languages for Yazio food search by @CodeWithCJ in #2089
- fix(ai): derive FOOD_PROVIDER_TYPES from VALID_PROVIDER_TYPES to include swissfood (#2081) by @CodeWithCJ in #2090
- feat(mobile): support custom measurement entries by @Dragonk in #2061
- feat(mobile): support custom meal types by @Dragonk in #2063
- (Feat) Added ability to set images for food, meal in FOOD tab and as well as customizing further in Diary by @CodeWithCJ in #2102
- feat(chatbot): resolve update_entry/delete_entry by food name by @JonZavialov in #2103
- added support for image import while adding food from external providers by @CodeWithCJ in #2113
Fixes
- fix(frontend): match schedule-less medication entries to due doses by @CodeWithCJ in #2027
- fix(frontend): prevent double scaling of nutrient values in food diary CSV export (#2028) by @CodeWithCJ in #2029
- fix(auth): align signup password length validation by @jeffdecoste in #2039
- fix(tandoor): normalize recipe nutrition per serving by @jeffdecoste in #2041
- fix(medications): solve the absorption rate so the modeled curve peaks at tMax by @JonZavialov in #2036
- fix: aggregate based on metric time not on start time day by @apedley in #2044
- docs: validation for water containers and update docs by @apedley in #2045
- fix: pr2042 fixes by @apedley in #2048
- fix: browser refresh when api returns html by @apedley in #2058
- fix(docker): allow GARMIN_MICROSERVICE_URL and GARMIN_SERVICE_PORT overrides in compose files by @CodeWithCJ in #2067
- fix: prevent reports RangeError on large custom-measurement datasets by @dalekirkwood in #2060
- fix(auth): default email login enabled and unwrap passkey error objects by @CodeWithCJ in #2088
- fix(server): default missing entry_timestamp for non-daily custom measurements by @CodeWithCJ in #2091
- fix(mobile): crop label scans to a real framing guide; add library upload to label mode by @JonZavialov in #2095
- test(mobile): mock useMealTypes in DiaryScreen tests by @CodeWithCJ in #2108
- fix(frontend): sync reports cumulative calories and net balance with calorie goal adjustment mode by @CodeWithCJ in #2109
- fix(frontend): fit layout and dialogs to the viewport on mobile/PWA by @CodeWithCJ in #2110
- fix(frontend): stop the widget grid oscillating when a scrollbar toggle flips its breakpoint by @CodeWithCJ in #2111
Other Changes
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #2037
- (fix) Added Yazio in MCP tool by @CodeWithCJ in #2053
- fix: filter unused custom nutrients from food search by @apedley in #2055
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2068
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2085
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #2105
- chore: sync db_schema_backup.sql with migrations by @github-actions[bot] in #2106
- chore(i18n): sync translations from Weblate by @github-actions[bot] in #2107
- version update by @CodeWithCJ in #2116
New Contributors
- @jeffdecoste made their first contribution in #2039
- @kreativmonkey made their first contribution in #2019
- @dalekirkwood made their first contribution in #2060
Full Changelog: v1.6.1...v1.6.2
v1.6.1
💙 Support SparkyFitness
If SparkyFitness has been useful to you & your family, please consider supporting the project. Your support helps cover recurring costs such as AI coding tools, development infrastructure, and Apple & Google Developer Program memberships to keep the project actively maintained.
🚀 Key Highlights
- Period/cycle and Medications in mobile app has been fine-tuned.
- Workout/exercise in mobile app are premium like experience.
- Several fixes & feature updates
If you do not see the latest updates, please refresh the page or clear your browser cache.
As Google is decommissioning the Fitbit API, it is being replaced with the Google Health API.
Fitbit support will be removed once decommissioning is complete.
https://codewithcj.github.io/SparkyFitness/install/postgres-upgrade
What's Changed
Features
- feat: implement assumed set values for live workouts by @apedley in #1908
- feat(nutrition): allow multiple active meal plans and add template duplication by @CodeWithCJ in #1914
- fix(mobile/web): Android entry time & web report activity viz missing unit fix. by @CodeWithCJ in #1935
- feat: medications in mobile app by @andersmmg in #1920
- feat(medications): PK chart plot against dates by @JonZavialov in #1945
- feat: medication support in mcp by @andersmmg in #1951
- Mobile Medication updates by @apedley in #1963
- added option to feature & bug report for PR submission by @CodeWithCJ in #1966
- feat: update mobile meds dashboard card and detail screen by @apedley in #1973
- feat(mobile): update workout preset upon workout completion by @apedley in #1975
- feat(web): add dose and strength unit fields to med management by @apedley in #1976
- feat: add garmin connect nix module options by @Kidsan in #1972
- feat: add time format setting by @andersmmg in #1974
- feat: workout fg sound, keep screen awake, bug fixes by @apedley in #1993
- feat: add medication schedule management to mobile by @apedley in #1994
- (fix) Streamlined CSV import. Unified data parsing tech for number, date format etc by @CodeWithCJ in #2009
- feat: allow downloading latest backup from admin interface by @RealHirn in #1998
Fixes
- fix: derive dev widget bundle id from env by @apedley in #1921
- fix: mcp respond to get and delete requests by @andersmmg in #1922
- fix(food): preserve barcode on mobile scan and add OpenFoodFacts nutrient fallbacks by @CodeWithCJ in #1918
- fix(yazio): show correct servings in search and barcode scans by @thorethy1 in #1933
- fix(medications): file backdated dose entries under the day they were taken by @JonZavialov in #1947
- fix(ai): preserve system instructions for OpenAI-compatible reasoning models by @thorethy1 in #1949
- fix: correct calculation for new medications' adherence by @andersmmg in #1953
- Update WorkoutPlanAssignements to prevent double conversion by @Gtt1229 in #1964
- Support custom meal types in MCP food tools by @Dragonk in #1961
- fix: make meal container meal-type moves metadata-only by @Dragonk in #1982
- fix(workouts): allow saving completed workout plan sessions by @Dragonk in #1986
- fix: request iOS local network access by @XavitorX in #2006
- Fix timed workout playback by @salaamdev in #2010
- fix: parse count-bearing units in create_food + guard non-positive serving_size by @GraysonCAdams in #1924
Other Changes
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #1999
- chore(i18n): sync translations from Weblate by @github-actions[bot] in #2016
- chore(i18n): sync translations from Weblate by @github-actions[bot] in #2017
New Contributors
- @JonZavialov made their first contribution in #1945
- @Dragonk made their first contribution in #1961
- @Kidsan made their first contribution in #1972
- @RealHirn made their first contribution in #1998
- @XavitorX made their first contribution in #2006
- @salaamdev made their first contribution in #2010
Full Changelog: v1.6.0...v1.6.1
v1.6.0
💙 Support SparkyFitness
If SparkyFitness has been useful to you & your family, please consider supporting the project. Your support helps cover recurring costs such as AI coding tools, development infrastructure, and Apple & Google Developer Program memberships to keep the project actively maintained.
🚀 Key Highlights
- Unified versioning: Server, Web, and Mobile are now all v1.6.0, making it easier to identify compatible releases.
- Redesigned mobile workouts by @apedley. Thanks to everyone who shared feedback that helped improve the workout experience.
- Support for FIT file import is available now
- Add your food & exercises to Favorite option for easy logging.
- Period cycle & pregnancy tracking is now available in the mobile app.
- Entry time has been added to most logs. Set your preferred meal times, and the app will automatically detect the meal type.
- Settings have been reorganized, and CSV Import has been moved to Data Management.
- OIDC & Passkey authentication is now supported in the mobile app.
- Goals now include a Target Direction to indicate whether staying above or below the target is preferred.
- Numerous bug fixes, enhancements, and performance improvements across the project.
- Added a FAQ to the documentation to answer common questions and help new users get started.
If you do not see the latest updates, please refresh the page or clear your browser cache.
As Google is decommissioning the Fitbit API, it is being replaced with the Google Health API.
Fitbit support will be removed once decommissioning is complete.
Have caution. Below guide might have flaws. Research yourself before performing the upgrade. Some funcationality like auto backup within SparkyFitness will not work if you don't upgrade.
https://codewithcj.github.io/SparkyFitness/install/postgres-upgrade
What's Changed
Features
- feat(reports): customize measurement charts via dashboard-layout system by @jsandai in #1736
- Implementation of OIDC, Passkey and dynamic login form based on global admin settings by @CodeWithCJ in #1735
- fix for medication tab by @CodeWithCJ in #1755
- feat(food-import): add overwrite option and drop quick-food from CSV import by @CodeWithCJ in #1761
- feat: update outbound URL policy for local networks by @apedley in #1764
- feat(health-import): CSV import for measurements, sleep, water import by @CodeWithCJ in #1766
- support french in YAZIO integration by @TheToto in #1778
- Indicate calendar days that have progress photos (#1759) by @zeusal in #1784
- feat(ai): auto-transcode HEIC/HEIF images to JPEG in the AI dispatcher by @jsandai in #1785
- feat(diary): implement local time-of-day logging for food, exercise and preset entries by @CodeWithCJ in #1782
- feat(food-search): include recent and frequent meals in the search landing by @jsandai in #1790
- feat(ai): add Meta as an AI provider by @jsandai in #1791
- feedbacks changes on entry_time PR by @CodeWithCJ in #1799
- workouts v2 polish + keyboard fixes by @apedley in #1792
- feat: add FIT file import for gamin devices by @apedley in #1793
- Chatbot optimization by @CodeWithCJ in #1807
- Workouts v2: Active Workout Screen And Live Activity by @apedley in #1812
- ci: publish documentation on release instead of push to main by @CodeWithCJ in #1816
- feat(mobile): include recent and frequent meals in the food search landing by @jsandai in #1806
- feat: android passkey+oidc fixes and server config layout fixes by @apedley in #1821
- feat: add scheduled hourly auto-sync for Hevy provider & search enhancements by @CodeWithCJ in #1817
- feat: measurement form placeholders and use last button by @apedley in #1826
- feat(openfoodfacts): support self-hosted OFF via provider settings by @petermcneil in #1658
- feat: add calories and macros to diary on mobile by @BryceKrispiess in #1808
- Added buttons for Clear, Now and Default for time entries for food & exercise while adding to diary by @CodeWithCJ in #1839
- Diary calories and macros on mobile - new by @BryceKrispiess in #1841
- feat: add self-service "delete synced data by source" in Data Management by @CodeWithCJ in #1845
- feat: add medication log calendar and reports log table by @CodeWithCJ in #1851
- diary page UI alignment & added edit/delete fasting and check-in tab optimization by @CodeWithCJ in #1858
- doc update for ios Mobile app dev and updated configuration to use env variables for bundle id & group ids by @CodeWithCJ in #1859
- feat: favorite (starred) foods and meals by @jsandai in #1837
- Added Calculation direction(Min, Max or Target) and Added Sugar algorithm by @CodeWithCJ in #1852
- feat(mobile): add daily nutrition details and nutrient trends screens by @CodeWithCJ in #1860
- add initial support for Oura by @elemated in #1846
- added cycle & pregnancy feature to mobile app by @CodeWithCJ in #1864
- feat(mobile): add editable entry time to food and meal logging by @CodeWithCJ in #1865
- feat(mobile): fasting history with view, edit & delete by @CodeWithCJ in #1866
- feat(mobile,web): implement public sharing toggles, status badges, and fix web badge fallthrough by @CodeWithCJ in #1867
- feat(mobile): show meal calorie targets in diary and meal detail views by @CodeWithCJ in #1868
- feat(mobile): sync diary date across Dashboard, Diary, and logging screens by @CodeWithCJ in #1869
- (feat) Import Mood using CSV file and Sync dates between Diary, Dashboard & Library sections in mobile app by @CodeWithCJ in #1876
- CSV Import for Food diary & Mood & Consolidated all CSV Imports into Data management in Settings tab by @CodeWithCJ in #1880
- feat(helm): key in existingSecret and valueFrom in extraEnv by @abelfodil in #1877
- feat(helm): add extraObjects support by @abelfodil in #1886
- feat: add nasal_spray medication type by @andersmmg in #1891
- feat(system): add remote broadcast announcements and unified version management by @CodeWithCJ in #1895
- announcement fix by @CodeWithCJ in #1896
- Announcement fix & updated whatsnew in mobile app by @CodeWithCJ in #1897
Fixes
- fix: allow trailing decimals in serving size input by @apedley in #1745
- fix: mobile search fixes by @BryceKrispiess in #1741
- fix(mobile): health connect time zone and multi integration fix by @apedley in #1756
- test: fix long running test waiting for debounce by @apedley in #1757
- fix(security): update executeCommand to use argv execFile by @apedley in #1758
- Fix for run time error while clearing nutrition input by @CodeWithCJ in #1762
- fix(meals): await attachFoodsToMeals in remaining read paths by @jsandai in #1794
- yazio improvements by @thorethy1 in #1739
- fix(mobile): add request timeouts to all network calls by @apedley in #1801
- reset to page 1 on food search ch...
v0.17.3
💙 Support SparkyFitness
Support development if you find SparkyFitness useful.
Key Highlights
- 🤖 Your AI coach is now available on mobile
- ✨ Experience the refreshed Liquid Glass design (refer settings in mobile app)
- 💊 Medication tracking is now available on web
- 🌸 Period tracking is now available on web (refer settings)
- 🤰 Pregnancy tracking is now available on web (refer settings)
If you do not see the latest updates, please refresh the page or clear your browser cache.
As Google is decommissioning the Fitbit API, it is being replaced with the Google Health API.
Fitbit support will be removed once decommissioning is complete.
Have caution. Below guide might have flaws. Research yourself before performing the upgrade. Some funcationality like auto backup within SparkyFitness will not work if you don't upgrade.
https://codewithcj.github.io/SparkyFitness/install/postgres-upgrade
What's Changed
Features
- feat(ci): migration tests by @apedley in #1618
- feat(mobile): dashboard settings screen, settings fixes by @apedley in #1627
- Feature/Use native tabs on iOS by @thorethy1 in #1515
- feat(ai): add xAI (Grok) as an AI service provider by @jsandai in #1643
- feat(mobile): liquid glass tab bar toggle by @apedley in #1646
- feat(food-search): unified single-field food search (Phase 1) by @jsandai in #1607
- feat: chat bot web fixes and mobile port by @apedley in #1651
- Implementation of medication & GLP management. by @CodeWithCJ in #1637
- feat(food-search): All Providers aggregated search (mobile, phase 2) by @jsandai in #1654
- fix(mobile): sync Health Connect/HealthKit hydration to water intake by @CodeWithCJ in #1663
- [Feature]: Allow sub-tenth food quantities (e.g. 0.25 cup) by @jsandai in #1665
- [Feature]: Add a "Duplicate" action to the meal Actions menu by @jsandai in #1667
- feat: openai compat fix, test connection, vision specific ai by @apedley in #1673
- Feature/liquid glass native banners by @thorethy1 in #1661
- feat(security): isolate family sharing permissions and MCP Goal fix by @CodeWithCJ in #1671
- feat(onboarding): Persist skipping onboarding by @ikogan in #1687
- [feature] Custom Nutrient mapping to provider nutrient for auto import while importing a food from online by @CodeWithCJ in #1684
- feat(meals): implemented re-usable meals (linked sub-meals) by @CodeWithCJ in #1699
- feat(food-search): All Providers aggregated search on web (phase 3) by @jsandai in #1695
- feat: default food provider selector by @jsandai in #1697
- feat(food-search): Load more for single-provider online results by @jsandai in #1705
- native-header tests by @thorethy1 in #1682
- feat: upgrade to expo 56 by @apedley in #1709
- feat: update whats new section of app by @apedley in #1719
- (feat) Add period & pregnancy tracking by @CodeWithCJ in #1717
- feat: update labels for adaptive TDEE and fix tdee settings by @apedley in #1730
Fixes
- Check-in numbers rounding by @gPinato in #1606
- fix(garmin): garmin login change revert by @apedley in #1617
- fix: use env variable for provider_id instead of hardcoded 'oidc-env' by @l0r3v in #1628
- fix(reports): make maximized charts fit the viewport and stop Y-axis label clipping by @jsandai in #1630
- fix: coerce string-typed pagination fields in food search response (#1619) by @MohammadYusif in #1620
- fix(ai): drop Zod email() from the published manage_profile tool schema by @jsandai in #1650
- fix: preserve external data credentials on edit by @apedley in #1655
- fix(oidc): persist admin_group on provider update by @l0r3v in #1647
- fix(server): resolve TypeError when creating meal templates with non-default variants by @CodeWithCJ in #1662
- fix: allow decimal values for exercise duration by @apedley in #1664
- db: fix current_user_id() RLS crash during API key authentication by @CodeWithCJ in #1669
- Fix: FatSecret search calorie mismatch by @BryceKrispiess in #1679
- fix: preserve Garmin sync freshness on phase failure by @ag-linden in #1677
- fix(mobile): sync Heart Rate Variability (HRV) from Apple Health by @OlegA-X in #1676
- fix(mobile): show over calories as negative by @BryceKrispiess in #1698
- fix(mobile): chat input flicker by @apedley in #1700
- fix: locale-dependent date crash by @apedley in #1706
- Native header screen fixes by @thorethy1 in #1681
- Resolve an HTTP 500 error ("rawBody.startsWith is not a function") on POST /api/measurements/health-data when using Content-Type: application/json. by @CodeWithCJ in #1708
- fix: main site crash. remove redefinition of foodProviderOptions by @apedley in #1707
- fix: chat messages and keyboard now slide into place by @apedley in #1718
- fix: resolve sleep stage overlap and correct time asleep by @apedley in #1722
- fix: anchor Google Health sleep entries to the wake up day by @apedley in #1724
- fix: Update dev docs and compose file by @garakangas in #1725
- fix: YAZIO error when global provider by @kszkristof in #1721
- fix(frontend): support running container as non-root on port 8080 by @CodeWithCJ in #1729
- fix(mcp): normalize null optional parameters to undefined by @CodeWithCJ in #1731
Documentation
- fix docker-compose.yml download by @therumbler in #1683
Other Changes
- Fix nix update branch by @dlip in #1623
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #1624
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #1641
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #1644
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #1656
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #1674
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #1693
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #1702
- removal of SparkyFitnessMCP by @CodeWithCJ in #1726
- chore(nix): update pnpm deps hashes by @github-actions[bot] in #1727
New Contributors
- @l0r3v made their first contribution in #1628
- @MohammadYusif made their first contribution in #1620
- @therumbler made their first contribution in #1683
- @ag-linden made their first contribution in #1677
- @OlegA-X made their first contribution in #1676
- @garakangas made their first ...
v0.17.2
If you do not see the latest updates, please refresh the page or clear your browser cache.
ChatBot will automatically connect to MCP if the AI service is configured.
MCP is now served directly from the /mcp endpoint, for example: domain.com/mcp.
Use this endpoint for external tools such as n8n, OpenClaw, and similar integrations.
The dedicated SparkyFitnessMCP container is still available from the previous release, but it will be removed in the upcoming release.
As Google is decommissioning the Fitbit API, it is being replaced with the Google Health API.
Fitbit support will be removed once decommissioning is complete.
Write-back support for Apple Health and Google Health is part of an initial release.
This feature may require multiple iterations before it becomes fully stable.
Have caution. Below guide might have flaws. Research yourself before performing the upgrade. Some funcationality like auto backup within SparkyFitness will not work if you don't upgrade.
https://codewithcj.github.io/SparkyFitness/install/postgres-upgrade
💙 Support SparkyFitness
Support development if you find SparkyFitness useful — There is approximately $99 in remaining project expenses from mac mini, apple & google fees.
What's Changed
Fixes
Full Changelog: v0.17.1...v0.17.2
v0.17.1
BREAKING CHANGE - MUST READ BELOW
If you do not see the latest updates, please refresh the page or clear your browser cache.
ChatBot will automatically connect to MCP if the AI service is configured.
MCP is now served directly from the /mcp endpoint, for example: domain.com/mcp.
Use this endpoint for external tools such as n8n, OpenClaw, and similar integrations.
The dedicated SparkyFitnessMCP container is still available from the previous release, but it will be removed in the upcoming release.
As Google is decommissioning the Fitbit API, it is being replaced with the Google Health API.
Fitbit support will be removed once decommissioning is complete.
Write-back support for Apple Health and Google Health is part of an initial release.
This feature may require multiple iterations before it becomes fully stable.
Have caution. Below guide might have flaws. Research yourself before performing the upgrade. Some funcationality like auto backup within SparkyFitness will not work if you don't upgrade.
https://codewithcj.github.io/SparkyFitness/install/postgres-upgrade
💙 Support SparkyFitness
Support development if you find SparkyFitness useful — There is approximately $99 in remaining project expenses from mac mini, apple & google fees.
What's Changed
Features
Full Changelog: v0.17.0...v0.17.1
v0.17.0
BREAKING CHANGE - MUST READ BELOW
If you do not see the latest updates, please refresh the page or clear your browser cache.
ChatBot will automatically connect to MCP if the AI service is configured.
MCP is now served directly from the /mcp endpoint, for example: domain.com/mcp.
Use this endpoint for external tools such as n8n, OpenClaw, and similar integrations.
The dedicated SparkyFitnessMCP container is still available from the previous release, but it will be removed in the upcoming release.
As Google is decommissioning the Fitbit API, it is being replaced with the Google Health API.
Fitbit support will be removed once decommissioning is complete.
Write-back support for Apple Health and Google Health is part of an initial release.
This feature may require multiple iterations before it becomes fully stable.
Have caution. Below guide might have flaws. Research yourself before performing the upgrade. Some funcationality like auto backup within SparkyFitness will not work if you don't upgrade.
https://codewithcj.github.io/SparkyFitness/install/postgres-upgrade
💙 Support SparkyFitness
Support development if you find SparkyFitness useful — There is approximately $99 in remaining project expenses from mac mini, apple & google fees.
What's Changed
Features
- feat: add Google Health API integration by @ZeSlammy in #1474
- feat(mobile): edit ingredients of a logged meal by @jsandai in #1482
- feat(mobile): YAZIO provider integration - mobile food search, barcode scan and serving display by @thorethy1 in #1480
- Extend MCP tools for structured food, exercise, goals, and report data by @lev-ok in #1485
- Mobile Bug fixes + additions by @BryceKrispiess in #1444
- feat: Add Duplicate action to the food Actions menu by @jsandai in #1511
- Sync nutrition diary from Garmin Connect + by @gPinato in #1506
- feat: add outbound proxy support for HTTPS requests by @apedley in #1520
- feat: Add off-today date cues by @geracobo in #1500
- feat(health-connect): ingest Android Health Connect nutrition as food entries by @izadiegizabal in #1503
- Adaptive & Manual Goal mode implementation by @CodeWithCJ in #1519
- added supported for USDA to import multiple unit type variants by @CodeWithCJ in #1538
- feat(ai): add exponential backoff for Gemini quota errors (429) by @zeusal in #1549
- Added ability to copy from/copy to foods & meals from family member. by @CodeWithCJ in #1556
- Removal of super user extensions in postgres by @CodeWithCJ in #1558
- feat(web): add barcode manual entry and camera scanning to custom food form by @CodeWithCJ in #1562
- Import BMR from mobile by @BryceKrispiess in #1521
- feat: add check-in progress photos (front, back, side) by @zeusal in #1533
- feat(health-connect): write nutrition & hydration back to Health Connect (Android) by @izadiegizabal in #1529
- swissfood implementation for mobile app by @CodeWithCJ in #1568
- Formatted Whats New dialog and also added BREAKING CHANGE warning by @CodeWithCJ in #1573
- github issue template update and pr transaltion automation from Spark… by @CodeWithCJ in #1578
- feat: mobile date context improvements by @geracobo in #1526
- feat(mobile): copy a logged meal to another day by @jsandai in #1574
- feat: apple health nutrition sync and writeback by @apedley in #1585
- fix(mobile): send Origin header during login to satisfy better-auth CSRF checks by @CodeWithCJ in #1589
- feature: Added Global Food & Exercise data provider. by @CodeWithCJ in #1590
- Mobile Fast Tracking by @apedley in #1598
- Added ability to view, modify custom nutrients in the food form and food detail screens. by @CodeWithCJ in #1593
- feat(writeback): remove SparkyFitness data from the OS health store (rollback) by @izadiegizabal in #1599
- added ability to hide/resize widgets on the diary page by @CodeWithCJ in #1604
- feat: add exercise water loss to daily goal and activity report stats by @gPinato in #1605
- Add NixOS module by @dlip in #1602
- Add NixOS module by @CodeWithCJ in #1609
Fixes
- fix(mobile): show active calories by @apedley in #1499
- Keep nutrition fields editable when Auto-Scale is on by @jsandai in #1513
- fix: DATE column timezone shift by @apedley in #1518
- fix(measurements): repair DELETE /measurements/check-in/{id} (500 on every delete) by @bamonroe in #1530
- fix(foods): close Edit Food dialog correctly when cancelling past enrties sync by @CodeWithCJ in #1534
- fix: support user weight units in active workout playback and preset stats by @CodeWithCJ in #1535
- Backup setting fixes for web by @BryceKrispiess in #1537
- Next/prev month buttons on android not showing in dark/Amoled by @BryceKrispiess in #1528
- Fix zero body measurements from Garmin overwriting valid historical data by @gPinato in #1542
- Check in error/bug fixes by @BryceKrispiess in #1546
- split child RLS policies and enforce ownership check on variant deletion by @CodeWithCJ in #1552
- fix(server): resolve adaptive TDEE overestimation, tighten safety cap to ±500 kcal, and downgrade confidence for young trackers or logging gaps by @CodeWithCJ in #1555
- Fix garmin nutrition sync data loss by @gPinato in #1544
- Use adjusted calorie goal for summary and per meal targets by @gPinato in #1543
- fix(tandoor): handle literal "null" string and malformed source_url in recipe mapping by @CodeWithCJ in #1559
- fix(mobile): only show updated measurements on diary by @apedley in #1567
- fix for AI ChatBot using old 50 messages isntead of recent 50 messages. by @CodeWithCJ in #1570
- fix for missing nutritional value while creating meal via ChatBot by @CodeWithCJ in #1577
- fix(server): simplify meal retrieval by leveraging RLS for family library sharing by @CodeWithCJ in #1582
- fix(auth): resolve OIDC group sync, provider endpoint mapping, and client token auth issues by @CodeWithCJ in #1583
- fix: do not count both active calories and workouts by @apedley in #1588
- fix(garmin): resolving authentication usage by @dhruvinsh in #1603
Documentation
- external database doc update. by @CodeWithCJ in #1565
Other Changes
- Subtract dietary fiber caloric contribution from calorie target before calculating macro targets by @CodeWithCJ in #1531
- added pretieer for translation PR workflow by @CodeWithCJ in #1580
- chore(i18n): sync translations from Weblate by @github-actions[bot] in #1581
New Contributors
v0.16.9
BREAKING CHANGE
💙 Support SparkyFitness
Support development if you find SparkyFitness useful — There is approximately $158.58 in remaining project expenses.
🚀 New providers added: Yazio, Norish & Swish Food Database.
Add these under MCP container section.
SPARKY_FITNESS_SERVER_HOST: ${SPARKY_FITNESS_SERVER_HOST:-sparkyfitness-server}
SPARKY_FITNESS_SERVER_PORT: ${SPARKY_FITNESS_SERVER_PORT:-3010}
SPARKY_FITNESS_FRONTEND_URL: ${SPARKY_FITNESS_FRONTEND_URL:-http://0.0.0.0:3004}
You only needs these to be again added to MCP section if you had used these for Server container. Otherwise, you can skip these.
ALLOW_PRIVATE_NETWORK_CORS: ${ALLOW_PRIVATE_NETWORK_CORS:-false}
SPARKY_FITNESS_EXTRA_TRUSTED_ORIGINS: ${SPARKY_FITNESS_EXTRA_TRUSTED_ORIGINS:-}
Refer the updated docker compose as reference if above instruction is not clear.
What's Changed
Features
- Add update_exercise_entry action to MCP exercise tool by @Sapd in #1428
- Expose RPE, per-set notes, and cardio fields over the MCP exercise tool by @Sapd in #1430
- updated api doc to include public accessable and fixed API key auth issue in swagger UI by @CodeWithCJ in #1451
- Feature/yazio provider 1442 by @thorethy1 in #1458
- [Feature] Integration with Norish by @CodeWithCJ in #1464
- norish food provider integration - removal of any declaration by @CodeWithCJ in #1465
- [Feature]: Allow multiple images per AI food photo estimate by @jsandai in #1409
- Integration with Swiss Food Database provider by @CodeWithCJ in #1471
Fixes
- Fix empty MCP input schema on discriminated-union tools (manage_goals, etc.) by @Sapd in #1411
- fix(#1417): round set duration to the nearest minute by @fvtronics in #1418
- fix for sleep report error when sleep stage is not avialable from helth connect by @CodeWithCJ in #1422
- Garmin MFA & wider date range sync issue fix by @CodeWithCJ in #1423
- Fix average sleep time when bedtimes cross midnight by @Burton-David in #1416
- Withing sync to accept date range and sleep event in API permission by @CodeWithCJ in #1437
- Add unique (user_id, entry_date) indexes for check-in and mood tables (fixes #1424) by @Sapd in #1439
- docker health endpoint fix for MCP server by @CodeWithCJ in #1443
- User management fixes in ADMIN tab by @CodeWithCJ in #1445
- fix: add missing $27 placeholder for traces column in bulk food import by @o-Oby in #1427
- Corrected goal logic in diary page to handle adaptive TDEE and show accurate error message by @CodeWithCJ in #1446
- update swagger-jsdoc apis globs to scan TypeScript sources and nested… by @AlexBevan in #1447
- Swagger doc fixes by @CodeWithCJ in #1449
- removed swagger from public url by @CodeWithCJ in #1450
- fix(docker): update backend entrypoint to index.js to support secret files by @CodeWithCJ in #1452
- docker backend fix by @CodeWithCJ in #1453
- Tandoor nutrition fix for other languages by @CodeWithCJ in #1454
- test script fix for tandoor by @CodeWithCJ in #1455
- added ability save 6 months goals by grams or percetnage. by @CodeWithCJ in #1456
- fix: add cache: 'no-store' to all fetch to prevent empty 304 by @apedley in #1457
- perf: optimize sleep session db storage calls by @apedley in #1466
- fix: mobile banner and healthconnect source fixes by @apedley in #1470
- MCP direct API fix by @CodeWithCJ in #1472
New Contributors
- @Sapd made their first contribution in #1411
- @fvtronics made their first contribution in #1418
- @Burton-David made their first contribution in #1416
- @GasimGasimzada made their first contribution in #1431
- @AlexBevan made their first contribution in #1447
- @thorethy1 made their first contribution in #1458
Full Changelog: v0.16.8...v0.16.9
v0.16.8
💙 Support SparkyFitness
Support development if you find SparkyFitness useful — There is $168.58 in remaining project expenses.
Have caution. Below guide might have flaws. Research yourself before performing the upgrade.
https://codewithcj.github.io/SparkyFitness/install/postgres-upgrade
Add these under MCP container section.
SPARKY_FITNESS_SERVER_HOST: ${SPARKY_FITNESS_SERVER_HOST:-sparkyfitness-server}
SPARKY_FITNESS_SERVER_PORT: ${SPARKY_FITNESS_SERVER_PORT:-3010}
SPARKY_FITNESS_FRONTEND_URL: ${SPARKY_FITNESS_FRONTEND_URL:-http://0.0.0.0:3004}
You only needs these to be again added to MCP section if you had used these for Server container. Otherwise, you can skip these.
ALLOW_PRIVATE_NETWORK_CORS: ${ALLOW_PRIVATE_NETWORK_CORS:-false}
SPARKY_FITNESS_EXTRA_TRUSTED_ORIGINS: ${SPARKY_FITNESS_EXTRA_TRUSTED_ORIGINS:-}
Refer the updated docker compose as reference if above instruction is not clear.
What's Changed
Fixes
- Fix for missing user id column in food variant by @CodeWithCJ in #1407
Full Changelog: v0.16.7...v0.16.8
v0.16.7
⚠️ Important:
Have caution. Below guide might have flaws. Research yourself before performing the upgrade.
https://codewithcj.github.io/SparkyFitness/install/postgres-upgrade
Add these under MCP container section.
SPARKY_FITNESS_SERVER_HOST: ${SPARKY_FITNESS_SERVER_HOST:-sparkyfitness-server}
SPARKY_FITNESS_SERVER_PORT: ${SPARKY_FITNESS_SERVER_PORT:-3010}
SPARKY_FITNESS_FRONTEND_URL: ${SPARKY_FITNESS_FRONTEND_URL:-http://0.0.0.0:3004}
You only needs these to be again added to MCP section if you had used these for Server container. Otherwise, you can skip these.
ALLOW_PRIVATE_NETWORK_CORS: ${ALLOW_PRIVATE_NETWORK_CORS:-false}
SPARKY_FITNESS_EXTRA_TRUSTED_ORIGINS: ${SPARKY_FITNESS_EXTRA_TRUSTED_ORIGINS:-}
Refer the updated docker compose as reference if above instruction is not clear.
What's Changed
Features
- feat(mobile): equivalent serving sizes by @apedley in #1319
- chore: update expo to v55 by @apedley in #1331
- Feat/mobile net carbs by @jsandai in #1339
- feat(mobile): fix food search for smaller screens by @apedley in #1351
- feat: add error handling for fatsecret by @apedley in #1374
- Updated chatbot to use MCP server by @CodeWithCJ in #1377
- feat(mobile): add Camera shutter toggle in App Settings by @jsandai in #1381
- feat(mobile): add gallery picker to food photo estimate by @jsandai in #1376
- feat: AI assisted conversions by @BryceKrispiess in #1324
- Added support for multiple images in AI Chatbot. by @CodeWithCJ in #1401
- feat(#1014): allergen tracking from OpenFoodFacts with user preferences and warning badges by @bulkinglb in #1370
Fixes
- fix(ci): attach files to releases with correct pnpm version by @apedley in #1330
- fix(#1290): use custom identity endpoint for email change by @bulkinglb in #1333
- fix(mcp): publish proper inputSchema for sparky_manage_* tools by @ATECHPCS in #1343
- fix: add patches and shared to docker by @apedley in #1352
- Adjusted slider behavior at personalplan.tsx by @Tronus1409 in #1357
- fix(mobile): don't send etag to prevent cache issues by @apedley in #1360
- fix(mobile): update healthkit record sync to capture distance by @apedley in #1368
- fix for MCP Server double-scales logged food nutrients in the diary by @CodeWithCJ in #1369
- PolarFlow API replacement by @CodeWithCJ in #1383
- polar api endpoint fixes by @CodeWithCJ in #1392
- fix: preserve model name on AI Service by @BryceKrispiess in #1386
- Gemini feedback on bcryptjs changes by @CodeWithCJ in #1394
- support for x64 and arm64 images due to docker optimization by @CodeWithCJ in #1396
- Updated chatservice to Forward proxy headers so Better Auth accepts secure cookies over internal HTTP by @CodeWithCJ in #1397
- better-auth proxy forward issue between server and mcp server to handle non-https route by @CodeWithCJ in #1399
- Fix Health Connect body fat sync mapping by @geracobo in #1403
Documentation
- docs(#1346): add build from source instructions to README by @bulkinglb in #1349
Other Changes
- Updated bcrypt to bcryptjs and optimized Dockerfile.backend for better speed. by @CodeWithCJ in #1393
- Delete SparkyFitnessServer/db/migrations/20260527120000_add_allergens… by @CodeWithCJ in #1402
New Contributors
- @bulkinglb made their first contribution in #1333
- @Tronus1409 made their first contribution in #1357
- @geracobo made their first contribution in #1403
Full Changelog: v0.16.6.3...v0.16.7