技术 / 开源
普通的部件。一次组装。
每个创业项目都需要后端,而它们都不该自己去做一个。公司存在所需的部件只写一次,作为用 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
命名
创业项目、其域名、其模块以及为它们作答的 Adapter。一个文件。
- 步骤 2
组合
构建会拒绝其 Port 运行时未提供的模块,也会拒绝声明同一张表或同一路由的两个模块。
- 步骤 3
交付
一个无状态 Worker,恰好包含所列出的模块,并拥有自己的数据库、密钥和域名。
THE LAYERS
六层,从运行时到产品。
自下而上阅读:代码运行的位置、所有后端据以编译的 harness、后端、共享产品、运营公司的 Agent,以及独立的创业项目。实心标签表示目前已上线,轮廓标签表示在 harness 中,虚线标签表示计划中。
Cloudflare Workers,编译为 WebAssembly
每个创业项目 Worker 的运行位置。数据和邮件就在旁边,同样的代码也可以运行在服务器上。
Cratefield:开源 Rust 核心
Port、路由器和模块。模块请求 Port,Adapter 作答。
Ports
模块
每个创业项目一个 Worker 和一个数据库
每个创业项目由 harness 组合而成,并独立部署。目前已在 harness 上上线的有:
技术栈:每个创业项目都接入的产品
共享产品,按功能分类上架。每个都是拥有自己客户的公司。
交付与运行
VibeCaddie
Keep Shipping
release.show
Shoal
沟通
Owlpost
Squeezin
安全
promptdecode
Sealbin
客户
SupportGenius
PosPlugin
Ledgers
内容与 AI
Kontinuum
Living Brain
Tokker
Ghostwritin'
五层,每项职能一个 Agent
每一层中的每项职能都是一个 Agent。Colonizer 运行构建层的编码 Agent。
- DISCOVER3 个 Agent
- BUILD4 个 Agent
- OPERATE4 个 Agent
- DISTRIBUTE3 个 Agent
- LEARN3 个 Agent
Colonizer:把 GitHub issue 变成 pull request 的编码 Agent
独立创业项目
技术栈之外的创业项目。它们继承基础,但不为基础增添内容。
六层,自下而上
- runtime:Cloudflare Workers,编译为 WebAssembly。每个创业项目 Worker 的运行位置。数据和邮件就在旁边,同样的代码也可以运行在服务器上。
- harness:Cratefield:开源 Rust 核心。Port、路由器和模块。模块请求 Port,Adapter 作答。
- backends:每个创业项目一个 Worker 和一个数据库。每个创业项目由 harness 组合而成,并独立部署。目前已在 harness 上上线的有:
- shelves:技术栈:每个创业项目都接入的产品。共享产品,按功能分类上架。每个都是拥有自己客户的公司。
- agents:五层,每项职能一个 Agent。每一层中的每项职能都是一个 Agent。Colonizer 运行构建层的编码 Agent。
- products:独立创业项目。技术栈之外的创业项目。它们继承基础,但不为基础增添内容。
一次请求,端到端
访客注册时,谁做什么。
仅根据注册表中的链接绘制。实线表示目前已上线并承载流量;虚线表示计划中,尚未承载任何流量。
访客
创业项目网站上的用户
创业项目 Worker
每个创业项目一个 Worker,基于 Cratefield harness
已上线Owlpost
面向各项目的邮件
已上线SupportGenius
缺陷报告与支持
计划中Colonizer
编码 Agent,运行在 harness 上
已上线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。
模块MailerAdapter02
组合在编译时完成。
没有插件加载,没有注册表服务,没有运行时意外。Worker 包含创业项目所列出的内容,编译器是第一位审查者。若某个模块的源代码不应进入共享构建,可将其作为独立 Worker 运行,通过服务绑定挂载在同一路径下。它仍然是组合而成的,只是不在同一个二进制文件中。
编译拒绝部署03
一个创业项目,一个数据库。
公司之间在运行时不共享任何东西。每家都有自己的 worker、数据和密钥。可以备份、迁移或关闭某个创业项目,而不影响其他项目。
Worker数据库密钥Worker数据库密钥Worker数据库密钥不共享运行时
04
从设计上就是无状态的。
除了写入数据库的内容,请求结束后什么都不留。确认链接和退订链接都是签名令牌,因此无需运行、扩展或泄露会话存储。
请求Worker数据库无会话存储
状态
harness 的现状。
进展以 issue 和里程碑的形式公开跟踪。
- M0完成
基础
工作区工具、核心、Cloudflare 运行时、Resend 与 Turnstile Adapter、SQLite Adapter、fz CLI 和测试套件。
- M1完成
首批模块
邮件注册、候补名单、模板、安全基线与可观测性。
- M2进行中
首个创业项目上线
crates.io 发布、文档、契约版本管理,以及首个使用独立 API 域名的创业项目。
- M3完成
自托管可移植性
Postgres Adapter、原生运行时、覆盖 SQLite 与 Postgres 的一致性测试套件,以及数据导出与导入。
- 设计
- 30 份决策记录,全部在代码仓库中
- ARCHITECTURE
- 架构文档共 12 个章节
- 首批模块
- 邮件注册与候补名单,已构建
- 已发布
- 大多数 crate 已发布在 crates.io。新一轮发布待进行。
- MANAGED SERVICE
- 尚未构建。控制平面已设计,尚未编写。
harness 数据:2026-10-21 读取自 Cratefield/harness。
SECURITY AND PRIVACY
请求与数据之间的六层。
每一层都是 harness 文档中记载的一项控制措施。完整列表见其安全与隐私文档。
- 01 · EDGE
仅限创业项目自己的来源
创业项目的 Worker 在自己的域名上响应。CORS 只允许该创业项目列出的来源,每个响应都会回显请求 ID。
- 02 · ABUSE
机器人与流量洪泛
Turnstile,故障时默认拒绝。每个公开写入操作都通过 RateLimiter Port 进行速率限制。
- 03 · REQUESTS
不含邮箱地址的错误与日志
错误以 problem+json 返回,每种情况对应固定的 slug。每个请求一行结构化日志,绝不包含邮箱地址。
- 04 · TOKENS
链接,而非会话
确认链接和退订链接使用 HMAC 签名,并支持密钥轮换。没有需要运行、扩展或可能泄露的会话存储。
- 05 · SECRETS
信封加密
密钥经信封加密并绑定到所在行。KMS Port 的本地文件提供方拒绝在生产环境使用。
- 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:非开源。