openNutrition
The openNutrition icon: a lime kiwi half on a dark tile

Eat like you train.

openNutrition is a food, supplement and body-weight tracker that runs on your own server. No ads, no tracking, and nobody reading over your shoulder while you eat.

Private beta. The code is not public yet and there is no store app. The honest status

Month calendar with a set of rings on every logged day
Today screen: rings for energy, protein and carbs, 967 kcal remaining, drinks and meals Today screen in the light theme: rings for energy, protein and carbs, 967 kcal remaining
Supplements screen: creatine due today with a Take button, the stack and the history
  • 0ads, trackers or subscriptions
  • 43nutrients tracked, 13 vitamins and 11 minerals among them
  • 14,800foods, roughly, once the open datasets are imported
  • 6languages, search included
  • 600automated tests behind the maths

Logging takes seconds. On purpose.

One Track button opens everything. Search it, scan it, photograph it, or just say what you ate.

  • SearchFinds the everyday food first. "Salmon" is not salmonberries and "chicken breast" is not fried and coated. What you log often rises to the top.
  • BarcodeYour own catalogue first, then Open Food Facts, with Nutri-Score, NOVA and a warning for the allergens you avoid. Free, like it should be.
  • PhotoOptional. A model on your own machine suggests foods and grams, you confirm. The numbers come from the food database, not from the model's imagination.
  • DescribeType or say "2 eggs, a banana and 200 g skyr". No AI involved. It uses the same search as typing, so it is instant.
  • Eat againYour usual portion in one tap, all of yesterday in two. A test counts the taps so it stays that way.
The Track sheet: food, scan, photo and supplement buttons, a supplement that is due, and foods to eat again
Logging a portion of chicken: a stepper, quick amounts and 197 kcal with its macros

Targets that follow what you really burn.

Formulas guess. Your food log and your weigh-ins know. Every week openNutrition works out what you burn, shows its working and suggests new targets. You decide.

  • Weekly check-inNew targets once a week, with every number explained. It moves only halfway each time, so one odd week cannot yank you around. Going on holiday? Pause it.
  • Measured burnAfter about two weeks of logging and a few weigh-ins it stops guessing: what you ate, minus what your trend weight gained or lost.
  • Pace in % of body weight"Lose 0.5 % a week" slows down by itself as you get lighter. Kilos are still there if you prefer them.
  • Protein and fat in g per kgType 2.2 g/kg and 0.9 g/kg. Carbs take the rest, and the grams follow your weight.
  • Your own weekHigh days, low days, a refeed Saturday. It tells you whether the week still adds up.
  • Soft landingThe pace eases off over the last stretch before your goal weight. No cliff at the end.
Weekly check-in: three openGym lifts down about 4 % on this cut, a suggestion to slow the pace, and the new targets next to the old ones

No black box.

One screen in the app shows every rule behind your targets, filled in with your own numbers and with the published sources next to it. This is the short version.

Resting energy
The Mifflin-St Jeor equation, with your trend weight. What you burn lying still for a day.
A normal day
Resting energy times an activity factor: 1.25 mostly sitting, 1.4 mixed, 1.6 on your feet, plus 0.05 for each training day a week. This is only the first guess.
Measured burn
What you ate, minus the energy your trend weight gained or lost. It replaces the formula as soon as there is enough data. Workouts, steps and a fast metabolism are already inside that number.
Your goal
Your pace in kg a week times 7,700 kcal, spread over seven days. The target never goes under a safe floor of 1,200 to 1,500 kcal.
Protein, fat, carbs
Protein per kg of body weight: 2.0 g when losing, 1.8 g when gaining, 1.6 g when holding. Fat is a quarter of your energy and at least 0.6 g per kg. Carbs take what is left. Or set your own.
Fibre and water
14 g of fibre per 1,000 kcal, at least 25 g. 35 ml of water per kg, between 1.5 and 4 litres.
Training
Workout calories are shown but never added to your target. The measured burn already contains them, so eating them back would count them twice.

Starting points from published research, not medical advice. You can change every target by hand.

≥ 260 g carbs

One item had no carb value, so this is a floor, not a total. The "≥" tells you. Unknown is not zero.

~ 640 kcal

Kebab from the stand around the corner, eyeballed. Estimates are flagged and stay flagged in your history.

As logged

Every entry keeps a snapshot of the food data it was logged with. Fixing a product later never rewrites last month.

Vitamins and minerals, without the guessing.

Your average from food plus supplements, against the reference for your age and sex. 43 nutrients in total, 13 vitamins and 11 minerals among them.

  • References that fit youValues for 14 to 18, 19 to 50, 51 to 70 and over 70. Got a number from your doctor? Set it as your own target.
  • "Not enough data"When too few of your foods state a nutrient, the report says so. It never invents a "low".
  • Good sourcesTap a nutrient that runs low. You see what your usual meals already bring, then plain foods that are rich in it. No spice jars, no fortified cereal.
  • Data with a name on itUSDA FoodData Central, the Swiss Food Composition Database and Open Food Facts. Every record says where it came from.
