@akal/supaforge

中文文档
0.0.41发布于 2026/11/06MITTypeScriptES Module构建来源已验证近 30 天下载 1767

抖动并同步您的 Supabase 环境

中文使用文档
文档目录16 节
  1. 快开始
  2. 安装
  3. 比较一下
  4. 图标
  5. 安全应用修正
  6. 姿势检查
  7. 抓图、恢复和克隆
  8. 移徙
  9. 配置
  10. 自办基地
  11. 抖动克隆
  12. CI 和退出代码
  13. MCP(大赦国际代理人)
  14. 钩子
  15. 发展
  16. 许可证

苏帕福吉

抖出并同步您的Supabase环境.

SupaForge比较两个Supabase项目(编外项目和项目,例如) 一切构成一个项目, 不只是计划。 它每报告 并让目标匹配源。 依赖状态运行的修复 在一次交易中,可以在丢弃的副本中证明 任何变化 通过一个单一的项目,它会快照,恢复并克隆它.

  • 整个工程. 它涵盖计划, RLS, 存储, 认证,边函数, cron, webhoks, Realtime, 队列, 分区集, Vault, 扩展, 赠款, 参考数据和移徙历史.
  • 默认安全. 每个字都需要 --apply和任何损失 数据或打开访问权限也需要 --allow-destructive失败的应用程序 目标保持原样.
  • 生产意识. 每道修补都说明它对一个活的数据库所做的: 锁定它持有的和在哪个桌子上, 无论它可能重写表格或扫描 每行,是否不能在交易中运行.
  • 证相可证. --prove 排练迁移并拒绝应用 那不会复制源头 或者会失去行.
  • 随便. 它与Supabase Cloud合作,自办堆栈,平地 PostgreSQL目标,CI管道和AI代理(MCP).

由 阿卡尔。 。 。 .

快开始

npm install -g @akal/supaforge

supaforge init              # create supaforge.config.json
supaforge diff              # what has drifted?
supaforge diff --detail     # with the SQL
supaforge diff --apply      # fix the target

所有先写预览. 添加 --apply 让它发生.

安装

无npm install -g @akal/supaforge,或运行它与 npx @akal/supaforge
土生土长brew install akalsoftware/tap/supaforge
夹克docker run --rm -v "$PWD:/work" ghcr.io/akalsoftware/supaforge diff
GitHub 动作akalsoftware/supaforge-action 看到了吗 中情局
VS 代码及其分叉SupaForge扩展:命令,以及编辑器代理的MCP服务器. 每个 释放 把它当作一个 .vsix
光标, VS 代码, Claude单击安装 MCP 服务器 — 见 MCP 磁共振

它需要20号节点或更新。 DBDiff,它的Diff引擎, 随它而来作为一个 用于您的平台的本地二进制, 所以没有其他可安装的 。 这个 Docker 图像不需要任何东西, 并携带 PostgreSQL 客户端工具 --prove 用户; 通过连接字符串 -e,然后在 /work。 。 。 .

比较一下

