TanStack Ship vs Supastarter: Next.js + Nuxt vs Cloudflare 上的 TanStack Start

TanStack Ship 与 Supastarter 的真实对比:TanStack Ship 是 Cloudflare Workers 上的 React 专属方案;Supastarter 同时覆盖 Next.js 和 Nuxt,并集成 Stripe + Creem。两者的优势与短板,以及如何做出选择。

Huifer
Huifer
July 21, 202612 min read
其他语言:Deutsch · English

本文由 Huifer 撰写,独立开发者,TanStack Ship 维护者。 我曾在 Next.js 和 TanStack Start 上都交付过生产级 SaaS,也曾在两个客户项目中仔细研究过 Supastarter 的代码库,最终选择 TanStack Start。本文的对比,正是我当时做决定时最希望看到的那篇。 我对 TanStack Ship 有偏向(毕竟是我做的),所以先说出 Supastarter 的真实优势——Vue 支持确实是选择它的正当理由。

已核实来源:Supastarter 官网 · TanStack Ship GitHub 最后更新:2026-07-21 · 更新日志


TL;DR: TanStack Ship 是 Cloudflare Workers 上的 React 专属方案,提供 14 个经过生产验证的模块和 TanStack 原生的 AI 工具链。Supastarter 同时支持 React(Next.js)和 Vue(Nuxt),集成 Stripe 和 Creem,运行在 Vercel、Netlify 或自托管 Node 上。如果需要 Vue 或希望在 Stripe 之外同时使用 Creem,Supastarter 是正确选择。如果团队只用 React 并部署在 Cloudflare Workers 上,TanStack Ship 是更聚焦的答案。


TanStack Ship 是什么(一段话版)

TanStack Ship 是一个由我独立维护的 TanStack Start SaaS 启动模板。它包含 14 个模块——认证(Better Auth)、账单(Stripe + D1)、邮件、UTM归因、推荐、积分、管理后台、博客、定价、i18n(Paraglide)、AI 集成、分析、监控,以及一个 CLI 脚手架——全部架设在 Cloudflare Workers 上。整个系统运行在边缘,在我们现有负载下月成本约 $14,形态源自我在 12+ 个生产客户项目中反复遇到的那些模式。

Supastarter 是什么(一段话版)

Supastarter 是一个多框架 SaaS 启动模板,同时提供 Next.js 版和 Nuxt 版。它涵盖认证、账单(Stripe + Creem)、国际化以及营销站点,并附带一套精致的 UI 组件库。部署目标为 Vercel、Netlify 或自托管 Node。该团队以付费产品形式持续发布并定期更新;Vue(Nuxt)版是我听到赞誉最多的版本。

对比速览

维度TanStack ShipSupastarter
语言支持仅 ReactReact + Vue
Meta 框架TanStack StartNext.js 或 Nuxt
默认托管Cloudflare WorkersVercel / Netlify / Node
支付StripeStripe + Creem
数据库D1(边缘 SQLite)Postgres(Neon / Supabase)
AI 工具链TanStack Intent Agent Skills + Claude Code / Cursor / Windsurf / Copilot 配置面向 Claude / Cursor 的代码库
定价模式免费 Starter + 付费 Pro 版每个版本单独付费
i18nParaglide.js(3 种语言:en/zh/de)多语言支持
模块数量14 个生产模块约 8 个模块
维护节奏每周发布(1 人开发)每周发布(小团队)

技术栈:React 专属 vs Next.js + Nuxt

这是两者最核心的差异,也是选择其中之一最站得住脚的理由。

**Supastarter 的优势:**同一套设计语言同时覆盖 React(Next.js)和 Vue(Nuxt)。如果团队里有 Vue 开发者——或者招聘市场 Vue 权重更高——Supastarter 是显而易见的选择。Nuxt 3 以来 Vue 的开发体验有了实质性提升,Supastarter 团队显然在 Vue 版本上投入了真实的工程力量。我见过的两个客户项目中,Vue 版本都是最终决策的决定性因素。

**TanStack Ship 的定位:**TanStack Ship 专属于 React,这是刻意的范围选择,不是功能缺失。原因在于:我是独立维护,没有精力同时维护两套代码库,专注 TanStack 生态让我能把 Drizzle 模式、TanStack Query 约定、TanStack Router 文件路由等集成做得更深。如果团队只用 React——或者你是独立开发者——这种专注会直接体现在 React 相关模式的质量上。

