技术 / 开源

普通的部件。一次组装。

每个创业项目都需要后端,而它们都不该自己去做一个。公司存在所需的部件只写一次,作为用 Rust 编写的开源 harness。创业项目挑选想要的模块,在一个文件中接好,最终作为带有自己数据库的单个无状态 worker 发布。

数字中的工厂

创业项目
2317 个验证 · 1 个原型 · 5 个发布
在技术栈上
1723 个创业项目的共享部分
开源
117 个 MIT · 4 个 Apache-2.0
运行在 harness 上
18目前 18 个上线 · 1 个计划中
决策记录
30在 harness 代码仓库中

创业项目如何构建

一个文件为公司命名。

创业项目后端是一个小型 Rust 项目。它列出所用的模块、将模块连接到外部世界的 Adapter,以及该创业项目自己的名称和域名。其余一切都是 harness。构建之后得到一个 Worker,其中恰好包含这些模块,别无其他。

如果某个模块需要运行时无法提供的东西,或两个模块声称使用同一张表,构建会在部署任何内容之前失败。配置错误的创业项目无法到达生产环境。

Harness::builder() .venture(Venture::new("factory0", "factory0.ventures") .cors_origins(["https://factory0.ventures"])) .module(EmailSignup::new().double_opt_in(true)) .module(Waitlist::new() .products(["kontinuum", "undercover-rockstars"])) .runtime(Cloudflare::new() .db("DB") .mailer(Resend::from_env()) .captcha(Turnstile::from_env())) .build()?
  1. 步骤 1

    命名

    创业项目、其域名、其模块以及为它们作答的 Adapter。一个文件。

  2. 步骤 2

    组合

    构建会拒绝其 Port 运行时未提供的模块,也会拒绝声明同一张表或同一路由的两个模块。

  3. 步骤 3

    交付

    一个无状态 Worker,恰好包含所列出的模块,并拥有自己的数据库、密钥和域名。

THE LAYERS

六层,从运行时到产品。

自下而上阅读:代码运行的位置、所有后端据以编译的 harness、后端、共享产品、运营公司的 Agent,以及独立的创业项目。实心标签表示目前已上线,轮廓标签表示在 harness 中,虚线标签表示计划中。

01RUNTIME

Cloudflare Workers,编译为 WebAssembly

每个创业项目 Worker 的运行位置。数据和邮件就在旁边,同样的代码也可以运行在服务器上。

Workers (wasm32)D1 数据库Resend 邮件KVTurnstile速率限制Postgres,原生运行时
02HARNESS

Cratefield:开源 Rust 核心

Port、路由器和模块。模块请求 Port,Adapter 作答。

Cratefield

Ports

DatabaseMailerCaptchaRateLimiterKeyValueSigner

模块

email-signup候补名单
03BACKENDS

每个创业项目一个 Worker 和一个数据库

每个创业项目由 harness 组合而成,并独立部署。目前已在 harness 上上线的有:

ColonizerFindsYou.workSupportGeniuspromptdecodeGroove GuruPosPluginKeep ShippingOwlpostBloodrankratecla.imSealbinrelease.showLiving BrainShoalTokkerLedgersGhostwritin'SqueezinYoginini
04SHELVES

技术栈:每个创业项目都接入的产品

共享产品,按功能分类上架。每个都是拥有自己客户的公司。

交付与运行

  • VibeCaddie
  • Keep Shipping
  • release.show
  • Shoal

沟通

  • Owlpost
  • Squeezin

安全

  • promptdecode
  • Sealbin

客户

  • SupportGenius
  • PosPlugin
  • Ledgers

内容与 AI

  • Kontinuum
  • Living Brain
  • Tokker
  • Ghostwritin'
05AGENT

五层,每项职能一个 Agent

每一层中的每项职能都是一个 Agent。Colonizer 运行构建层的编码 Agent。

  • DISCOVER3 个 Agent
  • BUILD4 个 Agent
  • OPERATE4 个 Agent
  • DISTRIBUTE3 个 Agent
  • LEARN3 个 Agent

Colonizer:把 GitHub issue 变成 pull request 的编码 Agent

06PRODUCTS

独立创业项目

技术栈之外的创业项目。它们继承基础,但不为基础增添内容。

Undercover RockstarsYogininiFindsYou.workGroove GuruBloodrankratecla.im

