TanStack Ship vs Open SaaS:付费 Premium 与开源的选择

从许可证、Wasp 与 TanStack 架构、运维深度、支持和所有权等维度,对比 TanStack Ship 与 Open SaaS 的适用场景。

Huifer
Huifer
July 20, 202610 min read
其他语言:Deutsch · English

本文由 Huifer 撰写,TanStack Ship 的独立开发者与维护者。由于我维护的是付费 starter,对这场比较显然存在商业偏见。Open SaaS 确实是真正的开源,可以在上手前审查代码,是学习、Hobby 项目和预算受限产品的有力选择。我没有在生产环境长期运行过 Open SaaS 应用;本文结论来源于其公开仓库、官方文档,以及我在交付 12+ TanStack 应用过程中积累的运维经验。

已验证来源:TanStack Ship GitHub · Open SaaS 仓库 · Open SaaS 文档 · TanStack Start 文档 更新日期:2026-07-20 · 更新日志

TL;DR: 当零许可证成本、公开源码、贡献上游或学习 Wasp 是首要考量时,Open SaaS 是更好的默认选项。当商业运营者希望在 Cloudflare 上运行 TanStack Start,并重视内置的归因、营销活动、推荐奖励、邮件和收入管理等能力时,TanStack Ship 更适合。免费与付费不是质量排名——它是在社区拥有的访问权限与一套不同运维范围的商业维护包之间的选择。

从商业模式出发,而非功能表

Open SaaS 和 TanStack Ship 都致力于消除重复的 SaaS 搭建工作,但它们给出的承诺不同。Open SaaS 提供的是一个基于 Wasp 构建的公开开源应用——可以审查代码、追溯历史、做 fork,且无需购买许可证即可开始。TanStack Ship 则围绕 TanStack 和 Cloudflare 生产平台出售打包源码和更新服务。

这使得第一个决策异常清晰。如果付费 starter 完全不可接受,在架构讨论开始之前 Open SaaS 就已胜出。如果项目本身需要源码再分发和向上游贡献,开源许可证有着商业许可证无法替代的结构性价值。

如果产品有预算,决策就应从标价转向缺失的工作。免费仓库可能是成本最低的选项,也可能是一连串定制运维的开始。付费 starter 可以节省时间,也可能包含团队根本用不上的模块。我用 功能目录 来明确范围,然后对每一条必备功能在实际运行代码中逐一验证。

诚实的一屏对比

决策维度Open SaaSTanStack Ship
访问模式公开开源仓库商业包加免费起步路径
框架模式Wasp 全栈框架TanStack Start 和 TanStack Router
默认基础设施重点Wasp 支持的部署路径Cloudflare Workers、D1、R2、KV、Queues
最佳初始匹配学习、开源、预算受限、Wasp 用户商业订阅运营,基于 TanStack
主要深度可理解的 SaaS 基线与社区演进内置增长、收入和管理模块
支持模式文档和社区渠道维护者背书的产品支持

此表有意省略了价格和计数等易变信息。做出购买或授权决策时,请到各产品官网核实最新条款。

许可证自由度本身是产品能力

Open SaaS 的公开许可证和仓库让团队可以在没有销售环节的情况下评估实现细节。这改善了尽职调查:安全审计人员可以检查依赖选择,创始人可以估算迁移工作量,学生可以从完整应用中学习。公开的 issue 历史也能揭示项目如何演进。

开源不意味着零维护。你的团队仍然拥有依赖升级、部署、数据保护、供应商账号和应急响应等责任。社区支持可以非常优秀,但它不等于专属实施帮助。区别在于问责机制,而非贡献者质量。

TanStack Ship 以商业条款提供源码,供构建产品和客户项目使用,但并不意味着可以将 starter 本身作为竞争模板进行不受限制地再分发。如果需要不受限制的再分发或公开的衍生作品,请选择 Open SaaS。TanStack Ship 的 定价页 是其当前套餐和条款的权威来源。

在争论许可证之前先审查代码

在按照各项目的官方安装指南操作之后,我盘点代码和依赖边界,而不是依赖标签。下面的命令有意简单,在本地 checkout 后即可运行:

