NutriTrace logo

NutriTrace

Self-hosted personal nutrition and calorie tracker

Alternative to: myfitnesspal, cronometer, lose it, waistline

NutriTrace screenshotNutriTrace screenshot

About Versions (107)

v1.2.1-dev04

2026-09-04

Fourth dev pre-release of the 1.2.1 patch cycle. Community bug-fix cluster on #198, #199, and #201, plus a new opt-in Wellness → Body Stats weight mirror (#200). Also includes a diary-merge fix ported from LiftTrace.

Added

  • Opt-in “Mirror wellness weight to Body Stats” toggle (#200). Settings → Wellness has a new toggle (off by default). When on, weight readings that come in via Health Connect also populate that day’s diary Body Stats weight, so the Body Stats widget on Diary and the Weight goal on Goals both light up from your scale reading. Manual Body Stats entries are never overwritten; the mirror only fills days that are currently empty. Withings has always applied this mirror unconditionally, so its behavior stays the same regardless of the toggle.
  • Custom nutrients now appear in the Food Editor (#201). Nutrients you create in Settings → Nutrients (Copper, Manganese, Selenium, whatever) now show up in the Food Editor’s nutrition grid, accept a per-100g value, save correctly, re-hydrate on next edit, flow through into diary totals, and participate in the linked-portion proportional-scaling. Bulk food import and the MCP create_food tool still recognize built-in ids only; follow-ups if anyone asks.

Fixed

  • /api/diary payload was ballooning to 50MB when a food had a base64 image (#199). The diary hydrator was stamping a food’s img_url onto every diary item referencing it across every date; a 430KB camera photo on one recipe would multiply into tens of megabytes across a busy library. Three-part fix: the hydrator now skips data: URLs so it can’t amplify them, the sync-push path routes incoming img_url values through the same /uploads/ localizer that direct POST already uses (so native camera-photo foods stop landing raw), and a one-shot boot migration converts any existing data: img_url in foods and meals to real /uploads/ files. On next restart your diary thumbnails reappear automatically with no manual re-pick. Diagnosed by @tellis82.
  • Multi-select cancel + delete were invisible in the wide-screen Diary layout (#198). The wide-layout rule was hiding the whole top-right action row (correct for the normal water / summary / body-stats icons since the right rail carries parity for those), but the multi-select cancel + delete live in the same row and the rail has no select-mode UI, so wide-screen users had no visible way to act on a selection. Row now stays visible whenever select mode is active. Diagnosed by @tellis82 to the exact selector.
  • Diary merge preserves client-side reorder (port of the same fix landed in LiftTrace on 2026-08-31). If you drag an item to reorder within a meal on the client, the server merge now honors that order instead of restoring the prior sequence on the next pull.

Security

  • No CVE-driven dependency bumps this cycle. npm audit --production reports 0 vulnerabilities; no open Dependabot alerts.