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
- @ZeSlammy made their first contribution in #1474
- @lev-ok made their first contribution in #1485
- @gPinato made their first contribution in #1506
- @izadiegizabal made their first contribution in #1503
- @bamonroe made their first contribution in #1530
- @zeusal made their first contribution in #1549
- @github-actions[bot] made their first contribution in #1581
- @dhruvinsh made their first contribution in #1603
- @dlip made their first contribution in #1602
Full Changelog: v0.16.9...v0.17.0