NutriTrace
Self-hosted personal nutrition and calorie tracker
Alternative to: myfitnesspal, cronometer, lose it, waistline

About
Versions (95)
v1.2.0-dev05
2026-08-16Fifth dev pre-release of the 1.2.0 minor. Bug fixes from the community issue tracker plus a shared image cropper contributed by @librarian.
Added
- POST /api/v1/activity (#154). External services can log a manual activity entry via API using the new
write:activityscope. Supportsexternal_idfor idempotent posts. - MCP
create_foodaccepts common nutriment aliases (#103 followup).protein,carbs,vitamin-b12and other legacy keys are now mapped to the canonical NUTRIMENTS names. A one-time backfill also renames any prior rows written with the wrong keys.
Changed
- Comma decimal separator supported across numeric inputs (#160). Portion, quantity, nutrition per 100 g, weight, body measurements, water custom amount, Quick Calories, and recipe amount all accept either
,or.. Comma-locale users can type “2,5” without fighting the form. - Image cropper is now shared across Food/Meal/Recipe editors (#159, thanks @librarian). One component, resize handle, and proper touch support. Meal editor used to be mouse-only and had a hardcoded 200 px box stuck near the top-left; now centered, resizable, and works on phones.
- Cropper output standardized at 512 px and the resize handle grown to 44 px for comfortable tap targets.
- Stats default metric honors category order (#155). Opening the Statistics tab picks the first metric under Settings > Statistics category order, skipping wearables that aren’t connected, body stats you’ve hidden, and water when it’s turned off.
- Screen wake lock held during in-flight AI and Scan Label requests (#158). Slow-model calls no longer die on screen timeout mid-request.
- Editor drafts persist to localStorage (#157). If the OS kills the WebView while the camera is up (Samsung lmkd behavior on lower-RAM devices), the Food/Meal editor restores what you’d typed on the next open. 4-hour TTL.
Fixed
- Add-to-Diary button no longer duplicates entries under mash-click (#156). The button now disables the moment you tap it and stays disabled until the save completes, so extra taps during a slow write don’t fire extra PUTs.
- Same-day copied diary items no longer look like duplicates on the local device. Each copy gets a fresh uuid so the row keys are unique.
- Android diary photo hydration no longer full-scans the foods and meals tables on every diary read. Queries are now targeted at the items actually on the day.
- Android external https images load directly instead of being routed through
/api/proxy(was slow and unnecessary on native).
Security
- No new dependencies.
npm auditreports 0 vulnerabilities.