六层,自下而上

  1. runtime:Cloudflare Workers,编译为 WebAssembly。每个创业项目 Worker 的运行位置。数据和邮件就在旁边,同样的代码也可以运行在服务器上。
  2. harness:Cratefield:开源 Rust 核心。Port、路由器和模块。模块请求 Port,Adapter 作答。
  3. backends:每个创业项目一个 Worker 和一个数据库。每个创业项目由 harness 组合而成,并独立部署。目前已在 harness 上上线的有:
  4. shelves:技术栈:每个创业项目都接入的产品。共享产品,按功能分类上架。每个都是拥有自己客户的公司。
  5. agents:五层,每项职能一个 Agent。每一层中的每项职能都是一个 Agent。Colonizer 运行构建层的编码 Agent。
  6. products:独立创业项目。技术栈之外的创业项目。它们继承基础,但不为基础增添内容。

一次请求,端到端

访客注册时,谁做什么。

仅根据注册表中的链接绘制。实线表示目前已上线并承载流量;虚线表示计划中,尚未承载任何流量。

  1. 访客

    创业项目网站上的用户

  2. 创业项目 Worker

    每个创业项目一个 Worker,基于 Cratefield harness

    已上线
  3. Owlpost

    面向各项目的邮件

    已上线
  4. SupportGenius

    缺陷报告与支持

    计划中
  5. Colonizer

    编码 Agent,运行在 harness 上

    已上线
  6. Living Brain

    沉淀有效经验的知识库

    计划中

此流程中的链接:访客到 Venture worker,HTTPS 请求:已上线。Venture worker 到 Owlpost,确认邮件:已上线。Venture worker 到 SupportGenius,错误转为问题:计划中。SupportGenius 到 Living Brain,支持内容输入知识库:计划中。Colonizer 到 Living Brain,智能体输入知识库:已上线。

在某个创业项目上注册,以及消息接下来的去向。箭头表示每条链接的方向;状态来自注册表。

MODULES ONLY SEE PORTS

一侧是 Port,另一侧是 Adapter。

模块只请求 Port,从不请求供应商。运行时通过 Adapter 作答。Adapter 属于 harness 本身;状态说明目前哪个已上线的创业项目在使用它。

  • Database

    表、查询与迁移

    • D1(上线)
    • Postgres(在 harness 中)
    • SQLite(在 harness 中)
  • Mailer

    事务邮件

    • Resend(上线)
    • Owlpost(计划中)
  • Captcha

    机器人检测,故障时默认拒绝

    • Turnstile(在 harness 中)
  • KeyValue

    小型键值状态

    • Cloudflare KV(在 harness 中)
  • RateLimiter

    按键的请求配额

    • Cloudflare Rate Limiting(在 harness 中)
    • Redis(在 harness 中)
  • Payments

    结账与计费

    • Polar(计划中)
    • Stripe(在 harness 中)
  • TextModel

    模型补全

    • Anthropic(在 harness 中)
    • OpenAI-compatible(在 harness 中)
  • Push

    向设备发送通知

    • APNs(在 harness 中)
    • FCM(在 harness 中)
    • Web Push(在 harness 中)
  • Signer

    按密钥引用签名

    • Turnkey(在 harness 中)

Port 及其 Adapter:Database(表、查询与迁移):D1(上线)、Postgres(在 harness 中)、SQLite(在 harness 中)。Mailer(事务邮件):Resend(上线)、Owlpost(计划中)。Captcha(机器人检测,故障时默认拒绝):Turnstile(在 harness 中)。KeyValue(小型键值状态):Cloudflare KV(在 harness 中)。RateLimiter(按键的请求配额):Cloudflare Rate Limiting(在 harness 中)、Redis(在 harness 中)。Payments(结账与计费):Polar(计划中)、Stripe(在 harness 中)。TextModel(模型补全):Anthropic(在 harness 中)、OpenAI-compatible(在 harness 中)。Push(向设备发送通知):APNs(在 harness 中)、FCM(在 harness 中)、Web Push(在 harness 中)。Signer(按密钥引用签名):Turnkey(在 harness 中)。

设计规则

设计遵循的四条规则。

  • 01

    模块只能看到端口。

    模块只需要数据库、邮件发送器或验证码,从不直接接触 Cloudflare binding 或供应商客户端,由适配器来回应。正是这一条规则,让日后离开 Cloudflare 只需改动一个 crate。

    模块MailerAdapter
  • 02

    组合在编译时完成。

    没有插件加载,没有注册表服务,没有运行时意外。Worker 包含创业项目所列出的内容,编译器是第一位审查者。若某个模块的源代码不应进入共享构建,可将其作为独立 Worker 运行,通过服务绑定挂载在同一路径下。它仍然是组合而成的,只是不在同一个二进制文件中。

    编译拒绝部署
  • 03

    一个创业项目,一个数据库。

    公司之间在运行时不共享任何东西。每家都有自己的 worker、数据和密钥。可以备份、迁移或关闭某个创业项目,而不影响其他项目。

    Worker数据库密钥
    Worker数据库密钥
    Worker数据库密钥

    不共享运行时

  • 04

    从设计上就是无状态的。

    除了写入数据库的内容,请求结束后什么都不留。确认链接和退订链接都是签名令牌,因此无需运行、扩展或泄露会话存储。

    请求Worker数据库

    无会话存储