诚实的取舍:一旦有 Vue 开发者加入你的团队,TanStack Ship 就不是适合他们的代码库。Supastarter 能轻松容纳这类招聘需求。

package.json 里的实际体现

两个代码库在依赖层面已经清晰展示了自己的语言覆盖策略。下面的结构是简化示意——真实 boilerplate 有更多依赖,但关键行都在这里。

jsonc
// TanStack Ship — React 专属,TanStack 原生
{
  "dependencies": {
    "@tanstack/react-start": "^1.0.0",
    "@tanstack/react-router": "^1.50.0",
    "@tanstack/react-query": "^5.50.0",
    "react": "^18.3.0",
    "react-dom": "^18.3.0"
  }
}
jsonc
// Supastarter — Next.js 或 Nuxt,两个版本分别交付
{
  "comments": {
    "next": "Install the Next.js version",
    "nuxt": "Install the Nuxt version"
  },
  "nextDependencies": {
    "next": "^14.2.0",
    "react": "^18.3.0"
  },
  "nuxtDependencies": {
    "nuxt": "^3.13.0",
    "vue": "^3.5.0"
  }
}

结构差异很直接:TanStack Ship 的 package.json 默认 React 为运行时;Supastarter 交付两套并行代码库让你选择。这是有实际运营影响的差异,不只是风格偏好——Supastarter 的更新日志必须同时涉及两个代码库,TanStack Ship 的更新日志只需关注一个。

支付:Stripe 专属 vs Stripe + Creem

这是 Supastarter 对特定用户群体的可辩护优势:任何在 Creem(一家隐私优先、总部位于欧盟的支付提供商)比 Stripe 更易用的市场——或者同时持有两个选项能降低 Stripe checkout 摩擦的场景。Creem 是一款为真实用户群体服务的好产品,Supastarter 的双集成是针对该群体的深思熟虑的方案。

TanStack Ship 的账单模块只集成 Stripe,模式(Invoice + Subscription + Webhook)与 Next.js 用户期望的一致,并附带我在生产项目中已上线的可选 UTM 归因和推荐积分轨道。如果你只需要 Stripe,TanStack Ship 的账单默认配置更深入——Queue 写入路径和积分账本默认接入,故障复盘系列文章记录了催生这些默认值的原因。如果你需要 Creem,TanStack Ship 没有。

Server Function vs Server Action——形态相同,叫法不同

两个代码库都支持"从路由处理器调用的、仅服务端运行且类型安全的函数"。TanStack Ship 称之为 Server Function;Next.js 称之为 Server Action。两者形态几乎相同:

typescript
// TanStack Ship — Server Function (TanStack Start)
import { createServerFn } from "@tanstack/start";
import { z } from "zod";

export const recordUsage = createServerFn({ method: "POST" })
  .validator(z.object({ customerId: z.string(), value: z.number() }))
  .handler(async ({ data }) => {
    await usageEventQueue.send({
      customerId: data.customerId,
      value: data.value,
    });
    return { ok: true };
  });
typescript
// Supastarter (Next.js) — Server Action
"use server";

import { z } from "zod";

const Body = z.object({ customerId: z.string(), value: z.number() });

export async function recordUsage(formData: FormData) {
  const parsed = Body.parse({
    customerId: formData.get("customerId"),
    value: Number(formData.get("value")),
  });
  await db.usage.insert(parsed);
  return { ok: true };
}

TanStack Ship 版本默认与 Queue 生产者模式组合使用;Supastarter 版本直接写入 Drizzle/Prisma。两者都合理。D1 写锁故障复盘 成为默认模式后,TanStack Ship 的形态就是这样自然演进的。

边缘部署:Cloudflare Workers vs 多平台

TanStack Ship 的唯一目标是 Cloudflare Workers。整个代码库围绕它构建:D1 做数据库、R2 做对象存储、Queues 处理异步任务、Workflows 做批量写入、Durable Objects 处理实时状态。没有 Vercel 适配器,没有 Netlify 适配器,没有 Node 主机垫片。这种专注使得 boilerplate 能够交付深度集成的 Workers 原生模块,而不是平台无关的抽象层。

Supastarter 面向 Vercel、Netlify 和自托管 Node。这种覆盖对已有部署平台或因企业 IT 限制无法使用 Cloudflare 的团队来说,是真实优势。多平台支持是真实的工程工作,Supastarter 团队为此付出了真实维护成本。

