bknd:一个能嵌进前端、跑在 Cloudflare Worker 上的 Firebase 替代
阅读时间: 大约 9 分钟
bknd:一个能嵌进前端、跑在 Cloudflare Worker 上的 Firebase 替代

Firebase 把后端托管给谷歌,Supabase 把 Postgres 托管给第三方——两者都有供应商锁定的影子。bknd(仓库 bknd-io/bknd)走了第三条路:一个用 TypeScript 写、构建在 Web 标准之上的后端框架,把数据库管理、认证、媒体上传、工作流做成可模块组合的能力,让你能把整个后端”嵌进”自己的前端应用,连 Cloudflare Worker、Vercel、AWS Lambda 这样的边缘运行时也能跑。
一、它解决什么问题
做数字产品总要同时写后端(逻辑)和前端(界面)。从零写后端需要认证、数据库、媒体存储等深知识;用 Firebase/Supabase 又把数据和运行时绑给了一家厂商。bknd 的主张是:后端应该像前端依赖一样,用 npm 装上、跟着你的应用一起部署,而不是一个需要单独运维的服务。它的口号是”no more deploying multiple separate services”——一个进程/一个函数,前后端一起上线。
二、核心机制:Web 标准 + 适配器
从 README 与文档整理,bknd 的设计有几个关键点:
- 全功能可视化后端:内置管理后台(admin dashboard)、REST API、认证、媒体、工作流(flows);
- 模块化、opt-in:data / auth / media / flows 都是可选插件,不要的不打包;
- 基于 WinterTC Minimum Common Web Platform API:只依赖 Web 标准 API,换取跨运行时的可移植性;
- 适配器式基础设施:不抽象底层驱动,直接对接你选的数据库与存储,保留完全控制权;
- 内置 MCP server:可作为 AI Agent 的后端,用 MCP 协议控制后端状态。
把 MCP 当成一等公民内置,是 bknd 区别于传统 BaaS 的信号:它瞄准的不只是”人操作的后台”,还包括”Agent 调用的后端”。Agent 需要持久化状态、受控的数据读写与可审计的操作,而 bknd 把这些原语和一套协议(MCP)打包,理论上可以让一个跑在 Worker 上的小后端同时服务前端用户和外部 Agent。不过这部分与 flows 一样属于较新的方向,官方文档与实际生产案例都还在积累。

它的兼容性矩阵相当宽:
| 维度 | 支持范围 |
|---|---|
| 运行时 | Node.js 22.13+、Bun 1.0+、Deno、浏览器、Cloudflare Workers/Pages、Vercel、Netlify、AWS Lambda |
| 数据库(SQLite) | LibSQL、Node SQLite、Bun SQLite、Cloudflare D1、Durable Objects SQLite、SQLocal |
| 数据库(Postgres) | 原生 Postgres、Supabase、Neon、Xata |
| 前端框架 | React、Next.js、React Router、Astro、Vite、Waku |
| 对象存储 | AWS S3、S3 兼容(R2、Minio、Tigris)、Cloudinary、文件系统、OPFS |
最小用法是一条 CLI:npx bknd run,它会在本地生成 SQLite data.db 并在 http://localhost:1337 打开管理后台。官方称一个完整 bknd 应用作为 API 部署在 Cloudflare Worker 上时,gzipped 后约 300 kB。
这种”后端嵌进前端”的形态,和 PocketBase(Go 写的单文件服务器)、Supabase(托管 Postgres + 自动生成 API)形成有趣对照:PocketBase 追求的是一个独立的、开箱即用的小服务器,技术栈是 Go;Supabase 把你绑在它托管的 Postgres 上,换来成熟的实时订阅与权限体系;bknd 则刻意不做独立服务器,而是让后端代码成为你前端构建产物的一部分,跟着 SSR 应用或边缘函数一起发布。代价是它放弃了”一个稳定后端服务长期运行”的某些便利——比如长连接、后台常驻任务、跨请求的内存状态在无状态边缘函数上都要重新设计;收益则是部署单元极简、供应商切换成本极低。理解这个取舍,比记住它支持多少种数据库更重要。
三、必须看到的官方警告
这是本文最想强调的部分,全部来自官方原文:
- “We are in beta… don’t recommend production use yet”:文档首页黄色警告框明确说,在走向 v1 的过程中不建议生产使用;
- “full backward compatibility is not guaranteed before reaching v1.0.0”:README 警告,v1.0 之前不保证向后兼容,升级可能 break;
- Node 版本门槛极高:因为用了
node:sqlite,要求 Node.js 22.13 或更高,这把大量仍在 Node 18/20 的项目挡在门外; - flows 的 UI 集成”coming soon”:工作流可视化编排界面尚未完成;
- 管理后台默认不设防:本地开发时后台默认开放且无认证(官方解释是为快速原型设计),一旦把它暴露到公网而忘记开启认证,就是典型的安全事故入口。
换句话说,bknd 的”灵活”和”轻量”目前主要兑现于原型与 MVP 阶段,而不是生产级托管后端。
四、优势与局限
优势:
- 真正跨运行时:从 Node 到 Bun、Deno 到 Cloudflare Worker,一份代码到处跑,这在 BaaS 里很少见;
- 不锁定数据库与存储:SQLite/Postgres 任选、S3 兼容存储任选,迁移自由;
- 体积小:约 300 kB gzipped,边缘部署友好;
- 为 AI Agent 时代预留:内置 MCP server,适合做 Agent 状态后端。
局限:
- 明确 beta、不建议生产:官方自己划的红线,企业落地需等 v1;
- 向后兼容无保证:版本快速迭代意味着升级成本;
- 运行时要求新:Node 22.13+ 在很多团队的 CI/容器镜像里尚未普及;
- 企业能力待验证:多租户 RLS、SSO、审计等在文档中是目标能力,成熟度与 Supabase 商业版有差距;
- 安全默认值需手动收紧:后台默认开放,生产部署必须显式开启认证并复查暴露面。
五、谁该用
- 快速做 MVP / 原型的独立开发者:用
npx bknd run几分钟拿到带后台的后端,非常顺手; - 想跑在 Cloudflare Workers / 边缘函数上的团队:它的体积与 Web 标准路线正中场景;
- 需要为 AI Agent 搭状态后端的人:内置 MCP server 值得关注;
- 正在找生产级、长期托管方案的企业:建议先用它做技术预研,正式产品请等 v1 或继续评估 Supabase/PocketBase。