Last updated: 22 August 2026
Meals is a meal planner you run on your own server. The iOS app is a client: it talks to whichever server you point it at, and to nothing else. There is no Meals account, no Meals cloud, and no central service that sees your data.
That shape is the whole privacy story, so it is worth being precise about it.
| What | Where | Why |
|---|---|---|
| Your sign-in token | iOS Keychain | So you don't sign in every launch. Removed on sign-out and on account deletion. |
| The server URL you chose | App preferences | So the app knows where to connect. |
| A cached copy of your shopping list, plan and recipes | App container on disk | So the app works in a supermarket with no signal. Cleared on sign-out and on account deletion. |
| Shopping-list changes made offline | App container on disk | Queued until the server is reachable, then sent and discarded. |
None of this leaves the device except to reach your server.
The server holds an account and a household:
A household is the entire privacy boundary. Everyone in your household can see and edit all of its content; nobody outside it can see any of it. There are no roles and no administrator, so treat an invite code like a password.
Servers also keep ordinary web-server logs, which typically include IP addresses and request paths. How long those are kept is up to whoever runs the server.
Only three things ever cause an outbound request, and each one is something you asked for:
If you connect an AI assistant to the API with a personal token, that assistant sees whatever it asks for. That connection is yours to make and yours to revoke — delete the token and it stops working immediately.
This section exists because /privacy is a published, permanent URL and it
should be right before any money moves, not after.
Today, nothing here applies to anyone. No payment is taken for any Meals server, and no card details have ever reached this project. If you self-host, that stays true forever: the software takes no payments unless whoever runs it configures a processor, and with none configured there is not even an endpoint to take one — there is nothing to pay and nobody to pay it to.
If the hosted service does open, one thing changes and it is worth stating in advance. The processor is now chosen and named here, which is what this section promised to do before any money moved:
stripe.com/privacy. A
different operator running this software may configure a different one
(Paddle and Lemon Squeezy are also supported), so if you are paying somebody
else, ask them which.The terms and refunds page (/terms on the same server, and
TERMS.md in the
repository) covers the other side of this: what the service costs, what is
promised, and what happens to your data if you stop paying, which is that
nothing is deleted.
If you installed the app through the App Store or TestFlight, Apple offers its developer the same opt-in statistics it offers every developer: aggregated usage figures (installs, sessions, active devices, retention) and crash reports. To be clear about what that is and is not:
The developer uses it for exactly what you'd hope: knowing whether the app crashes and roughly how many people use it.
Whoever runs the server you use. If you self-host, that is you: you are the data controller, and this policy describes what the software does rather than what any particular operator promises.
If you use meals.marcuslab.uk, that server is operated by the author of this
project, in the United Kingdom, as a private household instance. It is not a
public service, registration on it is closed, and it is not offered for general
use. See Contact below for anything about it, including data
requests.
Delete your account — Settings → Delete account, inside the app. It asks for your password and a typed confirmation, then deletes immediately: no grace period and no undo. Your sign-in and every API token you created are removed. If you were the last person in your household, its recipes, meals, plans, shopping list and cooked history go with it. If other people are still in the household, their shared content stays — it is theirs too.
Leave a household — Settings → Household → Leave. Your account, your password and your API tokens all survive; you land in a household of your own with nothing in it. What you added to the old one stays there, because it belongs to the household rather than to you.
Be removed from one — the household's lead can remove any member. That ends your access to its recipes, plans and lists, and nothing else: your account is untouched and you keep everything signed in on it.
Export your data — one request returns everything your household owns as a JSON file: recipes, ingredients, meals, plans, cooked history, saved supermarkets and every shopping list including the archived ones.
curl -H "Authorization: Bearer <your API token>" https://<your server>/household/export -O -J
It costs nothing on any server, and it never will. Passwords, API tokens and
invite codes are deliberately left out — they are credentials, and useless
anywhere else. Every other endpoint the app uses is a documented REST API
too (/docs on your server).
Move servers — change the server URL on the sign-in screen. Nothing ties the app to any particular deployment.
If you are in the UK or EU, the GDPR rights of access, rectification, erasure, restriction, portability and objection apply against whoever operates your server. On a self-hosted instance those rights are exercised with a database you already control.
Meals is not directed at children and asks for no information about age. It is rated 4+ because it contains nothing unsuitable, not because it is aimed at children.
This policy lives in the app's public source repository, so its full history is public. Material changes will be noted in the changelog and the date at the top of this file will change.
Open an issue at https://github.com/marco308/meals/issues, which reaches the
author directly. For anything you'd rather not say in public — including a data
request about meals.marcuslab.uk — use GitHub's
private vulnerability reporting
form, which is private to the two of us and is not only for security reports.
This is a one-person project, not a company with a support desk. Expect a reply within a week.