Features
- Bulk Food Import via paste JSON or upload CSV (Settings → Import & Export)
- Live nutrition preview on the Add to Diary sheet (macros update with portion / unit / servings)
- Mass-aware unit conversion when scaling nutrition (g ↔ oz ↔ lb, ml ↔ cup, tsp ↔ tbsp)
- Custom Units in Settings (“shot”, “scoop”, “stick”, etc.)
- Scan Label: snap a photo of a nutrition label and the AI Assistant fills in the values
- Smart Share / View on OFF: existing Open Food Facts products link straight to their wiki page for editing; new ones get a Share button to contribute back
- Connection status banners across every integration with one-tap Test / Sync / Disconnect
- Settings auto-save by default; no Save button to remember
- Day rollover at midnight when the app stays open overnight
- Barcode scanner now fully on-device on Android, no Google Play Services required (works on GrapheneOS / CalyxOS / e/OS)
- Custom nutriment order from Settings is reflected everywhere (food editor, meal editor, diary nutrition bar)
- Vitamin D, Calcium, Iron, and Potassium visible by default on new installs (FDA Nutrition Facts label mandatory fields)
- Svelte 5 + Vite 6 + Express 5 + bcryptjs 3 framework upgrade (main bundle ~22% smaller)
Fixes
- Disabling user management no longer triggers the setup wizard on every reload (#34)
- Data APIs in single-user mode no longer return 503 “Setup required” on every call (#34 part 2)
- Single-user mode: only the first food item added each day was visible in the UI. SQLite quirk on null
user_id. Includes a one-time migration that recovers items already in the database (#37) - Food saves on Android no longer duplicate the previous food (#32)
- “Most Used” / “Recently Used” food sort on Android now reflects real usage
- MyFitnessPal Reports → Export CSV imports cleanly now (aggregate-per-meal shape)
- Wellness scores refresh if today’s sleep finishes syncing after the morning snapshot
- Import Nutrition History action row no longer overlaps the duplicate-date radios (#33)
- Barcode scanner no longer gets stuck re-opening the camera after a scan
- Barcodes that don’t match anything in OFF now drop you in the food editor with the code prefilled instead of a dead-end toast, so you can contribute the product back
- Open Food Facts contribution now sends correct per-serving values and uploads your product image (both were silently broken)
- AI Assistant respects
AI_ENABLED=trueand the fullAI_*env-var set; toggle, settings card, and chat all honour the proxy (#36) - kcal / kJ values are consistent everywhere now: food editor, diary footer, meal totals, statistics, goals, weekly summary email, push notifications (#38)
- AI Assistant Gemini models updated to 2.5 Flash + Lite (Google retired 2.0 Flash and 1.5 Flash)
- nodemailer updated to 8.0.7 (patches an SMTP command-injection advisory)
- Several smaller things, see the full changelog
Signed APK + docker image on the release page.
Self-hosted, AGPL-3.0, no telemetry, no account needed. docker compose up and go.



My wife recently bought a Thermomix. I wonder if Cookidoo has an API or some other way to integrate with NutriTrace to help make data input as frictionless as possible.
Cookidoo has no public API and their ToS prohibits scraping, so a direct integration would be both legally fragile and maintenance-heavy (the scraper breaks on every UI change Vorwerk pushes). The indirect path that works today: Mealie is a self-hosted recipe manager that imports Cookidoo URLs as one of its many recipe sources, and NutriTrace has Mealie integration built in (Settings → Mealie). Your wife adds recipes from Cookidoo into Mealie once, and they show up as searchable foods in NutriTrace with full nutrition.
Also worth mentioning: I’ve got a sister app called CookTrace (may not be final name) in development as a purpose-built self-hosted recipe manager that pairs natively with NutriTrace (same UI patterns, same AI assistant, federation already wired between them). It has a schema.org Recipe scraper for URL imports, though Cookidoo itself is gated content so it’d still need either a Mealie middle layer or manual entry. Currently private; aiming for a public release in the next month or so.