CookCLI
Plain-text recipe markup with a CLI and server
Cooklang is an open-source recipe markup language with a companion CLI and web server called Chef. Recipes are written in plain text and can be served, scaled, and turned into shopping lists.
Key features
- Plain-text recipe markup
- Built-in web server
- Shopping list generation
- Recipe scaling
Pros & cons
Strengths
- Version-controllable recipes
- No database needed
Trade-offs
- Requires learning the syntax
- Minimal UI
CookCLI replaces
Last reviewed Sep 13, 2026 · 734 words
Crack the @eggs{3} into a #bowl and whisk with @salt{1%pinch}.
Melt @butter{20%g} in a #frying pan{} over low heat, add the eggs,
and stir for ~{4%minutes} until just set.
That is a complete Cooklang recipe. Ingredients are @name{quantity%unit}, cookware is #name{}, timers are ~{duration}, and everything else is prose. The CookCLI tool reads a directory of these .cook files, prints ingredient lists, scales them, builds shopping lists, and runs a small web server so the kitchen tablet can read them. There is no database, no import wizard, and no account, which is either the whole appeal or the whole problem.
The markup is the product; the server is a convenience
Cooklang exists because recipe apps keep dying and taking their databases with them. A folder of text files survives every app, opens in any editor, diffs cleanly in git, and syncs with whatever you already sync with. The spec is small enough to learn in 10 minutes and permissive enough that a recipe with no markup at all is still valid; you add @ marks as you go.
The trade is that the syntax is a syntax. A partner who wants to add a recipe from their phone will not learn {2%tbsp}. Every household that runs Cooklang has exactly one person who writes recipes, and that person is you.
CookCLI: three commands and a port
The repository behind this entry is cooklang/cookcli, the official Rust command-line tool, and its binary is called cook. The name "Chef" belongs to a separate community project that also serves Cooklang files, so if you searched for that, this is the sibling. Install from the GitHub releases page (single static binary for Linux, macOS, and Windows), Homebrew, or cargo install cookcli.
cook recipe read "Scrambled Eggs" --scale 2
cook shopping-list "Scrambled Eggs" "Pancakes" > list.txt
cook server --host
recipe read parses one file and prints ingredients, cookware, and steps, with --scale multiplying quantities. shopping-list merges ingredients across several recipes, combining units where it can, and groups them by aisle if you keep an aisle.conf file next to the recipes. server serves the current directory on port 9080 with a plain web UI that lists recipes, renders them, and does scaling and shopping lists in the browser. Memory use is negligible, well under the 128 MB the catalogue lists.
Where it sits in a stack
The pattern that works: a recipes/ directory in a git repository, edited on a laptop, pushed to your own Forgejo or synced with Syncthing to a Raspberry Pi, where cook server runs as a systemd unit behind a reverse proxy. The tablet in the kitchen bookmarks the URL. Cooklang also has official iOS and Android apps that read the same files from a synced folder, so the phone works offline in the supermarket.
Treat the server as read-only. It does not edit files, has no authentication, and should not face the internet. If you must reach it away from home, Tailscale is the answer, not a port forward.
What it is not, and who should run Mealie instead
CookCLI does not scrape recipes from websites. It does not have a meal planner, a nutrition table, user accounts, or a mobile-friendly editor. The web UI is deliberately minimal. If any of those matter, Mealie and Tandoor are the two bigger projects in the recipes category, both with URL import, planning, and multi-user access, and both with Postgres and 300 to 500 MB of memory to match. The people who thrive on Cooklang are the people who already keep notes in Markdown and dotfiles in git and want their recipes handled the same way. The people who left Paprika because it stopped syncing will mostly be happier with Mealie.
What I'd do
If you are the sort of person who wrote a shell alias this week: a git repo of .cook files, CookCLI on a Pi as a systemd service on port 9080, Syncthing carrying the folder to your phone, and the official mobile app for the shop. Total setup under an hour, total maintenance close to zero, and the recipes outlive every app you will ever install. If anyone else in the house needs to add recipes, run Mealie and give them a login; text markup is a solo sport.
Compare CookCLI
9 head-to-head comparisons.
Similar recipe managers apps
Mealie
Recipe ManagersSelf-hosted recipe manager and meal planner
Replaces Paprika, Plan to Eat
Grocy
Recipe ManagersERP for your home groceries and pantry
Replaces Pantry Check, AnyList
Tandoor Recipes
Recipe ManagersRecipe manager for organizing and planning meals
Replaces Paprika, Plan to Eat
KitchenOwl
Recipe ManagersSmart grocery list and recipe manager
Replaces AnyList, Bring!
Bar Assistant
Recipe ManagersManage your home bar while adding your ingredients, searching
RecipeSage
Recipe ManagersRecipe keeper, meal planner, and shopping list
Replaces Paprika, Pepperplate