A cooking app that keeps the whole week in one place: your recipes, a drag-and-drop meal planner that writes the grocery list, calories per ingredient, dish and portion, and batch cooking (what's in the fridge, how many portions are left).
There's a website and an Android app, and it's open source: use the hosted one, or run your own.
- Recipes: write your own, or import them from a YouTube video, an Instagram Reel, a recipe web page, a PDF or a photo (Gemini reads it and writes the recipe).
- Calories and macros for every ingredient, dish and portion, from USDA FoodData Central. Fix any weight or food by hand, or add your own foods.
- Planner: drag recipes onto days and meals; the grocery list builds itself, sorted by aisle, and works offline on your phone.
- Batch cooking and prep: cook once, eat for days. Leftovers go to the fridge and count down as you eat them; prepped ingredients (rice, sauces) are tracked by weight.
- Meal log: mark meals eaten or eaten out, and see calories against your daily goal.
- Starter recipes: about 130 home recipes to begin with, written for Cauldron: South and North Indian, East and Southeast Asian, Italian, Mexican, North American, Middle Eastern and Mediterranean, plus breakfasts, snacks, desserts, drinks and prepped basics (cooked rice, ginger-garlic paste, pickled onions). Many are batch-cook friendly and high in protein. Everyone sees them; "Make my version" gives you your own copy to change.
- Website: https://cauldron.craftingtable.cc. Sign in with Google.
- Android: download the APK from the website's Settings page or from Releases. The app keeps itself up to date.
See the privacy policy and terms of service. You can download all your data, or delete your account, from Settings.
The hosted service runs on my own hardware at home, for free. If you find it useful, you can buy me a coffee. ☕
One Docker container and a free Google Cloud project. See SELF_HOSTING.md for the server, sign-in, recipe imports and building the Android app for your server.
server/: FastAPI + SQLite (SQLModel), Python 3.12+, managed with uv.web/: React + TypeScript (Vite, Tailwind, TanStack Query, dnd-kit).android/: Kotlin + Jetpack Compose.data/: the database, photos and downloads (not in git).
cd server
uv run python scripts/load_usda.py # nutrition data: downloads USDA FoodData Central once
CAULDRON_OWNER_EMAIL=you@gmail.com CAULDRON_GOOGLE_CLIENT_ID=… \
uv run uvicorn app.main:app --reload --port 8765
cd ../web
npm install
npm run dev # http://localhost:5173 (proxies /api to :8765)API docs are at http://localhost:8765/docs. After npm run build, the API server also
serves the website at http://localhost:8765. Every setting is listed in
.env.example.
cd android
./gradlew assembleDebug -PapiUrl=http://10.0.2.2:8765 -PdevToken=<a session token>-PdevToken starts a debug build already signed in, which skips Google (handy on the
emulator; 10.0.2.2 is your computer as seen from the emulator). The app sends its
session as Authorization: Bearer; the website uses a cookie. For builds that sign in
with Google, see SELF_HOSTING.md.
They're in server/app/starter/recipes.json. The server adds
any that are missing when it starts (owned by the owner, with source starter). After editing the
file or the food mapping (server/app/foodmap.py), write them all again:
cd server
uv run python scripts/seed_starter.py --refreshPhotos come from Wikimedia Commons, under licences that allow reuse (CC0, public domain, CC BY,
CC BY-SA). scripts/find_starter_photos.py finds them and records each photo's author and
licence, which the recipe page shows under the photo; check its contact sheet before keeping the
picks. The server downloads each photo once and serves its own copy.
Each ingredient links to a food and gets a weight in grams. The weight comes from the recipe, from "parts" in the same component, from a count times a unit weight (1 clove, 2 slices), or from a typical amount for vague quantities ("a drizzle"). "To taste" and ingredients with no amount are left out and listed. Any ingredient's food or grams can be set by hand, and hand edits are never overwritten.
Issues and pull requests are welcome. Contributions are accepted under the same licence (Apache-2.0, section 5). To report a security problem, see SECURITY.md.
Copyright 2026 Devasenan Murugan. Licensed under the Apache License 2.0: you can use, change, host and sell it, as long as you keep the copyright and NOTICE and say what you changed. The starter recipes' text is under the same licence; their photos belong to their photographers, under the licence credited with each one.