Skip to content
openplate

Photograph your plate, see your carbs.

openplate is an open-source calorie counter and food diary for your phone and computer. Choose the way that suits you.

Use the app

Just track what you eat

Log your meals, or take a photo of your plate to get an estimate of its carbs. It runs in your web browser, with nothing to install, and we run the server for you.

10 free AI scans or 14 days, whichever comes first, no card needed. Then €5.00 a month or €40.00 a year.

The diary is encrypted on your device before upload. We run the server, so we hold the backup key for password resets. That backup key lets us read your diary.

Run it yourself

Run your own copy

Running it yourself means openplate runs on your own computer or server instead of ours, at no charge. openplate is open source software: the code is public, so anyone can read and check it.

Photo scans can run without the cloud. openplate-inference runs open-weight AI models on your own hardware, with or without a graphics card. The photos never leave your network.

On your own copy, that backup key is yours.

The film is in German.

These screens show example data, not a real diary.

Why openplate exists

Most food trackers keep your diary on their servers, where you cannot control it. openplate keeps it on your device first. The source code is public, so anyone can inspect it. Our hosted app also keeps an encrypted copy on our servers, and our backup key can read it. On your own copy, every service is optional, sync and photo scanning included, and you can host each part yourself.

No app store in between

openplate is a web app (a PWA) that you install from the browser, on a phone or a computer. There is no app store. Nobody needs an Apple or Google account, and no store review or store fee stands between a release and your device. An institution that hosts openplate serves it from its own domain, and an update reaches every device the next time the app opens.

What openplate is

Everything a user owns (food logs, weights, personal foods, goals, the AI settings) is written to the browser's IndexedDB on the device it was entered on (app/lib/local-store/). It is stored in the clear there, because it is your device, and it never leaves it except in two forms you choose: a JSON export you download, or an encrypted sync blob.

The app server is a single stateless container. No database, no ORM, no migrations, and no secret it needs in order to boot. It can hold exactly one optional secret, the operator's key for the food database, described below. Destroying the container loses nothing. That is not thrift, it is the whole promise: see ADR-0006.

What you can do with openplate

These screens show example data, not a real diary.

  • The add-food screen: a search box, your usual dinner, a button to scan a plate, and recently logged foods with their net carbs.

    Log a food

    Search the food database, or pick something you logged before, and the entry lands in the day under the meal you chose.

  • The scan screen, offering to connect an AI provider before it reads a photo, and a way to log the food without one.

    Scan a plate

    Photograph your plate and an AI model estimates the carbs. On the hosted app, our server passes the photo to the AI provider and does not keep it. On your own copy, it goes only to the AI service you connect.

  • The eating and targets screen: eating style options, from low-carb to simple tracking, and preset daily carb limits.

    Choose how you eat

    Low-carb, calories, high protein, or simple tracking. The style you pick sets which goal grades the day, and every goal is optional.

  • The overview screen: the day's net carbs, calories, protein, fat, and fiber, each displayed with a bar against its target.

    See where the day stands

    Net carbs, calories, protein, fat, and fiber for the day, each shown against its target, and how many of the last seven days you logged.

Where your data goes

Three programs, one product and two optional attachments, plus one outside service that answers food names. This page explains what each one holds, and which one stands in the path of your data.

The drawing below is the whole system in five arrows. Your device holds the diary and the plate photo. The diary leaves encrypted, for openplate-core. The photo leaves for whichever AI endpoint you configured. The app server sends the page, and it passes the names of the foods you look up on to a food database. It stands on neither the diary path nor the photo path.

Three things fit behind "your AI endpoint": a cloud provider you hold a key with, an openplate-inference box on your own hardware, or, on a managed instance, the core server itself, which forwards the photo and counts it against your allowance. topologies.md draws all four ways to run openplate, one small picture each.

12341234openplate app serverFood databaseYour AI endpointopenplate-coreYour devicethe pagenamesphotodiary, encrypted
  1. You log a food

    Its name goes through the app server to the food database.

  2. You scan a plate

    The photo goes to your AI endpoint. On the hosted app, that is our server, which passes it to an AI provider without keeping it.

  3. When sync is on

    It leaves the device encrypted and goes to openplate-core. An account on the hosted app syncs, and our backup key can read that copy.

  4. Everything else stays

    Your diary stays on the device. On your own copy with sync turned off, no server has a copy.

Three components, optional beyond the app when you self-host

