CookCLI 介绍与选型指南

CookCLI 介绍与选型指南:Cooklang 官方 Rust 命令行工具集的定位、14 个子命令能力全景、五种安装方式与 Cargo 特性裁剪,对比 cooklang-chef/Mealie/Tandoor 给出选型判断。

CookCLICookCLI食谱管理自托管2026/11/01

CookCLI 介绍与选型指南

CookCLI 是 Cooklang 食谱标记语言的官方命令行工具集:单个二进制即可解析、展示、检索纯文本食谱,生成购物清单,管理食材库存,还能以 cook server 形态把整个食谱库变成一个可浏览的 Web 站点。项目由 cooklang 组织维护,Rust 编写,MIT 协议开源,GitHub 仓库 cooklang/cookcli(约 1.4k stars,查询于 2026-11-01)。本文基于官方 README、命令文档与 GitHub Releases 页面(均于 2026-11-01 查询)梳理其定位、功能与安装方式,并给出与同类方案的选型对比。本专栏后续部署与实操均基于最新稳定版 v0.39.0(2026-10-24 发布)。

一、Cooklang 与 CookCLI:先分清语言与工具

Cooklang 是一种为「人类可读、机器可解析」设计的食谱标记语言:食谱就是普通文本文件(扩展名 .cook),用纯文本写步骤,用固定语法内联标注食材、炊具与用量,无需数据库、无需专用编辑器,任何文本工具都能改,Git 能管版本。

官方示例食谱 Easy Pancakes.cook 的原文(节选自 cook seed 生成的示例库):

---
servings: 2
tags: breakfast, quick
source: https://cooklang.org
author: CookCLI Team
prep time: 5 min
cook time: 20 min
description: Simple crepes that are perfect for a lazy weekend breakfast.
---

Crack the @eggs{3} into a blender, then add the @flour{125%g},
@milk{250%ml} and @sea salt{pinch}, and blitz until smooth.

Pour into a bowl and leave to stand for ~{15%minutes}.

Melt @butter{knob} in a #large non-stick frying pan{} on \
a medium heat, then tilt the pan so the butter coats the surface.

三条核心语法:

语法含义示例
@名称{数量%单位}食材(ingredient),{} 内可留空@milk{250%ml}
#名称{}炊具(cookware),# 前缀区分于食材#frying pan{}
~{数量%单位}计时器(timer)~{15%minutes}

文件头部的 YAML frontmatter 承载份数(servings)、标签、来源、耗时等元数据。

CookCLI 则是围绕这套语言的全套命令行工具:把 .cook 文件渲染成人类可读文本或 JSON/YAML/Markdown/LaTeX/Typst 等格式、聚合多份食谱生成购物清单、按菜单文件做膳食计划、跟踪家里食材库存、全文检索食谱、起一个 Web 服务在任意设备上浏览食谱库。官方定位一句话概括:"Command line tools for working with Cooklang recipes",设计哲学是 UNIX 式的——输出可管道、与既有脚本工具组合,同时也能独立充当食谱 Web 服务器。

二、项目速览

项值
仓库github.com/cooklang/cookcli
实现语言Rust(单二进制,静态 musl 构建可在任意 Linux 发行版直接运行)
协议MIT
最新稳定版v0.39.0(2026-10-24 发布)
发版节奏约每 2–4 周一个 minor 版(v0.33→v0.39 覆盖 2026-06 至 2026-10,见 Releases 页)
GitHub Stars约 1.4k(查询于 2026-11-01)
官方文档cooklang.org/cli
Web 界面演示站demo.cooklang.org
移动生态Cooklang 官方 iOS/Android 应用(cooklang.org/app),食谱文件与 CookCLI 完全兼容
社区Discord、GitHub Issues;规范讨论在 cooklang/spec 仓库