检查内容固定为
司马@dbdiff/cli: 你拥有的每一个计划SQL 组合键
参考数据表格行数 checks.data.tablesSQL 组合键
RLS政策pg_policies,按含义比较,而不是文本SQL 组合键
RLS覆盖目标中含有 RLS 的表格(仅指目标)SQL, 选入
边缘函数管理 API、 Studio 或函数目录部署指挥
存储Buckets 及其政策( 对象从未复制)API 和 SQL 数据
认证配置管理 API 或 Gotrue 自动托管API(主办)
连续任务cron.jobSQL 组合键
队列Supabase 队列( Q)pgmq.meta),通过 pgmq 创建并投放SQL 组合键
分区集pg partman 注册 (part_config页:1 create_parentSQL 组合键
网络呼号触发器呼叫 supabase_functions.http_requestSQL 组合键
实时出版物和政策 realtime.messagesSQL 组合键
默认秘密名称和描述( 无法读取值)要运行的命令
扩展pg_extensionSQL 组合键
移徙历史本地移民档案 supabase_migrations (仅指目标)SQL, 选入
作用和赠款自定义角色,并授予表格、视图、序列和功能,包括: anon, (中文(简体) ), authenticated, (中文(简体) ), service_roleSQL 组合键

计划检查包括表格、列、密钥、索引、分区、视图、, 实现视图、函数、汇总、触发、事件触发、规则、, 序列、元素、复合和范围类型、域、铸造、扩展 统计、文本搜索配置和词典、外国服务器、, 用户映射和外国表格、政策、默认权限、复制 身份、统计目标、扩展和评论。 更名的一栏, 表格或序列被重新命名,保留其行,而不是下放和 再次创建。 它运行在每一个计划 除了Supabase自己的(auth, (中文(简体) ), storage,等等) 和那些在 ignoreSchemas中 扩展属于它,而不是比较。 那种东西 它不会 比较,如操作员类,在检查下命名,以便您可以查看 在他们手边,他们不被认为是漂移的.

一个无法运行的支票,比如没有API的证书,就这么说和为什么. 从来不报作净道.

图标

supaforge init                    Create a config interactively
supaforge diff                    Report drift (alias: hukam)
supaforge sync                    Alias for diff --apply

supaforge snapshot --apply        Capture an environment's structure and configuration
supaforge restore --apply         Rebuild a database from a snapshot or migrations
supaforge clone --apply           Copy a remote database to a local one

supaforge migrate create          Write a migration file from the current drift
supaforge migrate list            Local migrations, applied and pending
supaforge migrate run --apply     Run pending migrations
supaforge migrate baseline --apply  Mark migrations applied without running them

supaforge report                  Recent runs, from a local log
supaforge mcp                     MCP server for AI agents
supaforge help <command>          Every flag, e.g. help diff

有用 diff 旗帜 :

旗帜对
--check=rls 编号 : --skip=storage一张支票,或者除了一些--skip 重复)
--tables=orders,items 编号 : --exclude-tables='*_log'范围和数据检查
--only=<id,...>只应用这些发现(ID来自 --json, 允许使用 globs)
--dry-run按他们运行的顺序打印修正,不运行
--prove先排练丢弃副本上的修补
--source-dir <dir>比较 schema 文件目录( 如 supabase/schemas) 目标而不是源数据库
--allow-destructive还应用滴和删除
--apply-posture还应用只检查对象的校正
--no-transaction通过固定应用修复, 保持什么工作
--no-snapshot自行读取每个查询. 默认每个数据库都读作一个瞬间,所以在扫描运行被所有数据库或无数据库看到时做了更改 pg_dump,其读取的内容将一直锁定,直到扫描结束
--json 编号 : --ci机器可读输出; CI 说明和退出代码

安全应用修正

  • 先预想. diff, (中文(简体) ), snapshot, (中文(简体) ), restore, (中文(简体) ), clone 财务报告和审定财务报表 migrate run 没有写什么 --apply。 。 。 .
  • 破坏修复需要第二面旗帜. 丢弃计划、表格或 列,删除或切换行,并删除 RLS 策略 但跳过直到您添加 --allow-destructive。 。 。 . migrate run 使用同样的 有门.
  • 抚养令. 修复按依附顺序运行:在 触发它们,在它们索引前的列,最后下降。 变化 对象必须被丢弃和再创建是单一的固定.
  • 一个交易. 如果修复失败, 整个设定会回滚和目标 不变。 固定目标无法控制,因为它需要扩展或 a 目标缺少的Supabase计划, 与原因无关, 其余的 仍然适用.
  • --prove。 。 。 . 修复在目标结构的副本上重放, 在目标自己的服务器上, 应用程序运行的方式, 有 各表行的样本。 除非结果相符,否则不应用 源头和行都活下来了 如果证据不能证明的话 就什么也不能应用 运行。 它也命名了重写修正的表格。 更改副本无法保存, 例如 cron 任务( pg cron lives in one database each server), 列出为 未证实.
supaforge diff --dry-run                 # the plan, in order
supaforge diff --apply --prove           # rehearse, then apply
supaforge diff --apply --only='schema-create-*'

姿势检查

