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.