bash
for repo in ./open-saas ./tanstack-ship; do
  echo "=== $repo ==="
  find "$repo" -maxdepth 3 -type f \
    \( -name 'LICENSE*' -o -name 'package.json' -o -name 'wrangler.jsonc' \) \
    -print
  (cd "$repo" && npm ls --depth=0) || true
  rg -n "stripe|auth|organization|utm|referral|queue" "$repo" \
    --glob '!node_modules/**' --stats
 done

这不会给质量打分。它只是暴露关注点所在、直接依赖是什么,以及部署配置是否可见。阅读实际的许可证文件;"完整源码"这样的营销话术不能替代法律条款。

Wasp 和 TanStack Start 优化的抽象层次不同

Wasp 提供更高层次的全栈模型,协调客户端、服务器、数据和常见应用能力。当框架约定与产品契合时,这可以让完整应用更容易理解。对于希望框架连接更多技术栈的开发者来说,这一抽象是 Open SaaS 真正的优势所在。

TanStack Ship 始终在 React 和 TanStack 生态内,使用类型化路由、loaders、Server Functions 和 Cloudflare 绑定。由于平台运维模块依赖这些基础设施选择,它暴露了更多基础设施选项。已经熟悉 TanStack Router 的开发者可能更喜欢这种显性;喜欢 Wasp 应用模型的开发者可能认为这是不必要的管道。

这两种方法在所有有意义的情境下都不存在哪个"更标准"一说。Wasp 引入了框架特有的概念。TanStack Start 引入了自己的路由和服务端约定,以及 Cloudflare 平台概念。请将学习曲线与团队情况和预期维护周期进行权衡。

测试逃生舱

每个 starter 最终都会遇到其愉快路径未曾预料到的需求。原型化其中一个:供应商特有的 webhook、异步导出、租户作用域存储,或定时对账任务。问问它需要多少框架特有代码、如何测试,以及是否能在预期部署环境中运行。

对于 Open SaaS,验证 Wasp 的扩展点和部署选项是否覆盖该需求。对于 TanStack Ship,验证所需的 npm 包是否 Workers 兼容,以及 D1 的数据模型是否适合该工作负载。胜出的是你团队能够操作的逃生舱方案,而非第一天文件更少的那个。

内置 SaaS 基线与运维深度

Open SaaS 提供的是一个公开的 SaaS 起步点,而非一个空框架教程。这是实质性价值。认证、支付、应用结构和示例可以消除第一轮接线工作,同时保持可审查性。社区可以持续改进这个基线,让所有人受益。

TanStack Ship 的差异化体现在基线之后。其模块连接了获客和运营:UTM 捕获、归因、营销活动优惠、推荐积分、邮件营销、短链接、内容、文件、计费和收入报表。一位将运行付费渠道或周期性促销的创始人,可能比无限制 starter 再分发更看重这些连接。

不要因为本文沉默就推断 Open SaaS 有某项限制。请查阅其当前文档和仓库,确认你需要的功能是否都有。同样,不要假设某个 TanStack Ship 命名模块完美匹配你的政策。替代品目录 之所以存在,正是因为具有不同假设的产品不应被强行塞入二选一的竞赛。

用证据估算缺失工作的成本

我从搭建、缺失功能、删除、学习、升级和支持等维度估算总采用成本。许可证价格只是其中一项。写一个简单的脚本可以让假设变得可审查:

typescript
type Cost = {
  setupHours: number
  missingFeatureHours: number
  deletionHours: number
  learningHours: number
  annualUpgradeHours: number
  hourlyRate: number
  licenseCost: number
}

function firstYearCost(input: Cost) {
  const hours = input.setupHours + input.missingFeatureHours +
    input.deletionHours + input.learningHours + input.annualUpgradeHours
  return input.licenseCost + hours * input.hourlyRate
}

console.log(firstYearCost({
  setupHours: 0, missingFeatureHours: 0, deletionHours: 0,
  learningHours: 0, annualUpgradeHours: 0,
  hourlyRate: 0, licenseCost: 0,
}))