两点值得注意的背景:

  1. 代码传承:CookCLI 的部分源文件取自早期桌面客户端 cooklang-chef(同为 MIT),可以视为 Cooklang 工具链从桌面端向「CLI + 服务器」路线的延续与重写。
  2. 持续活跃:v0.39.0 前后每月都有版本落地,README 中的安装矩阵、cook server 的用户认证、pantry 库存分析等能力都是近一年迭代新增,选型时可放心其维护状态。

三、核心能力拆解

以 v0.39.0 的实际子命令清单为准(cook --help 列出 14 个命令):

命令能力典型用途
cook recipe解析、校验并渲染单份食谱终端看菜谱;导出 JSON/YAML/Markdown/LaTeX/Typst/Schema.org
cook shopping-list(别名 sl)多食谱 + 菜单合并生成购物清单按商店分区(aisle)排序,自动扣除库存已有食材
cook server本地 Web 服务器手机/平板浏览食谱库、在线编辑、管理购物清单与库存;可配用户认证
cook build web把食谱库编译成自包含静态站点托管到任意静态主机,或直接 file:// 本地打开
cook search全文检索食材、步骤与元数据快速回答「家里这些能做什么菜」的前半段
cook pantry库存增删改查 + 分析看缺货/临期食材、算「现有食材能做出哪些菜」
cook doctor食谱库体检校验解析错误、检查 aisle/pantry 配置覆盖度
cook reportJinja2 模板自定义报表(实验特性)生成食谱卡片、营养标签、成本报表
cook seed生成示例食谱库上手体验全套功能
cook import从菜谱网站抓取并转换为 Cooklang(需 OPENAI_API_KEY)把网页食谱批量收编为纯文本
cook lspCooklang 语言服务器编辑器内语法高亮、校验、自动补全
cook login / logout登录 CookCloud(OAuth 设备码流程)配合 cook server 在手机与桌面间同步食谱目录(Cook Basic 订阅)
cook completions生成 bash/zsh/fish 补全脚本命令行体验
cook update自更新到最新 release免手动换二进制

几条官方给出的组合用法,能直观感受 UNIX 哲学:

# 缩放:任何食谱路径后加 :N,2 倍量、半份皆可
cook recipe "Pizza.cook:2"
cook shopping-list "Pasta.cook:0.5"

# 检索结果直接管道给购物清单
cook search chicken | xargs cook shopping-list

# 批量把食谱转成 Markdown 文档
for r in *.cook; do
  cook recipe "$r" -f markdown > "docs/${r%.cook}.md"
done

数据侧只有两类纯文本配置文件(详见本专栏配置篇):aisle.conf 定义购物清单的商店分区,pantry.conf(TOML)记录家中库存的数量、保质期与低库存阈值——库存食材会自动从购物清单中剔除。

四、安装方式与平台支持

CookCLI 官方提供五种安装路径,覆盖主流平台:

方式命令/来源适用
预编译二进制Releases 页下载 cook-<版本>-<os>-<arch>[-<libc>] 压缩包(附 .sha256 校验)所有平台,解压即用
Homebrewbrew install cookclimacOS / Linux
Debian/Ubuntu 包sudo apt install ./cookcli_<version>-1_amd64.deb(amd64/arm64,Debian 12+、Ubuntu 22.04+)Debian 系
Fedora/RPM 包sudo dnf install ./cookcli-<version>-1.fcXX.x86_64.rpm(x86_64/aarch64,随 release 发布)Fedora 系
Cargocargo install cookcli --locked已有 Rust 工具链的机器;从源码编译需数 GB 内存与磁盘

二进制矩阵覆盖:Linux x86_64(musl 静态 / glibc)、Linux i686、Linux aarch64 与 armhf(树莓派)、macOS(Apple Silicon / Intel)、Windows(x86_64 / i686 / aarch64)、FreeBSD x86_64。其中 musl 静态版不依赖发行版的 C 库,老系统、Alpine 之类都能直接跑,这也是资源受限设备的首选。

Cargo features 可裁剪依赖面:server(Web 服务器)、import(网页抓取)、lsp(语言服务器)、sync(CookCloud 同步)、self-update(自更新)五个可选特性默认全开;只要核心食谱工具时可全部关闭——依赖图从 412 个 crate 降到 225 个,二进制从约 23 MB 缩到约 9 MB:

