Standard Schema 1.0:2026 最重要的『看不见的进步』
影响力:Zod / Valibot / ArkType 三家维护者联合制定 ~60 行 TS 接口,消灭 resolver 矩阵时代。 干活密度:🔵 协议级 + 🟢 干活级 核心承诺:一次写 schema,所有 form / router / RPC 库通用
🔥 影响力卡片
- 起草人:Colin McDonnell(Zod)+ Fabian Hiller(Valibot)+ David Blass(Arktype)
- 1.0 发布:2025-01
- 协议本质:
@standard-schema/spec,~60 行 TS interface,通过~standard属性暴露 - 已采纳:Zod 3.24+/4、Valibot 1+、Arktype 2+、Effect Schema、TanStack Form、TanStack Router、tRPC v11、Hono
sValidator、oRPC、Conform(转接中)、Next.js Server Actions(讨论中)
🎯 为什么必读
过去 5 年前端的”schema validation”赛道有三股力量并跑(Zod / Yup / Joi → Zod / Valibot / Arktype),所有 form / router / RPC 库都要为每家写 resolver(@hookform/resolvers/zod / @hookform/resolvers/yup / …),库锁定库。
Standard Schema 把这一层抽出来标准化 —— 任何实现 ~standard 的库都被消费方一视同仁。意味着选 Valibot 不再是”要重写 form 代码”的决定;选 ArkType 不再是”生态太小”的顾虑。
一句话总结
三家 schema 库联合定义了一个最小通用接口,让上游消费库(form / router / RPC)与下游实现库解耦 —— resolver 矩阵时代终结。
💎 金句墙
★ “a common interface for TypeScript validation libraries.” “TypeScript 验证库的通用接口。” —— standardschema.dev 主页副标。译者点评:“common interface” 选词很克制 —— 不是 “standard”(垄断意味),不是 “spec”(强制意味),是 “common interface”(共识意味)。这反映了三家维护者协作而非竞争的姿态
★ “You can write your code once and it will work with any compliant schema library.” “你写一次代码,它就能与任何兼容的 schema 库一起工作。” —— 译者点评:消费方视角的最大卖点。tRPC v11 / Hono / TanStack Form 已经在做的事情,以前需要为每家库写 adapter,现在零适配
📋 核心精读
1. 协议本质 — ~60 行 TS
// @standard-schema/spec
interface StandardSchemaV1<Input = unknown, Output = Input> {
'~standard': {
version: 1;
vendor: string; // 'zod' / 'valibot' / 'arktype'
validate: (value: unknown) =>
| { value: Output }
| { issues: ReadonlyArray<{ message: string; path?: PropertyKey[] }> }
| Promise<unknown>;
types?: { input: Input; output: Output };
};
}
🟢 译者点评:整个 spec 就这一个 interface。维护成本极低,因此三家维护者愿意承诺。任何想加入的 schema 库实现 ~standard 字段即可。
2. 消费方零适配示例
import type { StandardSchemaV1 } from "@standard-schema/spec";
// 上游消费方:不依赖任何具体 schema 库
function validate<S extends StandardSchemaV1>(schema: S, value: unknown) {
return schema["~standard"].validate(value);
}
// 用任何一家
import { z } from 'zod';
import * as v from 'valibot';
import { type } from 'arktype';
validate(z.object({ name: z.string() }), { name: 'a' });
validate(v.object({ name: v.string() }), { name: 'a' });
validate(type({ name: 'string' }), { name: 'a' });
🟢 译者点评:消费方代码只对 StandardSchemaV1 这个 interface 编程,完全不知道下游用的是哪家。这就是协议化的力量。
3. 三家选型表
| 库 | 体积(login form,esbuild) | 速度 | API 风格 | 适合 |
|---|---|---|---|---|
| Zod 4 | 17.7 kB / Mini 6.88 kB | v4 比 v3 6-14× | 链式 | 默认、生态最广 |
| Valibot 1 | 1.37 kB | 快 | 函数式 + pipe | Edge / Workers / 浏览器 |
| ArkType 2.2 | 中 | 最快(数量级) | 字符串 DSL | 大 schema / 性能敏感 |
🟢 译者点评:这三家定位错位互补。Zod 是默认(“不知道选什么用 Zod”);Valibot 走极小 bundle 路线(“Edge 必选”);ArkType 走 type-as-runtime 极致(“超大 schema 选它”)。Standard Schema 让你不需要二选一。
4. ⚠️ Zod 4 的反例(选型前自核)
社区实测(dev.to/dzakh):
- 简单 schema:Zod 4 比 v3 快 6-14×(官方宣传)
- 冷热路径 + 一次性 schema:Zod 4 比 v3 慢 17×(实测 case)
🟢 译者点评:Zod 4 性能宣传与社区”反例”并存。实战中:
- 长生命周期 schema(每秒 N 次校验)→ v4 收益明显
- 一次性 schema(冷启动 / 单次 lambda)→ v4 可能反而慢
- 务必用自家代表性 schema benchmark 一次再决定
5. tRPC v11 / Hono / TanStack Form 的实战集成
// tRPC v11 — Standard Schema 第一公民
import { initTRPC } from '@trpc/server';
import { z } from 'zod';
const t = initTRPC.create();
t.procedure.input(z.object({ id: z.number() })).query(/* ... */)
// 换成 valibot.object({ id: valibot.number() }) 也行,API 不变
// Hono sValidator
import { sValidator } from 'hono/standard-validator';
import { type } from 'arktype';
app.post('/users', sValidator('json', type({ name: 'string' })), c => c.json({}))
// TanStack Form
const form = useForm({
defaultValues: { email: '' },
validators: { onChange: zodSchema }, // 或 valibotSchema 或 arktypeSchema
});
🟢 译者点评:消费侧完全统一。如果你之后想把 Zod 换成 Valibot 减小 edge bundle,只需要改 schema 文件,form / router / RPC 调用代码不动。
🟢 译者总评
- 现在就改的:用 RHF +
@hookform/resolvers/zod的代码,迁到@hookform/resolvers/standard-schema(如果还没出,继续用 zod resolver,但未来切换零成本) - Edge 项目优先:Workers / Cloudflare / Lambda 冷启动敏感场景,直接评估迁 Valibot(bundle 减 ~90%)
- 大 schema 项目:超过 100 个字段的复杂 schema,跑 ArkType benchmark,可能数量级提速
- Zod 不是输家:Zod 仍是生态最广的默认选择,但你不再被它锁住
- 配套读:Next.js 16 的 Server Actions 部分,以及 llms.txt + Diátaxis 对协议化的另一案例