NutriTrace is a self-hosted nutrition + wellness tracker, alternative to MyFitnessPal / Cronometer / LoseIt. Runs entirely on your own server: no telemetry, no analytics, no account hosted by anyone but you. First public release was 26 April 2026; currently at v1.0.0-rc.42.
Repo (AGPL-3.0) · Release notes + APK · CHANGELOG
What’s new in this release
- AI Meal Photos. Attach a meal photo and Trace returns an editable FDA-style Nutrition Facts card. Save as Quick Calories (one-off) or as a reusable Food entry in your library. Estimates cover the full ~30-nutrient profile, not just the headline macros.
- LiftTrace workout sync. The sister weightlifting app can now push completed workouts to NutriTrace via the federation API. Sessions appear in Workout History alongside Fitbit / Garmin / Health Connect, and feed the dynamic calorie goal.
- Smart Log Voice Input Language picker. Pick the mic language independently of device locale (useful if your device is set to English but you speak another language at meals).
- API Tokens panel is now open to single-user installs (was multi-user + env-gated before).
- Wizard celebration screen on onboarding completion.
Fixes worth calling out
- Local Open Food Facts mirror search returning empty results despite the backend finding real hits (DuckDB Node v1.x VARCHAR shape regression).
- Tapping a reminder notification on Android no longer just dismisses without opening the app.
- Env-locked AI deployments now actually run Trace’s tools instead of silently dropping every tool call (this one was invisible: the model would reply in plain text instead of using your real data).
App overview (for anyone new)
- Diary: calories, ~30 macros / micros, water, body stats, meal photos, per-day notes
- Food sources: your own foods, Open Food Facts (with optional local DuckDB mirror for offline / air-gap), USDA, Mealie cookbook federation
- Saved meals + recipes, copy / move / clone across meal slots and dates
- Wellness sync: Fitbit, Garmin, Withings, Google Health (Health Connect on Android)
- Calorie goals: fixed, dynamic (target = base + daily burn), or adaptive TDEE
- Intermittent fasting tracker with schedules and reminders
- Optional Trace AI Assistant: multi-provider (Claude / OpenAI / Gemini / any OpenAI-compatible endpoint), BYO key, off by default, browser calls the provider directly so the server never sees your key
- Multi-user with invites, per-user admin, optional OIDC SSO (Authentik / Pocket-ID / Authelia tested)
- Android app (Capacitor 8): offline-first SQLite + sync, biometric sign-in, native Health Connect, native barcode scanner
- Backup: full server ZIP + per-user JSON export / import. Nothing leaves your server.
Deployment
services:
nutritrace:
image: ghcr.io/traceapps/nutritrace:latest
ports: ["3000:3000"]
volumes: ["./data:/data"]
environment:
- JWT_SECRET=<long-random-string>
Full docker-compose + env reference in DEPLOY.md. Signed Android APK attached to every GitHub release; in-place upgrades work.
You must log in or # to comment.