RLS的覆盖范围和移民历史 仅看目标,所以他们报告 同样的发现 无论你对 diff。 他们被分开了 (单位:千美元)Posture score),除非通过,否则不要设置退出代码 --fail-on-posture,其修正仅适用于 --apply-posture,或 当您为支票命名时, 如 --check=rls-coverage --apply应用 盲目地将目标远离源头.

抓图、恢复和克隆

supaforge snapshot --env=prod --apply                     # capture
supaforge snapshot --env=prod --migration --apply         # and write what changed since the last one
supaforge restore --env=local --from-snapshot=latest --apply
supaforge clone --env=prod --apply                        # local copy, data included

一个快照记录了一个项目的架构和配置: schema, RLS 策略, cron, webhooks, 扩展, 存储, 认证, 边缘函数, 参考数据、实时、地壳名称和赠款. 这不是一个 备份. 它无一行可走 checks.data.tables,没有存储文件. 它的图案被写成 SQL 由 pg_dump,它至少必须像 服务器; 如果没有一个, 快照仍然可以被分解但不能恢复,以及 snapshot 出口1,除非 --allow-schema-json-only 说够了.

restore --from-snapshot 显示后 :

已恢复页:1
扩展、计划、 RLS 政策、 cron 工作、网点、实时出版物、赠款作为SQL,按依赖顺序排列. 首先创建政策或授权名称
储存政策和桶当目标存在时,会创建 Bucket 行 storage schema; 文件从未是
参考数据这行 checks.data.tables父母在孩子出生之前, 序列移动过恢复的id

它不能放回认证配置, 边缘函数( 用 supabase functions deploy),或Vault秘密值. 每个都命名于 输出.

  • 目标. 还原为一个交易并期望一个空数据库 . --force 清除快照本身的图谋 首先(从来不是Supabase的)和 把触发器和政策放回去 取决于它是什么 清除。 似乎比 目标允许在交易开始前这样说; --no-transaction 照原样行事.
  • Plain PostgreSQL (英语). 恢复为平原 PostgreSQL 工作. 什么无法 已跳过并命名 : auth.users一个网棍, 服务器不会发送扩展, 以及需要它的一切.
  • 退出代码. 一号出口漏了东西 也一样 拒绝逃跑.
  • 贾森. --json 仅打印 JSON,用于预览.

clone 将远程数据库复制到本地服务器 pg_dump 财务报告和审定财务报表 pg_restore (单位:千美元)--schema-only )),以出行为后. 本地扩展 服务器已首先安装 。 无法修复的物体列表为 事业。 之后的配置 target 点在克隆,所以赤裸裸 diff --apply 而不是写在遥控器上.

移徙