规模成本

一个有用的方向性对比:我运行的 TanStack Ship 生产负载(3200 客户、峰值约 250 req/s、每月约 700 GB 出口流量),Cloudflare Workers + D1 + R2 的账单约 $14/月。同等负载下 Vercel + Neon + Vercel Blob 的典型账单在 $120-$240/月,取决于你选的 Vercel 套餐和缓存策略激进程度。Supastarter 不会降低平台成本——它只是给你相同 Vercel 堆栈加上 starter 级默认配置。TanStack Ship 降低成本是因为 Workers + D1 + R2 在这种工作负载形态上结构性地比 Vercel 等效方案更便宜。

AI 工具链兼容性

两个代码库都对 AI 编码助手友好。区别在于"友好"的形态。

TanStack Ship 为每个模块附带 TanStack Intent Agent Skills——markdown 提示词、工具定义和示例工作流,在包安装时能被 Claude Code、Cursor、Windsurf 和 Codex 自动发现。TanStack Intent 解读 详细介绍了发现和消费机制。从第一天起,AI 就能看到每个模块的结构化、版本化的上下文。不需要手动维护 CLAUDE.md。

Supastarter 提供 CLAUDE.md 和 cursor/rules 文件夹,默认配置合理。代码库足够干净,AI 代理在其中运行良好。代理的上下文来自你的仓库(代码、README、你维护的 CLAUDE.md),而非版本化的清单。

诚实边界

我没有在大型代码库上对这两种 AI 工具链形态做过对照 A/B 基准测试。我的实操经验是,与没有 Skills 的同等 Next.js 代码库相比,TanStack Ship 的 Agent Skills 产生的幻觉导入和"截至上次更新"的备注更少——但这是个人工作流观察,不是已发表研究。请将此作为方向性参考。

定价模式

两个代码库都是付费产品。TanStack Ship 提供免费 Starter,包含认证、账单和博客模块供评估;Pro 版解锁 UTM、推荐积分和 AI 集成模块。Supastarter 按版本销售(Next.js 和 Nuxt 单独定价)。两者在第一个商业项目上都能收回独立开发的时间成本;都不是你 SaaS 技术栈里最便宜的选项。

一个公平披露:我的动机是把 TanStack Ship 定位为 React 专属团队的最佳答案。诚实版本是:如果 Vue 在你的路线图上,Supastarter 在这个问题上绝对胜出。

决策树

满足以下任一条件,选择 Supastarter:

  • 团队有 Vue 开发者,或预期会招聘 Vue 开发者。
  • 希望在 Stripe 之外同时使用 Creem,且不想自己集成。
  • 部署目标是 Vercel、Netlify 或自托管 Node,而非 Cloudflare Workers。
  • 希望 SaaS 启动模板同时提供 Next.js 和 Nuxt 版本,并打算同时维护两套代码库。

满足以下任一条件,选择 TanStack Ship:

  • 团队只用 React,希望 boilerplate 针对 TanStack 生态深度绑定。
  • 平台选择 Cloudflare Workers + D1 + R2 + Queues + Workflows,且看重该平台对应的成本结构。
  • 希望 TanStack Intent Agent Skills 随包交付,而不是手动维护 CLAUDE.md。
  • 希望账单、邮件和 UTM 模块的默认值来自故障复盘系列——正是这些修复产生了 Queue 写入路径、积分账本和幂等的 Stripe webhook 处理。

决策树有意不设中间分支。如果两边都不符合,你的项目暂时还不适合任一 boilerplate——你付出的是解锁一个它本来就不打算解决的问题。


体验 TanStack Ship 免费 Starter: TanStack Ship 仓库 提供免费 Starter,包含认证、账单(Stripe + D1)和博客模块,已接入 Cloudflare Workers + D1 部署。Pro 版额外包含 UTM 归因、推荐积分、AI 集成模块,以及来自故障复盘系列默认配置的邮件和监控模块。完整定价见 TanStack Ship 定价。

如果想更广泛地比较 boilerplate,vs-shipfast 对比了 Next.js + Vercel 领域的既有方案,vs-makerkit 对比了 B2B 多租户细分,vs-next-forge 对比了 Next.js 高端层级。每篇对比都遵循相同模式:先说竞品优势,再说自身定位。完整的方案索引包含全部对比文章。