cargo build --release --no-default-features                # 仅核心 CLI
cargo build --release --no-default-features --features server  # 核心 + Web 服务器

装好后 cook update 可从 GitHub Releases 原地自更新(--check-only 只查不装)。

五、选型对比

Cooklang 生态内与自托管食谱管理领域,常见对照对象如下(各对象信息以其官方仓库/站点为准,查询于 2026-11-01):

维度CookCLIcooklang-chefMealieTandoor
形态单二进制 CLI + 可选 Web 服务器桌面 GUI 应用(Tauri)全功能自托管 Web 平台自托管 Web 平台(Django)
存储纯文本 .cook 文件 + TOML/conf 配置同样读写 .cook 文件数据库 + 自有模型,支持导入导出数据库为主
资源占用极低(约 9–23 MB 单进程)桌面端中等较重(应用 + 数据库)较重(应用 + 数据库)
自动化/脚本强:管道、cron、Git 工作流原生契合无有 API 但体系独立有 API 但体系独立
网页抓取导入cook import(需 OpenAI Key)不支持内置 URL 导入内置 URL 导入
移动端Cooklang 官方 App + 浏览器访问 cook server桌面为主自带响应式 Web自带响应式 Web
数据可迁移性最高:文件即数据,随时换工具高(同格式)中(需导出)中(需导出)
维护状态(2026-11)活跃,月度发版基本停滞活跃活跃

判断逻辑:

  • 食谱以「我的文件」为中心(用 Git 管、用脚本批处理、不想被数据库绑架)→ CookCLI 是当前唯一同时提供 CLI、Web 服务器、静态站点三种形态的 Cooklang 官方工具。
  • 只想要一个好看的桌面菜谱浏览器 → cooklang-chef 曾是该角色,但维护已停滞,且其能力已被 CookCLI 的 cook server Web 界面覆盖。
  • 要全家共享、含营养计算/复杂权限/网页剪藏的一站式平台 → Mealie 或 Tandoor 更合适;代价是引入数据库与更大的运维面,且食谱不再是纯文本主存储。
  • 用 iOS/Android 端 Cooklang App,同时想要服务端 → 食谱目录放服务器上跑 cook server,文件与 App 天然互通,这是 CookCLI 独有的组合。

六、适用与不适用场景

适合:

  • 个人/家庭自托管食谱库,习惯纯文本与 Git;
  • NAS / 树莓派等资源有限设备(静态 musl 二进制、可裁剪特性,aarch64/armhf 官方构建);
  • 想把「本周菜单 → 购物清单」自动化进 shell 脚本或定时任务;
  • 需要把食谱库发布为静态站点或内网 Web 界面。

不适合:

  • 期望开箱即用的富媒体菜谱社区体验(评分、评论、社交)——CookCLI 是工具不是平台;
  • 强依赖网页一键剪藏且不想配置任何 API Key(cook import 需 OPENAI_API_KEY);
  • 需要多租户、细粒度企业权限——cook server 的认证只有 reader/shopper/editor/admin 四档角色,面向家庭与小团队。

七、小结

CookCLI 把「食谱 = 纯文本」这件事做成了完整闭环:语言规范(Cooklang)→ 命令行工具(解析/清单/库存/体检)→ 服务器形态(Web 浏览与编辑)→ 静态站点发布 → 移动端 App 互通。单二进制、MIT、活跃发版,是自托管食谱管理里「数据完全属于自己」路线的最优解。

本专栏后续三篇基于 v0.39.0 实测展开:部署篇覆盖二进制裸装与 Compose 编排两种落地形态;配置篇逐项讲解 COOK_CONFIG_DIR、users.toml、aisle.conf、pantry.conf 与服务器参数;命令篇按子命令给出完整实测回显。

参考资料(均于 2026-11-01 查询):

CookCLI 介绍与选型指南 - Quzuo