supaforge migrate create --name=add_orders   # from the drift between source and target
supaforge migrate run --env=prod             # preview
supaforge migrate run --env=prod --apply
  • 档案与历史. 文件存在于 supabase/migrations (一组) checks.migrations.dir 以改变它。 应用版本录入 supabase_migrations.schema_migrationsSupabase CLI的桌子.
  • 破坏说法. migrate create 列出它所写的,以及 migrate run 需求 --allow-destructive 运行他们.
  • 历史表权限. 在自办的堆栈上,历史表可以 属于管理角色。 SupaForge 然后说 GRANT 相反,需要 以光准错误失败.
  • 没有跟踪记录的项目. checks.migrations.mode 决定 移民史如何报告: auto (一注当无 跟踪, warn 或者说 ignore。 。 。 .

配置

{
  "environments": {
    "dev":  { "dbUrl": "$DEV_DATABASE_URL",  "projectRef": "abc123", "accessToken": "$SUPABASE_ACCESS_TOKEN" },
    "prod": { "dbUrl": "$PROD_DATABASE_URL", "projectRef": "xyz789", "accessToken": "$SUPABASE_ACCESS_TOKEN" }
  },
  "source": "dev",
  "target": "prod",
  "checks": {
    "data": { "tables": ["plans", "feature_flags"] },
    "exclude": ["edge-functions"]
  }
}
外地含义
dbUrlPostgreSQL 连接字符串 . $VAR 财务报告和审定财务报表 ${VAR} 从环境读取
projectRef, (中文(简体) ), accessToken启用管理 API 检查( 自动, 边缘函数)
apiUrl自动托管的 API 网关, 代替 projectRef
studioUrl, (中文(简体) ), functionsPath自备的边缘函数从
source, (中文(简体) ), target比较一下:来源是事实,目标得到固定
ignoreSchemas你们自己留下的石刻
checks.data.tables比较并取景的表格
checks.exclude检查永不运行( 与 --skip(中文(简体) )
checks.tables, (中文(简体) ), checks.excludeTables计划和数据检查的默认范围
checks.migrations.dir, (中文(简体) ), checks.migrations.mode移民的住址和历史记录
  • 每个环境. checks.exclude 财务报告和审定财务报表 checks.schema.timeout 还可以 被设定在环境上,并在目标时应用.
  • .env 文档. .env 文件已装入 Next.js 方式 : .env.{NODE_ENV}.local, (中文(简体) ), .env.local, (中文(简体) ), .env.{NODE_ENV}, (中文(简体) ), .env数值 在环境中已经赢了.
  • 单一数据库. 包含单一环境的配置和没有 source编号 :target 没事 使用 snapshot, (中文(简体) ), clone 财务报告和审定财务报表 restore。 。 。 .
环境变量默认目的
SUPAFORGE_DBDIFF_TIMEOUT600在计划或数据 diff 放弃前秒
SUPAFORGE_DBDIFF_MEMORY1G内存限制 @dbdiff/cli (单位:千美元)2G, (中文(简体) ), -1 无)
SUPAFORGE_CONNECT_TIMEOUT15等待连接的秒数
SUPAFORGE_CHECK_CONCURRENCY4检查一次运行。 把它放在紧身泳池后面
SUPAFORGE_PROVE_ROWS1000每个表格的行 --prove 副本以检查它们的生存; 0 仅检查结构
SUPAFORGE_PG_BIN—— 说PostgreSQL 客户端工具目录(pg_dump, (中文(简体) ), psql),前面使用 PATH 用于服务器比工具更新 PATH

自办基地

设定 apiUrl 到网关 accessToken 到服务作用键。 全体 检查运行.

  • 边缘函数 . 自我托管的边缘没有管理端点 职能,如此确定 studioUrl (Studio的港口,不是网关的)或 functionsPath (挂载函数目录). 两者可以混在一起 跨越环境。 工作室的功能 API 是未经认证的,所以不要 公开曝光.
  • Auth 配置 . 自动托管时, 认证配置会从 Gotrue 的设置中读取 端点,它携带的密钥较少,无法被写入. 改变 而是部署的环境.

抖动克隆

本地克隆为平原PostgreSQL. 存储、 认证、 边缘函数、 断层, 实时和Supabase的角色没有什么可比较的,所以跳过那些 检查 :

{ "checks": { "exclude": ["storage", "auth", "edge-functions", "vault", "realtime", "roles"] } }

如果源头是克隆人 而目标不是, diff 警告说 --apply 将克隆人的形状, 包括缺失,推向目标.

CI 和退出代码

这个 GitHub 动作 运行 diff --ci 并在工作页上增加漂移摘要:

- uses: akalsoftware/supaforge-action@v1
  env:
    DEV_DATABASE_URL: ${{ secrets.DEV_DATABASE_URL }}
    PROD_DATABASE_URL: ${{ secrets.PROD_DATABASE_URL }}

任何地方,运行CLI:

npx @akal/supaforge diff --ci
代码含义
0做了什么要求,包括当没有做
1发现漂泊,拒绝行动, 或某事失败或被排除在外
2无法运行: 使用错误, 或是下 --ci 无法完成的支票

--ci 默认在关键漂移时失败 。 设定阈值为 --fail-on=warning 或者说 --fail-on=any。 。 。 .

MCP(大赦国际代理人)

SupaForge 作为 MCP 服务器运行, 因此您编辑器中的 AI 代理可以扫描 漂来修去 在写东西之前问你.

Add to Cursor Install in VS Code

  • 克劳德桌面: 下载您的平台的扩展名 (单位:千美元)supaforge-<version>-<platform>.mcpb从 最新发布 打开它 它需要您的项目目录 .

  • 克劳德代码: 安装插件, 添加 MCP 服务器和技能 安全应用修正:

    /plugin marketplace add akalsoftware/claude-plugins
    /plugin install supaforge@akalsoftware
    

    或只添加服务器 : claude mcp add supaforge -- npx -y @akal/supaforge mcp

  • 任何其他客户端数字 :

    { "mcpServers": { "supaforge": { "command": "npx", "args": ["-y", "@akal/supaforge", "mcp", "--project", "/path/to/project"] } } }
    

它列在 MCP 书记官处 作为 io.github.akalsoftware/supaforge。 。 。 .

服务器会曝光这些工具 :

工具它会做什么注释
list_environments配置中的环境,没有他们的资质只读
diff所有区别,与计划 sync 将会运行只读
get_check_result最后一次检查的结果 diff 或者说 sync只读
sync执行目标计划; prove: true 先在拷贝上排练破坏性
create_migration将漂移写入迁移文件 migrate create 已经写入文件
take_snapshot抓图环境到本地文件写入文件

diff 财务报告和审定财务报表 sync 同样的争论,所以计划 代理显示你 计划运行。 除非 allowDestructive 已经设定.

写着 supaforge.config.json 在给出的目录中 --project (或 一个开始,拒绝 configPath 客户端,除非开始 与 --allow-config-path。 。 。 .

钩子

import { HookBus, scan, createDefaultRegistry, loadConfig } from '@akal/supaforge'

const bus = new HookBus()
bus.on('supaforge.check.after', ({ check, result }) => {
  if (result.status === 'drifted') console.log(`Drift in ${check}`)
})
await scan(createDefaultRegistry(), { config: await loadConfig() }, bus)

发展

cd packages/cli
npm install
npm test                 # unit tests
npm run lint             # type-check
./bin/dev.js diff        # run from source
套间命令需求
一体化npm run test:integration达克或波德曼
数据库 e2enpm run test:e2e达克或波德曼
假设npx vitest run -c vitest.scenarios.config.ts达克或波德曼, pg_dump
Supabase e2e 软件npm run test:e2e:supabase基地CLI
释放候选人scripts/test-release-candidates.sh --dbdiff ../DBDiff --pg-conformance ../pg-conformance波德曼还是多克

发行- 候选人创建 DBDiff 二进制和 npm 软件包 从本地的退机方式中安装 SupaForge 以对抗他们 作为用户, 运行每一个套房 上面的安装。 测试 跨越三个项目,在其中任何一个项目之前 释放.

假想套房迁移 每一个案件在 @akal/pg-conformance 两者均包含 前进方向 它检查结果 与实体本身的状态甲骨文和 反对 --prove。 。 。 .

许可证

麻省理工学院

版本与发布记录

@akal/supaforge 共发布 12 个版本,首次发布于 2026/10/09;过去 12 个月发布了 12 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.0.41latest2026/11/063 天前
0.0.402026/11/054 天前
0.0.392026/10/2713 天前
0.0.382026/10/2218 天前
0.0.372026/10/2218 天前
0.0.362026/10/2218 天前

关于 @akal/supaforge 的常见问题

@akal/supaforge 是什么?

抖动并同步您的 Supabase 环境

如何安装 @akal/supaforge?

在项目目录运行 npm install @akal/supaforge,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 supaforge,可以用 npx supaforge 直接运行。

@akal/supaforge 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@akal/supaforge 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@akal/supaforge 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@akal/supaforge 可以商用吗?

@akal/supaforge 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@akal/supaforge 的下载量有多少?

根据 npm 官方下载统计,@akal/supaforge 在 2026/10/05 – 2026/11/03 这 30 天内被下载 1,767 次,日均约 59 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@akal/supaforge 还在维护吗?

最新版本 0.0.41 发布于 2026/11/06(3 天前);至今共发布 12 个版本,其中过去 12 个月发布了 12 个;首次发布于 2026/10/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。