Keel roadmap
M0 → M5 多版本发布节奏。每个版本都是可独立发布的——而不是”等所有都好了再上”。
M = Milestone. Mortar/Keel 用 M 编号区分 launch 成熟度;区别于 Fabric 的 V 编号(V = 项目类型 / project type)。
2026.05 第三次修订:appunvs project-type 重排后 WeChat 移到 V4 (Fabric project type),Keel 不再单独维护 WXML pipeline。Keel 自己的版本边界保持在 M0-M5。
2026.05 第二次修订:与 Expo / EAS 5 层对齐——Keel = SDK / CLI / Build / Update / Submit。“Cloud Build” 改 “Build”,“OTA” 改 “Update”。删 “Hosting” 一层(Expo Hosting 是 web 部署,Keel 不做 web target——见
architecture.md顶部说明)。Submit 从 M3 子项升格为正式第 5 层。2026.05 第一次修订:基于跟 Expo 全产品对比 gap analysis 重排(详见本文档第二部分”Expo gap”)。新增 Keel Go / Dev Client / 文件路由(App Router 风格)/ Open Governance。Mortar 解耦为 optional plugin(不再默认 bundle)。
M0 historical 内容合并到 M1 § Historical context;产品对外编号从 M1 起.
M1(公开 launch — ~3 个月)—— Keel 第一次”对外可用”
Historical context — 内部 dogfood 阶段(pre-M1,2025-2026.05)
Keel 作为 appunvs 内部技术栈跑通:
- ✅ Native SDK(
Keel.xcframework+keel-sdk.aar) - ✅ per-instance Hermes(per-
KeelView)—— 内部技术,不在 marketing 表面 - ✅ New Architecture(Fabric / TurboModules / Bridgeless)默认开启 —— 跟随 RN 0.85.2,不退回 Old Architecture
- ✅ 内部 Build pipeline(Docker + Metro + Hermes byte-compile)—— 给 appunvs 的 AI bundle 用
Pre-M1 不对外发布。Keel 还没正式品牌化,没 npm 包,没 CLI,没付费用户。
M1 — first public release
目标:让一个非 appunvs 用户能装 npm 包、CLI 跑起来、build / update 推一个 bundle 出去。
M1 代码完成度:~95%。剩下的全是 operational(业务运营)项 —— 阿里云 OSS / CDN 部署、App Store 上架、Discussions 频道创建、Project tracker 配置、Free + Pro 内测开放、repo public 化。
1. CLI + 工程基础
- CLI MVP(
@keel-ai/cli):12 命令落地(build / create / dev-client / doctor / install / login / logout / manifest / publish / rollback / start / submit),共 1494 行 TS 在keel/cli/src/commands/ -
keel doctor:检查 Node / Java / Xcode / iOS SDK / Android SDK 版本兼容性 ——cli/src/commands/doctor.ts(183 行) -
keel install:RN-aware npm install(版本兼容性自动校验)——cli/src/commands/install.ts(189 行) - 5 个 templates ——
keel/cli/templates/{blank,im,map,tabs,wechat-pay}/全部落地 -
create-keel-project/create-keel-module—— 照 Expo 模式独立 scaffolding 包(packages/create-keel-project/+packages/create-keel-module/)。用户走npm create keel-project <name>/npm create keel-module <name>;CLI@keel-ai/cli不掺和 scaffolding,专做 daily 开发(start / build / publish / submit / …)。templates 复制自cli/templates/+modules-core/templates/,发版时npm publish两个独立包 -
@keel-ai/keelumbrella 主库 ——sdk/,对位 Expo 的expo包;KeelSDK.isAvailable()+ 版本常量 + native 模块 handshake。consumer 用import { KeelSDK } from '@keel-ai/keel'
2. Build 对外
- 把内部 Docker pipeline 包装成公开 HTTP API + 鉴权 + 计费 hook ——
keel/cloud/cmd/build-server/main.gowireskeelauth.Middleware+ billing;handler.go (421 行) 实装 - CLI 支持 push tarball → 拉 ipa / apk ——
keel/cli/src/commands/build.ts(165 行) +keel/cli/src/api/cloudbuild.ts
3. Update 服务(自营,跟 Mortar 解耦)
- manifest endpoint(PG / SQLite 自管)
- Client SDK:TS / iOS Swift / Android Kotlin 三端,状态机 + bsdiff4 patch + sha256 校验
-
keel rollbackCLI 命令(keel update不单独存在——publish + rollout 覆盖) - 灰度 (10%/50%/100%) via rollout.go
- 一键回滚 via
keel rollbackCLI - S3-compatible BlobStore 实装 ——
keel/cloud/internal/update/s3_blob_store.go兼容阿里云 OSS / 腾讯云 COS / Cloudflare R2 / MinIO(同一份代码切 endpoint) - Production 部署:阿里云 OSS bucket + CDN 域名 + HTTPS 证书 + 监控 / 告警接 Sentry —— operational
4. 文件路由(App Router 风格)
-
@keel-ai/router:file-based routing,App Router 约定 ——keel/packages/router/落地 - 自动生成 TypeScript 路由类型 ——
keel/packages/router-metro-plugin/配套,build-time 遍历app/ - 底层基于 react-navigation(兼容现有 RN 生态),上层 wrap 成 file-based
选 App Router 而不是 Pages Router 的理由:Next.js 现在主推 App Router,社区心智已切;layouts / route groups / parallel routes 这些表达力对 mobile app 同样有价值(特别是 tab navigator + nested stack 的常见组合)。
5. 文档站
- 文档站 scaffold ——
keel/site/基于 Astro 4,5 pages(index / features / docs / pricing / signup) - 内容齐全:getting started (
tutorial.md) / 5 层架构 (architecture.md) / 5 China 模块 (modules.md) / Update (update.md) / Build (build.md) / Submit (submit.md) / CLI 参考 (../cli/README.md) / examples gallery (examples.md) / RFC 流程(CONTRIBUTING.md § RFC)——docs.astrohub 全部链接 - 中文为主,关键 API 双语 —— 当前 18 篇
docs/*.md均双语
6. Keel Go(tester app)
- iOS Keel Go app 代码 ——
keel/go/ios/(Podfile + project.yml + KeelGo target) - Android Keel Go app 代码 ——
keel/go/android/(Gradle setup) - 扫码 / 粘 URL 加载任意 Keel bundle ——
go/src/{HomeScreen,ScannerOverlay,PreviewScreen}.tsx共 412 行 - binary 链接 Keel Go 自己
package.json里声明的 Keel 模块;超出范围的需要 Dev Client - 上 Apple App Store + 国内 5 大 Android 市场 —— operational(开发者账号 + 审核流程,每家市场 2-6 周)
7. 5 个国内一等模块的 spec doc
-
modules.md— 微信 / 支付宝 / 高德 / 推送(极光 + 个推抽象)/ 友盟(已写)
8. 定价 v0
-
pricing.md:Free / Pro ¥48 / Team ¥298 / Enterprise(已写) - Free + Pro 内测开放 —— operational(业务运营,需打通支付通道 + 内测白名单)
9. Open Governance
- Apache 2.0 LICENSE 落地(
../LICENSE) - GitHub 仓库公开(保留 monorepo
appunvs/appunvs,加keellabel / 子目录文档)—— operational(GitHub UI 设置 repo visibility) - 公开 RFC 流程 ——
.github/DISCUSSION_TEMPLATE/keel-rfc.yml(Discussions 模板)+.github/ISSUE_TEMPLATE/{keel-bug,keel-feature,config}.{md,yml}+.github/PULL_REQUEST_TEMPLATE.md;Discussions 频道创建本身 = operational - 公开 roadmap ——
roadmap.md本文件;GitHub Project tracker 配置 = operational - CONTRIBUTING.md + Code of Conduct ——
../CONTRIBUTING.md+../CODE_OF_CONDUCT.md(Contributor Covenant 2.1,中文) -
governance.md(已写)
10. Mortar 解耦 — DONE
- 确认 Keel 不出
@keel-ai/mortarplugin——用户接 Mortar 走标准@mortar/clientSDK - 文档强调”Keel works with any backend; Mortar is recommended default but not required”
M2(~3 个月)—— Production hardening + 社区生态准备
M2 是 M1 上架后的”打磨期”——之前被 M1 范围排除的”够用但还能更好”的项,全部落这里。每项独立可发布。
M2 代码完成度:~85%。剩余主要在 Dev Client V1.5(卡 macOS 工具链)和首次 release 的 macOS 操作。
1. @keel-ai/router metro 插件(build-time 路由生成)
- metro plugin 在 bundle 时遍历
app/树 ——packages/router-metro-plugin/src/index.ts(286 行) - 输出虚拟模块
@keel-ai/router/__routes__.js+__routes__.d.ts - 类型化
router.push('/posts/:id')—— 编译期捕获 path mismatch
2. @keel-ai/modules-core CLI 扩展
-
keel-module install—— in-place 改 host app 的 Podfile / settings.gradle,fenced begin/end 注释包围注入块,重跑替换不重复 ——modules-core/src/cli.ts:188-289 -
keel-module test——npm test或jestfallback ——cli.ts:290-339 -
keel-module publish—— 验证 module.yml + 可选--bump=<patch|minor|major>(package.json + module.yml 同步推进版本)+npm whoami检查 +npm publish——cli.ts:344-
3. Keel Dev Client 服务端实装
- build-server
kind=dev_client配方接口 ——cloud/internal/cloudbuild/devclient.goV1 scaffold(DevClientInput/DevClientBuilder/DescribeDevClient) - 项目自定义 native modules 检测 + autolink 注入 ——
modules-core/src/autolink.ts落地,CLIkeel-module link+keel-module install输出 Podfile / Gradle 片段 - V1.5:DockerBuilder 实现
WrapDevClient,跑真 xcodebuild archive (iOS) + gradle assembleRelease (Android) + 签名 + TestFlight 上传辅助 —— 卡 macOS + Android SDK 工具链 access
4. OTA 监控 + Open API
- Open monitoring API ——
cloud/internal/update/monitoring.go,3 个无 auth endpoint:GET /v1/monitoring/health—— liveness + readiness JSON(subsystem 探测)GET /v1/monitoring/metrics—— Prometheus exposition format(uptime / request counters / bundle counts)GET /v1/monitoring/diagnostics—— 详细 JSON 快照(含 bundle staleness + TLS cert 到期)
- bundle 过期监控 ——
StatsProvider.BundlesOlderThan由 MemStore + SQLiteStore 实装;阈值KEEL_UPDATE_MONITOR_STALE(默认 30d);count 经/metrics+/diagnostics出口 - CDN 健康检查 ——
/v1/monitoring/health同时探测 manifest store + blob store;外部 cron 每分钟 poll 这个 endpoint 即可 - TLS cert 过期监控 ——
KEEL_UPDATE_MONITOR_CERTS=host1,host2,...配置后由/v1/monitoring/diagnostics报告每个 cert 的not_after+days_remaining+status(ok / expiring_soon / expired) - 可被任意监控系统接入(取代了之前的 “AI 监控员” 设计)—— Prometheus / Datadog / Grafana Agent / 自建 cron / 第三方 AI monitor 都能 poll 这 3 个 endpoint;Keel 自身不依赖任何特定监控产品
5. 3 个 reference community modules
-
keel-module-wechat(微信 SDK 包装)—— 93 TS + 61 Swift + Android Kotlin +module.yml -
keel-module-alipay(支付宝 SDK 包装)—— 67 TS + 57 Swift + Android Kotlin +module.yml -
keel-module-amap(高德地图 SDK 包装)—— 91 TS + 54 Swift + Android Kotlin +module.yml - bonus:
keel-module-umeng(友盟 SDK)—— 同样 4 件套完整结构
3 个 reference 模块同时验证了 @keel-ai/modules-core 的 autolink + install + publish 流程。
6. iOS Keel.xcframework 公开分发(SPM 默认 + CocoaPods 兼容)
-
keel/Package.swift—— SPM manifest 落地,本地开发模式binaryTarget(path:)直指 build 产物;release 模式的binaryTarget(url:checksum:)块在同文件内注释,首次发版时翻开 -
keel/packaging/build-ios.sh—— 追加 step 6 输出Keel.xcframework.zip+Keel.xcframework.zip.sha256,本地手工上传 GitHub Release -
keel/packaging/release.sh—— 一键收集 release 物料:跑 build-ios.sh + 打印 Package.swift / Keel.podspec / gh release / git tag / pod trunk push 全套 copy-pasteable 片段,全本地、零 CI、零文件改写 -
keel/Keel.podspec—— 兼容渠道 podspec 模板,binary:http指向 GitHub Release zip,:sha256占位待 release.sh 填入 -
keel/docs/enterprise-distribution.md—— 3 种私有渠道方案:私有 GitHub repo(推荐)/ 自托管 CDN / 私有 Swift Package Registry;附 CocoaPods 私有 spec repo 兼容做法 - Dogfood:仓库内一个 downstream host shell 的 iOS 工程从直接
framework:引用切到package: Keel(path-based SPM),验证消费方真实走 Apache 2.0 公版 manifest 路径 - 首次 release:在 macOS 跑
bash keel/packaging/release.sh 0.1.0→ 按打印出来的 5 步走完(GitHub Release 上传 / 改 Package.swift / 改 Keel.podspec /git tag/pod trunk push)
M3(中期,~6 个月)—— 商业化 + 社区生态成熟
M3 代码完成度:~85%。SDK / 服务端骨架全部落地;剩”V1 scaffold → 真实集成”的硬转化(push provider 实拨 / submit 上传 / 支付通道走签)需要客户驱动 + 真实凭据,以及若干运营动作(repo 拆分、商业付款打通、社区入口)。
1. Modules API(社区贡献模块框架)
-
@keel-ai/modules-core—— Expo Modules API 等价:autolink + 6 命令 CLI(create / validate / link / install / test / publish)+swift-kotlintemplate(M2 同步落地,详见 M2 #2) - 文档(
modules-core/README.md)+ template 示例 +keel-module create自动生成 iOS/Android stubs - 4 个 reference 模块作为社区模板:
keel-module-{wechat,alipay,amap,umeng}—— 详见 M2 #5
2. Keel Dev Client(项目自带 native 模块的 tester)
-
keel dev-clientCLI 命令(V1 scaffold)——cli/src/commands/dev-client.ts - 服务端
kind=dev_client配方接口 ——cloud/internal/cloudbuild/devclient.go的DevClientInput/DevClientBuilder/DescribeDevClient - 项目自定义 native modules 检测 + autolink 注入 ——
modules-core/src/autolink.ts+keel-module link/install - V1.5:DockerBuilder 实拨 xcodebuild archive (iOS) + gradle assembleRelease (Android) + 签名 + TestFlight 上传辅助 —— 卡 macOS + Android SDK access
3. 5 China 模块全实装
按 modules.md 顺序:
-
@keel-ai/push抽象层(设备 SDK 183 行 TS @packages/push/src/index.ts—— register / send / unregister,对应 push-server 的/v1/{project}/push/{register,send}) - 微信(支付 + 登录 + 分享 + 跳转小程序)——
keel-module-wechat(93 TS + 61 Swift + Android Kotlin)+ 服务端验签cloud/internal/billing/payment/wechatpay.go(376 行) - 支付宝(支付 + 登录)——
keel-module-alipay(67 TS + 57 Swift + Android Kotlin)+ 服务端cloud/internal/billing/payment/alipay.go(289 行) - 高德地图 ——
keel-module-amap(91 TS + 54 Swift + Android Kotlin) - 友盟(统计 + 推送)——
keel-module-umeng(README + module.yml + iOS + Android + src) - push-server JPush + Getui dispatcher 双 backend ——
cloud/cmd/push-server/main.go(298 行) provider interface 落地,V1 stub 接 stdout + return success,真实 HTTP 拨号待租户接入时实拨
4. Keel Push 服务端(自营,跟 Mortar 解耦)
- Keel 后端 push dispatcher ——
cloud/cmd/push-server/,/v1/{project}/push/sendHTTP 入口完整 - 多 provider 路由:极光 + 个推 provider interface 落地,按
device_id → provider映射 dispatch - push log + audit endpoint surface 已加,落地待 SQLite / OSS 接入决策
- 跟 Mortar 完全解耦:push-server 是独立 Go binary,不依赖任何 Mortar 接口(同 M2 #4 monitoring 一致)
5. KAS Submit(层 5 实装)
-
keel submit ios --to=appstore—— CLIcli/src/commands/submit.ts(162 行) -
keel submit android --to=<market>—— 同上 - 7 家市场 driver Go 实装:
appstore(378 行)、googleplay(413 行)、huawei(336 行)、xiaomi(233 行)、oppo(156 行)、vivo(162 行)、yyb(224 行)
- 路径全覆盖:CLI → build-server → submit driver;每家 driver 实拨该市场 API 的认证 / 上传 / 提审流程(OPPO / vivo 是 stub,其余 5 家有真实 API 调用)
6. OAuth 流程辅助
-
@keel-ai/auth-session(OAuth 2.0 PKCE flow helper)——packages/auth-session/src/index.ts(308 行) -
@keel-ai/apple-signin(Apple Sign-In 包装)——packages/apple-signin/117 TS + iOS native - bonus:
@keel-ai/google-signin(Google Sign-In 包装,roadmap 没列)—— 147 TS + iOS + Android native
7. Examples gallery
- 5 个示例项目 at
keel/apps/examples/0[1-5]-*/:01-todo-list—— App Router_layout.tsx+index.tsx,104 行 RN code02-chat-im/03-ecommerce/04-wechat-pay-flow/05-amap-nearby—— 同结构
- 用
@keel-ai/routerApp Router 约定演示 file-based routing - 运营:拆
appunvs/keel-examples独立 repo(roadmap 原始计划),目前合在keel/apps/examples/下作为 npm workspace
8. 教程 / Tutorial
-
tutorial.md926 行完整课程:从零起项目 → App Store + Google Play + Huawei AppGallery 上架 + OTA 推更新
9. 商业付款(代码 → 运营两段)
- 微信支付服务端验签 ——
cloud/internal/billing/payment/wechatpay.go(376 行) - 支付宝服务端验签 ——
cloud/internal/billing/payment/alipay.go(289 行) - 订阅 / 套餐模型 ——
plan.go(139 行) +subscription.go(207 行) +payment.go(144 行) 抽象层 - 运营:微信开放平台 + 支付宝商户号实际申请 + 通道走签
- 运营:对公开票流程(财务侧)
- 运营:Free → Pro 转化触发埋点(产品决策 + 埋点落地)
10. 社区入口(全部 operational,无代码)
- 飞书群 / 知乎专栏 / 公众号注册 + 运营
- GitHub Discussions 频道全开(依赖 M1 #9 repo 公开)
- 月度 RFC 议程节奏建立
M4(~12 个月)—— Tooling + 生态完整化
M4 的主线是工具链 + 生态完整化——M1-M3 把”能用 / 好用 / 商业化”打通后,M4 是把开发者日常用得到的周边工具一次补齐。企业 SLA 已挪到 M5(跟 appunvs / Mortar 共享的 enterprise pack 一起做,见下)。
M4 代码完成度:100%(6 个主项全部落地)。
- VS Code 扩展 ——
packages/vscode-keel/:extension.ts+cli-runner.ts+modules-provider.ts+routes-provider.ts+keel.json/module.ymlJSON schema;语法高亮 / 智能补全 / build status - Bundle Atlas ——
packages/bundle-atlas/src/index.ts301 行 + bin(bundle 内部可视化,对位 Expo Atlas) - Claude Code skill ——
packages/skill/:keel-skill.md175 行 + bin 安装脚本(教 Cursor / Claude Code 写 Keel-shaped code) - GitHub Actions templates ——
templates/github-actions/keel-{cert-healthcheck,ota-publish,pr-check,submit-stores}.yml四份 CI 模板 - Keel Snack — 浏览器 playground(含 RN Web fallback) ——
snack/Next.js + Monaco + phone-mock iframe;public/playground.html用 importmap 把react-native解析到 esm.sh 的react-native-web,浏览器内@babel/standalone转 TS+JSX,base64 source 走 URL hash 传给 iframe,0 服务端 round-trip。真机预览继续走 Keel Go;Full mobile simulator (云端 GPU emulator) 等 enterprise 客户驱动 - 多语言文档(i18n) ——
keel/site/默认 zh,/en/镜像所有 5 个页面:index/features/pricing/docs/signup。Astro 4 i18n config +Base.astro加 locale prop + 语言切换链接 +hreflangSEO 标签。10 页 build 通过
企业 SLA package 不在 M4——已挪到 M5 跟 appunvs / Mortar 共享 enterprise pack 一起做。
Keel Snack 的 RN Web fallback 已在 M1 直接实装(跳过了 fixture-stub 中间阶段)。Full mobile simulator (云端 GPU emulator + WebRTC stream) 等 enterprise 客户驱动。
M5(企业版)—— 跨产品共享 enterprise pack
⚠️ M5 不是 cross-product。AppUnvs / Mortar / Keel 共享的是 enterprise 策略(统一的 SLA / 等保 / 合规口径),不是同一份代码。Keel 自己的 enterprise feature 直接在 keel/ 内实装。
M5 代码完成度(keel/ 范围):~75%。SSO / RBAC / 审计 / Helm 全部 keel/cloud/ 内落地;剩 SLA / 培训 / ISO27001 / SOC2 是合同 / 流程 / 第三方审计(非代码)。
1. 单一 SSO 网关(keel 自身)
- OIDC config + handler scaffold ——
keel/cloud/internal/keelauth/oidc.go:OIDCConfig/OIDCHandler//auth/oidc/{login,callback}路由 + state token HMAC + 会话 JWT 签发 +VerifySession - StubOIDCProvider 让流程在无真实 IdP 时也能跑通;生产时换
github.com/coreos/go-oidc/v3实拨 - 支持 Okta / Azure AD / Auth0 / Keycloak 任意 OIDC provider —— 配置 issuer URL 即可
- 飞书 / 钉钉 OIDC:协议层完全兼容,配置中文 SAAS issuer 即可
2. 统一 RBAC(keel 自身)
- Role 常量定义 ——
keel/cloud/internal/keelauth/rbac.go:keel.module.publisher/keel.update.deployer/keel.build.viewer/keel.update.viewer/keel.admin/keel.org.admin -
Principal抽象统一 API key + OIDC 两条 auth 通路 -
PrincipalRolesinterface +StaticRoleStore内存实装(含 Group → Role 映射,对接 OIDC group claim) -
RequireRole(store, roles...)gin 中间件:401 / 403 区分;多 role OR 语义;RoleOrgAdmin任意通过
3. 私有部署(Helm chart)
-
keel/cloud/deploy/helm/keel/完整 chart:Chart.yaml+values.yaml(含 ingress / persistence / SSO toggles / 各 provider secrets)- 3 个 Deployment + Service template:
update-server/build-server/push-server - PersistentVolumeClaim for update-server SQLite + bundle blob
- Secret 模板(OIDC client / push provider creds / API keys 一站式注入)
- Ingress 模板(统一前端
/v1/*→ update //build/*→ build //push/*→ push //auth/*→ SSO) NOTES.txt部署后提示- liveness + readiness probe 指
/v1/monitoring/health
- 兼容多 k8s 后端:vanilla / k3s / 阿里云 ACK / 腾讯云 TKE / 华为云 CCE(无 cloud-specific 依赖)
4. 审计日志统一
- 结构化 audit event ——
keel/cloud/internal/keelauth/audit.go:AuditEvent固定 schema(timestamp / request_id / actor.{subject,source,project,groups} / action / resource / result.{status,error} / latency_ms) - 3 种 sink 落地:
StdoutAuditSink(默认)/FileAuditSink(jsonl appended)/SinkFunc(适配 Splunk HEC / 阿里云 SLS / Elastic) -
AuditMiddleware自动跟 OIDC + API key 两条 auth 路径联动;默认只审 mutating 请求(POST/PUT/DELETE/PATCH),加AuditReads选项为 GET 也审(等保 2.0 完整性需要) - X-Request-ID 自动注入 + 回显,可对接外部追踪
5. 私有 Sentry + 监控
- 已在 M2 #4 完成 —— Open monitoring API(
/v1/monitoring/{health,metrics,diagnostics})任意 Sentry / 私有监控系统都能 poll - Sentry 私有实例对接 = 客户自己起 Sentry on-prem + 配 SENTRY_DSN env var,零额外代码
6. SLA 合同 + 培训 + 国际化合规(合同 / 流程 / 第三方审计)
- 单一 SLA 合同(99.9% / 99.95% / 99.99% tier)—— 法务 + 商务
- 客户成功经理 (CSM) + 月度技术 review —— 运营 + 招聘
- 等保 2.0 三级 —— 公安部备案 + 第三方测评,需 3-6 个月 + 全套合规材料
- ISO 27001 —— Bureau Veritas / SGS / DNV 任意一家审计,9-12 个月
- SOC2 Type 2 —— 6-12 个月观察窗口,AICPA-affiliated 审计师
跟托管版 hosted SaaS 的关系:hosted SaaS 是给中小客户的现成多租户;M5 enterprise pack 是给大客户的”自己部署 + 自己 SSO + 自己 SLA”版本。同一份代码,不同部署 + 不同合同形态。
等保 2.0 三级是中国 ToB 真刚需 —— 跨过它才能卖给金融 / 政务 / 大型国企客户。SOC2 / ISO 27001 是给国际客户准备的,先做等保再说。
不这样做的话:一个 Fortune 500 客户得登 3 套后台、装 3 个 Helm chart、签 3 份 SLA 合同——价格 + 部署摩擦都拉满,单子掉一半。
1. 单一 SSO 网关
- SAML 2.0 / OIDC IdP 集成(Okta / Azure AD / 飞书 / 钉钉)
- 单一 session 跨
appunvs.editor/mortar.center/keel.update-server - 跨产品 SCIM 用户 provisioning(IdP 改一次,三产品同步)
2. 统一 RBAC
- Role schema 横跨三产品(
appunvs.editor.member/mortar.project.owner/keel.module.publisher/ …) - Permission policy 在 IdP 设置一次,三产品都应用
- 审计 trail 包含所有跨产品操作
3. 私有部署(一份 Helm chart)
- Helm chart 部署全套(update-server + build-server)
- 一份
docker-compose-enterprise.yml(小规模 ToB / PoC) - 镜像走客户自己的 registry,无外网依赖
- 等保 2.0 三级认证(中国信息安全等级保护 —— 金融 / 医疗 / 政务 / 国企采购强制要求)
4. 审计日志统一
- 三产品 emit 到同一个 audit-log schema
- 单一 query 视图(“过去 30 天 user X 在所有产品里干了什么”)
- 接 SIEM(Splunk / 阿里云 SLS / Elastic)
5. 私有 Sentry + 监控
- 私有 Sentry 实例 per 客户(数据不混跑)
- 接 AI 监控员(见
mortar/docs/monitoring-ai-employee.md) - 月度 incident 报告自动化生成
6. SLA 合同
- 单一 SLA 合同覆盖三产品(uptime / response time / RPO / RTO)
- 99.9% uptime 默认;99.95% / 99.99% 加价 tier
- 月度 credit-back 机制(违约自动退款)
- 24h P1 响应工单 / 4h P0(Pro 档 best-effort,企业档真合同)
7. 培训 + 专属支持
- 客户成功经理 (CSM)
- 月度技术 review
- 24/7 关键 incident 支持
国际化合规(M5+,跟海外市场启动同步):
- ISO 27001 国际信息安全管理体系认证
- SOC2 Type 2 美国企业市场 procurement 越来越多强制要求
跟托管版 hosted SaaS 的关系:hosted SaaS 是给中小客户的现成多租户;M5 enterprise pack 是给大客户的”自己部署 + 自己 SSO + 自己 SLA”版本。同一份代码,不同部署 + 不同合同形态。
等保 2.0 三级是中国 ToB 真刚需 —— 跨过它才能卖给金融 / 政务 / 大型国企客户。SOC2 / ISO 27001 是给国际客户准备的,先做等保再说。
远期(post-M5)
- Visual editor 探索(跟 Fabric形态共享一些 UI 组件)
- WebAssembly target / Skia 渲染 探索
Keel M6 原先规划的 WeChat Mini Program project type 已移出 Keel 范围 —— WeChat MP 的 WXML pipeline 跟 RN 完全不同,由消费方自行维护。
Expo gap 详细对照(2026.05 评估)
跟 Expo 全产品对比,硬性差距 / 战术差距 / 战略不竞争 / 长尾分布:
硬性差距(M1 / M3 必补)
| 差距 | Expo | Keel M1/M3 安排 |
|---|---|---|
| File-based routing(App Router 风格) | expo-router | M1 @keel-ai/router |
| Modules API(社区模块) | expo-modules-core | M3 @keel-ai/modules-core |
prebuild(config plugin → native) | expo prebuild | M3 跟 Modules API 一起 |
| CLI 实装 | npx expo | M1 @keel-ai/cli |
| Dev Client | expo-dev-client | M3 keel build dev-client |
| Tester app(free, scan QR / paste URL) | Expo Go | M1 Keel Go(自建 + 上国内 5 大市场) |
| 文档站 | docs.expo.dev | M1 AppUnvs-built docs site |
| Submit 流水线 | eas submit | M3(含国内 5 大 Android 市场) |
战术差距(M3-M4 内补)
| 差距 | Expo | Keel 安排 |
|---|---|---|
| Push 服务端(包 native push API) | Expo Push Service | M3 @keel-ai/push(极光 + 个推) |
| Web target / RNW | expo-router universal | ❌ Keel 不做 web target——见 architecture.md 顶部 |
| Web 部署托管 | eas hosting | ❌ 不做——见 architecture.md 顶部 |
| OAuth helpers | expo-auth-session 等 | M3 @keel-ai/auth-session |
| Templates / starters | create-expo-app -t ... | M1(5 个) |
| Tutorial | docs.expo.dev/tutorial | M3 |
| Examples gallery | github.com/expo/examples | M3 |
expo-doctor | npx expo-doctor | M1 keel doctor |
| Bundle 分析 | Expo Atlas | M4 |
| VS Code 插件 | expo-tools | M4 |
| Snack | snack.expo.dev | M4 |
| GitHub Actions templates | EAS workflow | M4 |
战略不竞争(intentional 差异)
| 维度 | Expo 做了 | Keel 不做的理由 |
|---|---|---|
| 50 个 first-party 模块的广度 | 摄像 / 音频 / 通知 / 定位 / etc. | Keel 聚焦中国 5 个一等模块;通用类走 npm community |
| 海外 CDN(Cloudflare) | 全球 OTA | Keel 走阿里云 CDN,不出海 |
| 海外推送(FCM / APNs)一等公民 | Expo Push 包 FCM + APNs | Keel 走极光 / 个推 + 厂商通道,FCM 国内不通 |
| USD 计费 + Stripe | EAS 美元 | Keel ¥ + 微信支付 / 支付宝 |
| RN 核心贡献 | Expo 团队是 RN 维护者 | Keel 跟随 RN 主线,专注 China 集成 |
长尾(M5+ 再说)
- 全球 multi-region 架构
- App Store Connect API 全套自动化
- 企业级 audit log
- WebAssembly target
风险跟踪
| 风险 | M_ | 缓解 |
|---|---|---|
| 5 个国内模块实装周期长 | M3 | M3 不强求全部出来,按市场优先级(极光 + 微信支付优先) |
| Build 在阿里云成本失控 | M3 | Pro 档限 builds/月,超出按量 |
| OTA 在国内 ICP 备案 / 内容审核 | M1 | CDN 备案 + 内容签名走 Keel 自营合规通道 |
| Tester app(Keel Go)上架 5 大国内 Android 市场审核周期 | M1 | 提前 2 个月送审;先上华为 / 小米保底,OPPO / vivo / 应用宝 M2 |
| Dev Client 跨平台 sideload 用户体验差 | M3 | 提供 TestFlight 分发文档 + Android 国内市场 enterprise 分发指南 |
| 文件路由对中国 RN 开发者陌生(多数从 react-navigation 入门) | M1 | 文档双轨:File-based 推荐 + react-navigation imperative 兼容路径都讲清楚 |
| Submit 国内 5 大 Android 市场每家审核机制不同 | M3 | M3 先打通华为 + 小米 + OPPO 三家;vivo / 应用宝 M3.5 |
| Mortar 解耦后 appunvs 内部 dogfood 路径变长 | M1 | appunvs 自己用标准 @mortar/client SDK(跟外部用户一样),不走特殊路径 |
| Open Governance 后社区被 hijack 风险 | M1 | Tier 3 决策权保留给核心团队(governance.md) |
跟 appunvs / Mortar roadmap 协同
- M1 期间:appunvs 把 Keel SDK 的版本依赖明确(不再藏在
keel/内部用法);CI 跨产品验证;appunvs 升级到使用标准@mortar/clientSDK(跟外部用户一样) - M3 期间:Mortar 加 payment primitive,Keel
@keel-ai/wechat复用 Mortar 那一层做服务端验签;同时 Keel 不强制用户接 Mortar payment,自行接也支持 - M4 期间:appunvs 发布的 project 通过 Keel CLI 进 OTA 流水线(不只是 Preview tab 内部预览)