状态

harness 的现状。

进展以 issue 和里程碑的形式公开跟踪。

  1. M0完成

    基础

    工作区工具、核心、Cloudflare 运行时、Resend 与 Turnstile Adapter、SQLite Adapter、fz CLI 和测试套件。

  2. M1完成

    首批模块

    邮件注册、候补名单、模板、安全基线与可观测性。

  3. M2进行中

    首个创业项目上线

    crates.io 发布、文档、契约版本管理,以及首个使用独立 API 域名的创业项目。

  4. M3完成

    自托管可移植性

    Postgres Adapter、原生运行时、覆盖 SQLite 与 Postgres 的一致性测试套件,以及数据导出与导入。

设计
30 份决策记录,全部在代码仓库中
ARCHITECTURE
架构文档共 12 个章节
首批模块
邮件注册与候补名单,已构建
已发布
大多数 crate 已发布在 crates.io。新一轮发布待进行。
MANAGED SERVICE
尚未构建。控制平面已设计,尚未编写。

harness 数据:2026-10-21 读取自 Cratefield/harness。

SECURITY AND PRIVACY

请求与数据之间的六层。

每一层都是 harness 文档中记载的一项控制措施。完整列表见其安全与隐私文档。

  1. 01 · EDGE

    仅限创业项目自己的来源

    创业项目的 Worker 在自己的域名上响应。CORS 只允许该创业项目列出的来源,每个响应都会回显请求 ID。

  2. 02 · ABUSE

    机器人与流量洪泛

    Turnstile,故障时默认拒绝。每个公开写入操作都通过 RateLimiter Port 进行速率限制。

  3. 03 · REQUESTS

    不含邮箱地址的错误与日志

    错误以 problem+json 返回,每种情况对应固定的 slug。每个请求一行结构化日志,绝不包含邮箱地址。

  4. 04 · TOKENS

    链接,而非会话

    确认链接和退订链接使用 HMAC 签名,并支持密钥轮换。没有需要运行、扩展或可能泄露的会话存储。

  5. 05 · SECRETS

    信封加密

    密钥经信封加密并绑定到所在行。KMS Port 的本地文件提供方拒绝在生产环境使用。

  6. 06 · 隔离

    一个创业项目,一个数据库

    公司之间不共享运行时。每家公司都有自己的 Worker、数据和密钥,可单独迁移或关停。

开放内容

工厂车间是公开的。配方不公开。

harness、其运行时、Adapter 以及前两个模块采用 MIT 许可证,并公开开发。任何人都可以基于它们构建后端,我们运营的每个创业项目也是如此。体现 Factory Zero 如何运营各公司的模块保持私有。各创业项目自己的后端同样私有。

有一个创业项目就是 harness 本身。Cratefield 采用开源 harness,并在其外加上托管层:它会在你自己的 Cloudflare 账户内开通 worker、数据库和密钥并负责运营。harness 是真实存在且在运行的;这个控制平面已设计但尚未编写。模块边界的价值也体现在这里:客户可以构建并部署自己的模块,而源码无需到达我们这里。

决策在做出时就被记录下来。架构文档和决策记录都在仓库里,包括一份说明为何放弃第一次尝试的记录。

整个技术栈的许可证

技术栈中的 17 个项目里,有 11 个是开源项目,每个都在 OSI 许可证下拥有公开仓库。条形图和方块取自注册表的许可证字段。

  • KontinuumMIT
  • CratefieldMIT
  • ColonizerMIT
  • SupportGeniusMIT
  • promptdecodeMIT
  • Keep ShippingMIT
  • LedgersMIT
  • Ghostwritin'MIT
  • SealbinApache-2.0
  • Living BrainApache-2.0
  • TokkerApache-2.0
  • VibeCaddie非开源
  • PosPlugin非开源
  • Owlpost非开源
  • release.show非开源
  • Shoal非开源
  • Squeezin非开源

技术栈项目按许可证分类:Kontinuum:MIT。Cratefield:MIT。VibeCaddie:非开源。Colonizer:MIT。SupportGenius:MIT。promptdecode:MIT。PosPlugin:非开源。Keep Shipping:Apache-2.0。Owlpost:非开源。Sealbin:Apache-2.0。release.show:非开源。Living Brain:Apache-2.0。Shoal:非开源。Tokker:Apache-2.0。Ledgers:MIT。Ghostwritin':MIT。Squeezin:非开源。