The app works on its own to keep a diary. The core server and inference runtime add features. Both are separate programs. On your own copy, you can run them yourself or leave them out entirely. The hosted app always syncs through the core server.

  • App

    An open-source, self-hosted food tracker with BYOK (bring-your-own-key) AI plate identification. Snap a photo of your plate. Your own AI provider (OpenRouter, Mistral, any OpenAI-compatible endpoint, or Anthropic) estimates the macros. On a copy you run yourself, it is your key, your provider, and your data. A hosted instance with accounts differs in two ways: the operator provides the AI, and the operator keeps a recovery key that can open your diary (docs/sync.md).

  • Core server

    The account service for openplate. Its first feature is encrypted sync between your devices: the diary is encrypted on each device before it is uploaded, and the operator keeps a sealed copy of each recovery code, so the operator can restore a forgotten password and can also read the diary.

  • Inference runtime

    A plate-photo scanner you run yourself. Point your phone at dinner, get back a list of foods with portion estimates in grams, computed on your hardware, from open-weight models, with no account, no API key from anybody, and no photo leaving your network.

On your own copy, you pick the AI

Send plate photos to a machine you control, to a provider with a personal key, or through a shared household server.

The hosted app at app.openplate.de includes AI access in the plan and needs no key.

  • On your own hardware

    openplate-inference runs open-weight models, such as Qwen3-VL, on a machine you control. The app also connects to Ollama, vLLM, LM Studio or llama.cpp as an OpenAI-compatible endpoint.

  • With your own key

    In the app's AI settings, connect OpenRouter with one click, or enter a key for Anthropic, Mistral or any OpenAI-compatible endpoint. OpenRouter also reaches models from Google, OpenAI, Qwen, DeepSeek and Kimi. Your key stays in your browser and goes only to the provider.

  • On a family server

    Whoever runs openplate-core sets one provider key on the server. Everyone they invite uses that key, stays within a daily allowance, and never sees the key itself.

  • OpenRouter
  • Anthropic
  • Mistral AI
  • OpenAI
  • Google Gemini
  • Qwen
  • DeepSeek
  • Kimi
  • Ollama

The names and logos belong to their owners. No provider endorses or sponsors openplate.

Who holds what

The drawing shows what each one stores. The table adds what each one sees while your data passes through it.
ComponentWhat it storesWhat it sees in transit
Your browserThe whole diary, in the clear, in IndexedDB. Your AI key. Cached plate photos.Everything. It is your device.
openplate app serverNo database, no accounts, no diary. At most one secret: the operator's key for the food database.Page requests, and the names of the foods you look up or scan, which it forwards to the food database. Never a photo, never your AI key, never a diary entry, never a sync blob.
openplate-core (optional)An email address, an authentication verifier, KDF parameters, the diary as ciphertext, and the escrowed recovery code that can unwrap it. On a managed instance, also each account's daily allowance and usage count. With the features above turned on, also what each of them lists.Blob size, write timing, session metadata. On a managed instance, also the photo forwarded to the AI proxy, for as long as it takes to forward it, read once, not stored.
openplate-inference (optional)Nothing per user: no accounts, no sessions, no cookies. Model weights and a food dataset.The photo you sent it, for as long as the request takes. With the default food source it makes no outbound call except the one-time weight download. With FOOD_SOURCE=lcc or off it sends food names out, never the photo.
LowCarbCheck food database (on unless turned off)A usage count per key, or per network address for a caller without one.Food names and a language, from the app server, with the instance's key. Never a photo, and never who you are.
Cloud AI provider (BYOK path)Whatever their policy says.The photo, and your key. Their terms apply, not ours.

Research partners

We are looking for universities, nutrition researchers and clinical teams who want to work with openplate. A diary stored on the participant's device, code an ethics board can inspect, and research analytics that record only with consent make it a practical base for dietary studies.

What we measure

openplate records nothing until an operator turns tracking on. The hosted instance at openplate.de counts page visits and which features get used. It is never told what you eat, weigh, or log. Anyone running their own copy picks one of three levels, from page visits only up to a research level that records health behaviour for a study with consenting participants. No third party sits in the path. The numbers land in a Matomo instance we run ourselves, with cookies switched off. Configuration lists every event at every level.

Getting access

Anyone can sign up with an email address on the hosted instance at app.openplate.de. No invitation is needed, and no card either. A new account gets 10 free AI scans or 14 days, whichever comes first. After that, the app locks until you pick a plan. Everything you logged stays, and you can export it or delete your account at any time. Running your own copy costs nothing. See Self-hosting.

Health calculators

Work out your BMI and your daily needs for energy, protein and water from a few numbers.

Open source

openplate and openplate-core use the MIT license. openplate-inference has its own terms, set by the model weights it ships. Its licensing guide lists them. All three live in one repository, github.com/LowCarbCheck/openplate. Read the code, change it, and run it yourself. The two services have their own folders there, openplate-core and openplate-inference.