原型完成后用真实数据替换零值。用区间而非精确数字来表达估计值。对于 Open SaaS,许可证行可能为零,但学习和定制不是。对于 TanStack Ship,许可证行可能非零,但内置运维模块可以减少实施时间。如果两个产品都不拥有你的核心需求,两者的缺失功能估计值都应该设高。

统计你需要删除的内容

Starter 比较通常计算新增功能而忽略删除工作。一个包含不需要的供应商、数据模型或管理概念的应用,会产生删除和回归测试的工作。在认定更大的功能集必然更有价值之前,请先审查迁移、环境变量、定时任务和生成的代码。

我也会给支持和升级分配一个不确定性区间。公开社区可能回复很快,而付费支持也可能仍然缺乏领域上下文。提交一个真实问题、检查发布说明、审查未解决的 issue。证据优于对任一模式的假设。

Open SaaS 是正确选择的情形

在以下情况下选择 Open SaaS:预算真的是零;希望通过完整应用学习 Wasp;项目本身必须保持开源;采纳前必须可公开审查;团队希望向上游贡献;或者内置基线已经覆盖了业务需求。

对于周末实验来说这也是理性选择——核心问题是"有人会用这个吗?"在验证需求之前购买更深的运维能力可能造成浪费。Open SaaS 让创始人保留现金,从真实代码中学习。

商业公司也可以选择它。开源不限于业余爱好。决定性问题是公司是否愿意承担缺口和维护模式。

TanStack Ship 是正确选择的情形

在以下情况下选择 TanStack Ship:TanStack Start 和 Cloudflare 是深思熟虑后的平台选择;团队正在构建预计运行数月或数年的订阅业务;获客归因和收入运营是当务之急;内置管理流程可以替代计划中的定制工作;或者维护者背书的商业打包有实际价值。

TanStack Ship 不会因为产品将要收费就自动成为正确选择。如果 Open SaaS 契合架构和基线,就用它。付费包只有在额外深度节省的工作价值超过其成本时才物有所值。

正在比较其他商业选项的读者可以使用比较中心和相关的博客指南,而不是将本文当作通用排名。

双方的风险与局限

Open SaaS 要求接受 Wasp 作为一个有意义的依赖,并学习其概念。请根据当前文档确认托管、数据库、后台任务和供应商约束。社区维护是可见的,但你的生产服务仍由自己负责。

TanStack Ship 生态较小,有商业再分发限制,Cloudflare 架构更具 opinionated。它不包含每一个 AI 生成器、支付供应商、企业租户模型或广告集成。对于简单应用来说,内置模块可能过于冗余。

我的评估也有局限。我可以深入谈论 TanStack 和 Cloudflare 系统的运维,但不敢声称有等量的 Open SaaS 运维经验。正因如此,这篇比较优先依赖可验证的项目产物和可复现的评估方法,而非捏造的性能数据。

决策树与最终建议

满足以下任一硬性要求选择 Open SaaS:必须是公开 OSS、无限制许可证权利(依当前许可证)、零 starter 预算、Wasp 对齐,或希望向社区贡献。满足以下硬性要求选择 TanStack Ship:TanStack Start、Cloudflare 原生运维、从归因到收入的完整工作流,以及商业打包的支持。满足以下任一情形两者都不选:高级企业租户、非 React 客户端、本地部署,或超出两个产品核心范围的业务模型。

Clone Open SaaS,审查其公开历史,构建风险最高的垂直切片。用同样的验收测试评估 TanStack Ship 的免费路径。把搭建时间、缺失工作、删除工作、框架问题,以及你每周都要重复的运维任务记录下来。

Open SaaS 免费是真实优势,不是需要重新定义的弱点。TanStack Ship 付费不是质量证明——只有在生产模块和维护模式创造的价值超过其成本时才有理由存在。

如果你的结论指向商业 TanStack 和 Cloudflare 平台,先从 TanStack Ship 的免费 starter 开始,审查 功能,只有在最关键的工作流通过验收后才转向 定价。