GitHub 推荐:105K stars 的 Postgres Firebase:Supabase 把开源工业级组件拼成的事实标准
一句话总结
Supabase 不是另一个 BaaS,而是把 Postgres 30 年的工程沉淀(RLS、pg_catalog、logical replication、pg_cron)当作 Lego 块,与 PostgREST、GoTrue、Deno Edge Functions 等开源组件组合,得到的「可独立运行又彼此 10x 放大」的开源 Firebase 替代品。
值得关注的理由
- 可独立运行的设计哲学:每个组件都「能脱离 Supabase 独立工作」,跟 Firebase 的「绑死闭源」根本对立——你随时
pg_dump迁走。这是它值得研究的核心设计取舍。 - Postgres 当作单一权威数据源:Auth 用户、Storage 文件元数据、Realtime 事件流都存 Postgres,
packages/pg-meta把 pg_catalog 系统表 join 出 TS 类型——开源界罕见的「schema-driven 类型化」实现。 - AI 时代抢占卡位:内置 pgvector、Edge Functions(Deno)、ai-commands SchemaBuilder 强类型化 OpenAI 输出——三件套一起做,让 Postgres 同时充当关系库 + 向量库 + AI 后端。
项目展示
Studio Dashboard:SQL Editor / Table Editor / Auth / Storage / Edge Functions 五大核心模块的整合入口
官方架构图:Postgres 在中央,PostgREST / GoTrue / Realtime / Storage / Edge Functions / Studio 围绕
浅色模式 Studio 截屏:左侧导航 + 中间 Table Editor
深色模式 Studio 截屏:项目级监控面板 + Realtime 频道管理
项目画像
| 维度 | 数据 |
|---|---|
| GitHub | https://github.com/supabase/supabase |
| Star / Fork | 105,418 / 12,967 |
| 代码行数 | 1,359,208(TSX 34.2% + TypeScript 22.0% + JS 2.8% = TS 系 ~59%) |
| 文件数 | 9,707(含 384 个 JSON 锁文件/配置) |
| 项目年龄 | 80.8 个月(2019-10-12 至今) |
| 开发阶段 | 密集开发(最近 365 天 5,422 commits,2026 年再次提速到 500+/月) |
| 贡献模式 | 公司主导 + 社区广泛参与(2,016 贡献者;Top 10 占 46.8%,前两名 19.9%) |
| 热度定位 | 大众热门 / 行业事实标准 |
| 许可证 | Apache 2.0 |
| Latest tag | v1.26.05(仅 54 tag;后端核心服务拆分到独立仓库各自打 tag) |
| 质量评级 | 代码良好 / 文档优秀 / 测试基本 / CI 完善 |
作者视角:为什么存在这个项目
创始人/作者背景
- Paul Copplestone(CEO,“kiwicopple”):新西兰开发者,前 Bitfount 工程师;早期 Firebase 重度用户,被 NoSQL 与 vendor lock-in 困住后转向 Postgres。
- Ant Wilson(CTO):英国 Postgres 顾问,企业级 PG 部署专家。
- 公司 Supabase Inc.:YC S20 毕业,已完成 Series B/C 融资(公司估值报告累计融资 ~$116M),全员远程。
- 背景如何塑造项目:Paul 的「Firebase DX vs Postgres 力量」痛点 + Ant 的 Postgres 深度积累 → 直接催生「开源 Firebase 替代」定位 + Postgres-first 架构选择。
问题判断
Firebase 是单一厂商闭源产品;单独用 Postgres 需要自己拼 REST / Auth / Realtime / Storage;自托管 BaaS(Appwrite / Pocketbase)跑在 MySQL / MariaDB / SQLite 上——丢掉了关系型 + 30 年 PG 生态。Supabase 的判断:Postgres 已经够强(RLS、logical replication、pg_stat、pg_catalog),缺的只是「让它们像 Firebase 一样被按 API 调用」的薄薄一层。
解法哲学(官方四大原则)
- Isolation(隔离):每个组件可独立运行(“Can a user run this product with nothing but a Postgres database?” 是组件入选试金石)。
- Integration(集成):组件必须能「10x 放大」其他产品的能力。
- Extensibility(可扩展):偏好 primitives 而非 niche features(“Less, but better”)。
- Portability(可移植):偏好 pg_dump / CSV 等标准,避免 lock-in。
明确不做什么:不重写 Postgres;不做 NoSQL;不绑死任何前端框架;不藏 API(PostgREST 就是公开规范);不绑死云(self-host 是头等公民)。
战略意图
Open-core 模式:核心产品完全开源 + 自托管完整可用;云上增值(Log Drains、Read Replicas、Point-in-time Recovery、每日 Backups、Compute Add-ons)。Managed Cloud(Free/Pro/Team/Enterprise 四档)是营收主力;开源是获客漏斗。Studio Dashboard 完全开源——是建立信任的关键。
核心价值提炼
创新之处(按新颖度 × 实用性排序)
- Postgres
pg_catalog当作 ORM metadata(novelty 4 / practicality 5):packages/pg-meta/src/sql/tables.ts把pg_class/pg_constraint/pg_index/pg_policyjoin 起来,输出 TS 类型。Studio UI 完全是这个 schema 的可视化。取代 Prisma / Drizzle 的自有元数据层——schema 即类型。 - Storage 权限统一走 Postgres RLS(4/5):
apps/studio/components/interfaces/Storage/StoragePolicies/PolicyDefinition.tsx让用户在 UI 写USING / WITH CHECK表达式,底层就是 PG policy,policy 里直接调auth.uid()。Policy Editor 把 RLS 暴露成表单——开源界首例把「行级权限 + 文件权限」统一在 DB 层的产品。 - Compile-time safe SQL via tagged template(3/4):
packages/pg-meta/src/pg-format.ts的safeSql是 tagged template literal,类型SafeSqlFragment | UntrustedSqlFragment在编译期区分;用户输入 SQL 必须显式acceptUntrustedSql才能拼接。Kysely / Drizzle 都未做到编译期区分。 - Postgres 多生态复用为 primitives(3/5):Realtime 用 logical replication、CRON 用 pg_cron、webhook 用 pg_net——这些 PG extension 直接当作 Supabase 功能暴露,不重写。
- SchemaBuilder + TS inference 把 OpenAI function calling 类型化(3/4):
packages/ai-commands用@serafin/schema-builderDSL 定义 JSON schema,typeof schema.T自动生成 TS 类型——LLM 输出是编译期类型,零运行时 schema 同步成本。Prompt 中嵌入 Postgres 偏好(“use bigint identity, prefer text over varchar”)。 - Examples-as-Documentation(2/5):
examples/user-management提供 17 个前端框架变体(nextjs / nuxt3 / svelte / sveltekit / react / vue3 / flutter / swift 等),每个都是完整可跑子项目。这是降低 onboarding 成本的硬道理。
可复用的模式与技巧
- Postgres pg_catalog 当 ORM metadata 输出 TS 类型:取代 Prisma / Drizzle 自有元数据层;schema 即类型(
packages/pg-meta/src/sql/*.ts) - Tagged Template SQL 防注入 + 编译期类型:
packages/pg-meta/src/pg-format.ts的safeSql / rawSql / acceptUntrustedSql - SchemaBuilder DSL → JSON Schema + 推断 TS 类型:
packages/ai-commands/src/sql/functions.ts - UI 双层设计:
packages/ui(atomic 组件) +packages/ui-patterns(composite 复合模式) - Compose overlay:
docker/docker-compose.yml基础 +docker-compose.{caddy,envoy,logs,nginx,rustfs,s3}.yml场景化 - RLS + Storage 权限统一:policy 表达式 = 文件读写权限
- Examples-as-Docs:每语言/框架一个完整可跑子项目
- Braintrust Evals 集成:AI 输出自动评分入 Braintrust 防止 regression(
apps/studio/evals/+.github/workflows/braintrust-evals.yml)
关键设计决策(trade-off 分析)
| 决策 | 取舍 | 适用场景 |
|---|---|---|
| Postgres 作为单一权威数据源 + 一切组件复用 PG 生态 | 所有组件可用性绑死 Postgres;连接池压力大(→ Supavisor 存在的原因) | 任何用 Postgres 的项目都可借鉴「元数据也存 PG」 |
| Studio 用 Next.js + Valtio store + React Query 双轨 | 双状态源导致同步复杂度上升(SQL Editor README 自己列出 4 处待重构) | SQL 编辑器场景专属,但「乐观更新 client store + 服务端数据 React Query」通用 |
SQL Template 用 tagged template literal (safeSql) | 多一层抽象;新人 onboarding 成本;IDE 跳转不如 .sql 文件直接 | 任何需要「参数化 SQL + 编译期检查」的项目 |
| Storage Policy Editor 复用 RLS | RLS 学习曲线比 IAM 陡;性能与 policy 数量相关 | 任何「DB + 对象存储」需要权限统一的产品 |
| Examples-as-Documentation(82 个子目录) | 维护负担重(每个框架升级要同步);比 docs 更容易过时 | SDK / BaaS 产品降低 onboarding 成本 |
| Self-hosted 用 docker-compose + 多个 overlay | overlay 多了维护负担;compose schema 与 managed cloud 有 drift(issue #26785 / #16857 反映自托管是当前痛点) | 「compose 主文件 + overlay」拆分对任何复杂本地栈通用 |
竞品格局与定位
竞品对比矩阵
| 维度 | Supabase | Firebase | Appwrite | Pocketbase | Hasura |
|---|---|---|---|---|---|
| Stars | 105K | 闭源 | 56K | ~45K | ~30K |
| 数据库 | Postgres | Firestore (NoSQL) | MariaDB | SQLite | Postgres(无 DB 层) |
| 自托管 | ✅ 完整可用 | ❌ 基本不可行 | ✅ 简单 | ✅ 单二进制 | ✅ |
| 关系型 + 生态 | ✅ PostGIS / pgvector / TimescaleDB | ❌ | ❌ | ❌ | ✅ |
| 客户端 SDK 数量 | 9 语言 | 顶级 | 28+ | Go / JS | GraphQL 客户端 |
| Auth / Storage / Realtime / Functions 全套 | ✅ | ✅ | ✅ | 仅 Auth + DB + 文件 | ❌ 仅 GraphQL 网关 |
| 多区域 / 企业级 IAM | ✅ | ✅ BigQuery 集成 | 一般 | 弱 | ✅ |
差异化护城河
- 生态护城河:最大 Postgres BaaS,9 个客户端 SDK 语言;NextAuth / Clerk / shadcn 等默认集成
- 信任护城河:Studio 完全开源 + 自托管完整;vs Firebase 闭源是核心信任差异
- 转换成本护城河:RLS policy 一旦写好迁移成本高(policy 表达式是项目级业务资产)
竞争风险
- Neon + Hasura + Clerk + UploadThing 的「best-of-breed 组合」:理论上的解构者(每个组件都比 Supabase 内置的强,但需要自己拼)
- Pocketbase 在简单场景:单二进制 + 零依赖,对小型项目/IoT/原型是直接替代
- Appwrite 在数据库无关需求下:28+ SDK + MongoDB 支持,是 Supabase 的相邻替代
- AI 时代 vector DB(Turbopuffer / Qdrant):pgvector 在极端规模可能被独立向量库替代
生态定位
「Postgres 时代的 Firebase」——把 Postgres 当事实标准的 BaaS 入口。开放核心(open core)+ 云增值。在数据基础设施层与 Neon / PlanetScale / TimescaleDB 同台竞争 BaaS 层。
套利机会分析
- 信息差:❌ 不被低估——已是 Postgres BaaS 事实标准、105K stars;属于「已验证的成熟产品深度解读」型选题
- 技术借鉴(✅ 核心价值):
- pg_catalog 当 ORM metadata:任何用 PG 的项目都可放弃 Prisma/Drizzle 自有元数据层
- Compile-time safe SQL:Kysely / Drizzle 都未做到的编译期区分
- SchemaBuilder + TS inference 强类型化 LLM 输出:任何 AI function calling 项目通用
- RLS 即权限层:DB + 对象存储需要统一权限时的范式
- Examples-as-Docs:SDK / BaaS 产品降低 onboarding 的硬道理
- 生态位:✅ 「Postgres 之上的 BaaS」已是事实标准;细分位「可自托管的 enterprise Postgres BaaS」仍有空间(vs Firebase 闭源)
- 趋势判断:✅ 2026 年 commit 提速(500+/月),AI / 向量 / Edge Functions 三件套卡位好;比 Firebase 强在 AI 时代 PG 生态(pgvector)vs Firestore 局限
风险与不足
- 自托管 DX 是当前最大痛点:Top issues 高度集中(#26785 Kong 日志、#16857 Storage 上传、#40985 Auth 安全 API 重构);compose overlay 维护负担重,与 managed cloud 有 drift
- Studio 复杂度极高:数个 package.json + 混合 Next.js + TanStack Router + Vite;重构成本高
- 测试覆盖率无强制阈值:仅基本覆盖;Braintrust Evals 覆盖 AI 输出;SQL Editor 核心流程有测试但整体覆盖率不显式
- 错误处理「一般」:console.error 守卫而非统一 error boundary;缺 Result / Either 类型化错误流;运行时错误大多 throw + 上层 catch toast
- monorepo 路径历史复杂:
to-be-cleaned/Storage/旧路径已删除;studio/与apps/studio/、web/docs/与apps/docs/重叠反映多次重构 - AI 输出仍需二次校验:ai-commands 用 jsonrepair 兜底,prompt 越长 token 越多
行动建议
- 如果你要用它:
- ✅ 选它:Postgres-first 项目;可自托管 / 可迁移需求;AI / 向量场景;中小团队全栈 SaaS
- ❌ 不选:极小项目(Pocketbase 更轻);Firebase 重度迁移成本高的现有项目;多数据库需求(Appwrite 支持 MongoDB)
- 如果你要学它:重点关注
packages/pg-meta/src/sql/*.ts(pg_catalog-as-ORM 模式)packages/pg-meta/src/pg-format.ts(safeSql 编译期防注入)packages/ai-commands/src/sql/functions.ts(SchemaBuilder + TS inference)apps/studio/components/interfaces/Storage/StoragePolicies/PolicyDefinition.tsx(RLS as Permission)apps/studio/components/interfaces/SQLEditor/README.md(团队主动写的架构决策 + 技术债清单——金矿)
- 如果你要 fork 它:
- 用
pg_catalog-as-ORM模式做一个 Postgres 直连的 ORM 替代 Prisma / Drizzle - 用
SchemaBuilder + TS inference做一个 LLM function calling 的强类型化框架 - 用
RLS as Permission模式做 DB + 对象存储统一的权限中间件
- 用
知识入口
| 资源 | 链接 |
|---|---|
| DeepWiki | https://deepwiki.com/supabase/supabase(已收录,索引至 commit a5f4a59e,2026-04) |
| 官方文档 | https://supabase.com/docs |
| 在线 Studio | https://supabase.com/dashboard |
| 架构原理 | https://supabase.com/docs/guides/getting-started/architecture |
| 设计哲学 | https://supabase.com/docs/guides/getting-started/architecture#principles |
| 关联论文 | 无(工程产品,无学术输出) |