跳到正文

VibeFlow-P5

一段 p5.js 粒子动画、一个 356 字节的 Go 静态服务器、一个加固过的 Docker 镜像——和一篇 vibe coding 宣言一起发布,代码注释里留着那场对话的德语。

Screenshot of VibeFlow-P5
编辑截图, 28 Sep 2026VibeFlow-P5 ↗

这是什么

一个浏览器里的粒子可视化:150 个粒子在柏林噪声下漂移、被鼠标推挤,由 Go 静态服务器提供,打包成 Docker 镜像。仓库小到几分钟就能读完。值得留下的是那篇 README——一份写在这个词出现约八周后的 vibe coding 宣言——以及那个 Dockerfile,它比它所承载的应用讲究得多。

谁做的从他的仓库看是一位 DevOps 工程师:给 AWS IAM 角色、WAF、CloudWatch 告警写的 Terraform 模块,读 Terraform plan 的 Go 命令行工具,以及一个备考 CKAD(Kubernetes)的练习仓库。他 120 个公开仓库里有 106 个是别人的 fork;属于他自己的十四个当中,这是唯一一个不是基础设施工具的。

制作过程

6 个阶段
  1. 01

    一份写在术语出现八周后的时代文献

    README 不是文档,是一份宣言,标题就叫「Vibe Coding Manifesto」,开篇把这种做法的源头归给 Andrej Karpathy 的 2025 年 2 月。这个时间站得住:Karpathy 在 2025 年 2 月造出这个词,而 Collins 因为其使用量自那时起大幅上升,把「vibe coding」选为 2025 年度词汇。仓库第一次提交是 2025 年 3 月 29 日,也就是说这份宣言写在这个词存在约八周之后——早到足以成为一份原始文献,而不是对它的转述。它用自己的话给出四条主张:用自然语言取代数小时的敲击、美学先于语法、几分钟而不是几天、以及开发不再有「专业知识的传统守门人」。

  2. 02

    作者自己标注为虚构的题词

    结尾几行是整个仓库最不寻常的地方。第一句是「Vibe Coding is not the future of programming; it’s the present of creative expression through code」——而 README 自己给它标的出处是「a hypothetical quote from 2025」(一句 2025 年的假设性引语)。一个项目引用一句格言、同时又标明那是自己编的,这是宣言通常不会做的事。第二句题词引了「Programming is not about typing, it’s about thinking」,随后又加以限定,说有时候它也关乎停下来欣赏数字世界的美学维度。

  3. 03

    代码本身是什么

    整个应用就是一个 3,332 字节的文件。它创建 150 个粒子,给每个粒子一个速度、不给它自身的加速度,然后每帧用采样在粒子自身坐标上的柏林噪声来操纵它们;进入光标 200 像素范围内后,粒子会随光标纵向位置被吸引或排斥,而屏幕上所有东西的色相来自光标的横向位置。粒子以加色混合模式画成圆圈,背景每帧以 0.05 的透明度重绘一次,拖尾就是这么来的。有一处读起来像是未经编辑的机器产出:鼠标生成的粒子在两个互不相关的地方被移除——鼠标处理函数在总数超过目标值 150% 时用 `shift()` 丢掉最老的,另有一个每秒执行一次的 `setInterval` 过滤掉寿命耗尽的。两条路径互不知情,而启动时创建的那 150 个粒子根本不会过期。

  4. 04

    Dockerfile 比应用本身讲究得多

    最后一次提交在首次提交两周后,标题是「Optimize Dockerfile for security, performance, and cross-platform support」,而它确实做到了——为一个载荷只有 3 KB 粒子动画的容器。它在 `golang:1.20-alpine` 里构建,用 `--platform=$BUILDPLATFORM`;运行时基于 `scratch`——没有 shell、没有包管理器、没有任何可供立足的东西——以 UID 10000 而非 root 运行,`CGO_ENABLED=0` 编译静态二进制,`-trimpath -ldflags="-w -s"`,用 `TARGETOS` 和 `TARGETARCH` 驱动交叉编译,并把构建产物的 `sha256sum` 一并记录。仓库里没有 `go.mod`,所以模块是在镜像内创建的。文件里还留着一段注释,给出两种互斥的依赖处理方式——构建时创建模块,或复制已有的——并提示把不适用的那一种注释掉。这是助手写的配置里很典型的一种形状:无法判断哪种情况成立,于是两种都留着,把选择权交出去。

  5. 05

    德语还留在注释里

    Go 服务器和 Dockerfile 里都带着德语注释:「Statische Dateien im Verzeichnis "static" bereitstellen」、「Server auf Port 8080 starten」、「Binärdatei aus dem Builder-Stage kopieren」。仓库里其他部分都不是德语——README、HTML 和 sketch 全是英文。这些注释是生成代码那场对话的残留物,它们记录下的是:提问的人用德语,模型便以德语回应。README 说整个过程发生在与 Claude 的「一次对话」里,这一点无法核实;而注释是这个说法中唯一被仓库本身印证的部分。

  6. 06

    数字长什么样

    2025 年 3 月 29 日到 4 月 13 日,十六天四次提交,之后再无动作。单一作者,没有 release,没有 tag,没有开过 issue 或 pull request。一颗星,零 fork。七个文件、八 KB、MIT 许可,topic 里包含 `vibe-coding`、`ai-generated` 和 `language-model-programming`。README 声称代码是在没有任何手动调试的情况下产出的——这是作者自己的说法,无法从仓库核实;能核实的是代码确实按 README 描述的方式运行,因为 sketch、服务器和容器都小到可以全部读完。这个项目没有任何第三方报道:没有媒体、没有 Hacker News 讨论。

相关档案

全部档案 →