Self-hosted nutrition + wellness tracker. Latest release rolls up two weeks of work.

New features (rc.21 → rc.26):

  • Recipe yields — declare "this makes N servings" and per-serving math flows through the diary
  • Intermittent fasting tracker — custom presets, history, recurring schedule that auto-starts at a chosen time on chosen days
  • Adaptive TDEE — learns your true daily expenditure from a rolling 35-day window of weight + diary instead of a static estimate
  • Android biometric sign-in — fingerprint / face unlock in server-connected mode
  • Per-serving Open Food Facts import — when a barcode-scanned product has serving data, prefill nutrition per-serving instead of per-100g
  • Health Connect → web — Android-synced Health Connect data now reaches the server and renders on the web Wellness page
  • Sharing rework — per-category sharing form, source filter on Meals/Recipes, zxcvbn-backed password-strength policy

Bug fixes: cross-pollinated food images on diary entries, duplicate foods on rapid barcode scans, scheduler crash, Mealie Test button.

Repo: https://github.com/TraceApps/nutritrace Release: https://github.com/TraceApps/nutritrace/releases/tag/v1.0.0-rc.26

Single docker compose, SQLite, signed APK on the release page.

other discussions
 

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.

 

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.

 

NutriTrace is a self-hosted nutrition tracker (Docker on the server, PWA in the browser, native Android app). AGPL-3.0, no telemetry, no accounts on external services, your data stays on your hardware.

This release is the biggest one since the Android app shipped: the Wellness layer moves off the legacy Fitbit Web API (which Google is sunsetting in September 2026) onto the new Google Health API, the numeric Stress Score becomes Resilience (Optimal / Balanced / Low), Fitbit's new Sleep Quality sub-metrics show up under Sleep, and the Diary gets a Cronometer-style Split Recipe action.

What's new

Google Health migration — Wellness data now flows through Google Health instead of the deprecated Fitbit Web API. Existing Fitbit data still comes from the same device; only the connection method changes. Fitbit users will see a "Re-link required" notice in Settings → Wellness with the migration steps. Old tokens keep working through a transition window.

Resilience replaces the numeric Stress Score — Fitbit retired the 0-to-100 score and renamed it Resilience with three buckets (Optimal / Balanced / Low). The Wellness page reflects the change with a category badge, a one-line interpretation, and a breakdown of the three pillars Fitbit uses (Physical Calmness, Activity Balance, Sleep Patterns). Historical Stress values stay in the database for reference.

Sleep Quality sub-metrics — Time to Sound Sleep, Sound Sleep, Restlessness, and Interruptions appear under the Sleep tab when data is available. Restlessness under-counts vs Fitbit because Google Health doesn't expose the raw motion data Fitbit's app uses internally; the others track within a few minutes on most nights.

Split Recipe on the Diary — Long-press a saved recipe in your diary and tap Split Recipe to break it into its component ingredients in place. The recipe stays as the parent (so totals are preserved); a chevron expands to reveal each ingredient scaled by however much of the recipe was logged. Each child is editable (adjust portion, remove one) without touching the saved recipe in your library.

Info button on saved meals and recipes in the Foods picker — tap the i on any meal or recipe row to see the full ingredient list with portions and per-item energy before logging it. Mirrors the existing yesterday-meals expand pattern

Issues, feature requests, and integration test reports are all welcome on GitHub.

 

Quick update for anyone following the project. NutriTrace is a self-hosted nutrition tracker I've been building. Single Docker container, your data stays on your hardware, no external accounts.

This release ships the first native Android app alongside the existing PWA. Signed APK is attached to the GitHub release.

What you get on Android:

  • Standalone, or connect it to a NutriTrace server for sync
  • Health Connect for steps, sleep, heart rate, body weight
  • Native barcode scanning
  • Native notifications for water reminders, meal prompts, weigh-ins, and goal celebrations
  • OIDC SSO via deep link if you run Authentik, Keycloak, Pocket ID, etc.

Release: https://github.com/TraceApps/nutritrace/releases/tag/v1.0.0-rc.14 Repo: https://github.com/TraceApps/nutritrace

Still on the v1.0 release-candidate cadence so there will be be bugs. Please feel free to post issues here or on Github.

Thanks to everyone who's tried it, provided suggestions and filed bugs along the way. If you find it useful, a star on the repo or a mention to someone looking for a self-hosted nutrition/fitness alternative helps a lot.