Iron, good sources: what your usual meals already bring, then foods rich in iron per 100 g

Supplements, done properly.

500 mg of magnesium citrate is not 500 mg of magnesium. openNutrition knows the difference and counts the right one.

  • Label mathsCompound and elemental amounts are kept apart for 19 exactly defined compounds. For anything else it says "elemental amount unknown" until you type the value from the label.
  • Schedules and remindersA push reminder at the planned time, with a "Taken" button right in it.
  • Real labelsSearch the NIH supplement label database and import a label instead of typing it.
  • No dosing adviceJust the facts on the label. What you take is between you and someone qualified.
Supplements: creatine powder due today at 08:00, the stack, a reminder switch and the history
openGym icon openNutrition icon

Your training, on your plate.

Link the two apps once with a pairing code and they start talking about the same person. The weekly check-in can then tell you if this cut is costing you your bench.

Both apps stay fully usable alone. Separate databases, no shared cloud, no account you did not make. openNutrition never writes to openGym.

  • Weigh-ins and your goal weightfrom openGym
  • Training days and the weekly planfrom openGym
  • Finished workouts on Todayfrom openGym
  • Your lifts next to the diet, in the check-infrom openGym
  • More carbs on training days, same weekly totalfrom openGym
  • Daily totals, protein meals and the fasting window. Totals only, never a food name.to openGym

Your server. Your data.

There is no openNutrition cloud. Your diary lives in your own database, and it stays there.

Self-hosted

One Docker Compose file: PostgreSQL and the app. The first account becomes the admin.

Nothing phones home

No ads, no analytics, no telemetry. Only the barcode or search words you look up online leave your server.

Passkeys

Sign in with your face or fingerprint, like in openGym. Passwords work as a fallback.

Leave whenever you like

Export everything as JSON or CSV. Delete your account in one go.

Arrive just as easily

Import from MyFitnessPal, Cronometer or Lose It!. Preview first, undo the whole import with one tap.

AGPL-3.0-or-later

Free software. The repository is private during the beta and has no opening date yet.

How it compares.

A few things that often sit behind a paywall elsewhere. Here they run on your own server.

FeatureopenNutritionMyFitnessPalCronometerMacroFactor
Barcode scannerfreepaidfreepaid app
Adaptive expenditure and weekly check-inyesnonoyes (paid)
Vitamins and minerals reportyes, and says when data is missingpartialyesyes (paid)
AI meal photoon your own server (Ollama)paid, cloudpaid, cloudpaid, cloud
Plan a day from your own mealsyes, scaled to your targetpaid (Premium+)nono
"Where do I get more iron?"yes, your foods firstnopaid (Gold)no
Body measurements and tape body fatyes, with waist-to-heightyesyesyes
Supplements with schedulesfirst-classnovia custom foodsno
Lifts next to the dietyes, with openGymnonono (separate Workouts app, no link)
Protein meals counted per dayyes, 0.4 g/kg eachnonono
Ads, tracking, subscriptionnone, self-hosted, AGPLyesads or paidpaid

Prices and paywalls as researched in October 2026. They change. If a cell is out of date, say so and it gets fixed.

Four commands. Then breakfast.

Clone, copy the settings file, start, load the bundled foods. Add Ollama later if you want meal photos.

# get it
git clone https://github.com/DuarteSantos8/openNutrition.git && cd openNutrition

# set POSTGRES_PASSWORD, APP_URL and OFF_USER_AGENT in it
cp .env.example .env

# PostgreSQL + app on http://localhost:3000
docker compose up -d

# bundled USDA foods + supplement labels
docker compose --profile tools run --rm tools npm run db:seed

The repository is private during the beta, so the first line only works with an invite for now.

The full setup, step by step

Looks like openGym. On purpose.

Same cards, same sheets, same tab bar with the big plus in the middle. If you know one, you know the other.

A day planned from meals you have actually eaten, with Another one and Put it in the diary buttons
Plan it for me
Add food: search, scan, photo and quick entry, with recent foods one tap away
Recents, one tap
Ring settings: choose what each ring shows and its colour
Pick your rings
Today in the light theme
Today, light
Month calendar with rings per day
A ring for every day

Fair questions.

Is it free?

Yes. No subscription, no premium tier, and nothing in it needs a paid API key. You pay for your own server, which can be a small box under the desk.

When is it public?

No date yet. It is version 0.1, in daily use by its author, and the repository is private while the beta runs. Promising a date now would be guessing.

Does it need openGym?

No. openNutrition works fully on its own. Linking openGym is optional and adds your training to the picture.

Is there an iPhone or Android app?

Today it is a web app you install on your home screen, on both. An iPhone app is in preparation. Nothing is in the App Store or on Google Play yet.

All questions and answers