CookCLI

Plain-text recipe markup with a CLI and server

Recipe Managers ★ 1.4k stars Medium setup MIT

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