# AfterPack 套餐与层级

Free 运行完整流程：复杂度没有上限，每个预设都可用。各层级之间的区别在于你能多精准地施加保护，以及每月能获得多少 MB 的 Pro 构建。

Source: https://www.afterpack.dev/zh/docs/tiers

**Free 运行完整流程。[`complexity`](https://www.afterpack.dev/zh/docs/config#complexity) 没有上限，每个[预设](https://www.afterpack.dev/zh/docs/presets)都可用。**你付费购买的是精准施加保护的能力，即用[指令](https://www.afterpack.dev/zh/docs/directives)作用于某一个函数或文件，外加源代码绝不能离开的运行环境，以及用量：[Pro](https://www.afterpack.dev/zh/docs/pro) 构建运行在 [AfterPack 的云端](https://www.afterpack.dev/zh/docs/deployment-modes)，按 MB 计量。

Free 足以混淆你的代码。真正的问题在于：你是否需要标记特定区域以施加更强的处理，是否需要在第三方无法接触你源代码的环境中运行，或者是否需要让云端引擎处理超过 Free 配额的 JavaScript。

## 能力矩阵

| Capability | Free ($0) | Indie ($49) | Team ($159) | Studio ($299) | Enterprise (Custom) |
| --- | --- | --- | --- | --- | --- |
| **All [structural transforms](https://www.afterpack.dev/docs/concepts#what-standard-obfuscation-already-does)** — Renaming, encoding, control-flow, constants, inflation. The two Pro hardening transforms are a separate row. | Yes | Yes | Yes | Yes | Yes |
| **Unlimited [complexity](https://www.afterpack.dev/docs/config#complexity)** — `complexity` is unbounded on every tier. | Yes | Yes | Yes | Yes | Yes |
| **[Plugin nudge](https://www.afterpack.dev/docs/cli#usage) after a CLI run** — The CLI reads `package.json` and points you at the matching plugin. | Yes | Yes | Yes | Yes | Yes |
| **[Audit command](https://www.afterpack.dev/docs/audit)** — `npx afterpack@latest audit <url>` — find exposed secrets and weak protection on a live URL. | Yes | Yes | Yes | Yes | Yes |
| **[Per-region directives](https://www.afterpack.dev/docs/directives#what-you-can-set)** — `/* @afterpack skip */` and every other per-region directive. On Free, a directive that raises protection stops the build and any other directive is ignored; use `paths.exclude` or `identifiers.reserved` per file. | — | Pro | Pro | Pro | Pro |
| **[Reserved identifiers](https://www.afterpack.dev/docs/config#identifiers-reserved)** — `identifiers.reserved`: keep specific names. | Yes | Yes | Yes | Yes | Yes |
| **[Source maps](https://www.afterpack.dev/docs/config#sourceMap-enabled)** — Generate locally; keep them out of production. | Yes | Yes | Yes | Yes | Yes |
| **Pro [amplifying directives](https://www.afterpack.dev/docs/config#preset)** — `preset=hard` or `preset=extreme` on a region. | — | Pro | Pro | Pro | Pro |
| **[Hardening transforms](https://www.afterpack.dev/docs/config#transforms-kind-enabled)** — `transforms.selfIntegrity` and `transforms.comparisonHardening`. Off by default; a Free build ignores both. | — | Pro | Pro | Pro | Pro |
| **[Cross-module obfuscation](https://www.afterpack.dev/docs/pro#soon) (planned)** — Imports/exports renamed; smaller bundles. | — | Pro | Pro | Pro | Pro |
| **Pro [destructive transforms](https://www.afterpack.dev/docs/pro#soon) (planned)** — Boundary-destroying fusion on marked regions. | — | Pro | Pro | Pro | Pro |
| **[Managed source maps](https://www.afterpack.dev/docs/pro#soon) (planned)** — Encrypted off-site storage; symbolicate production traces. | — | Pro | Pro | Pro | Pro |
| **[Confidential Computing deployment](https://www.afterpack.dev/docs/enterprise#confidential-computing) (on request)** — Attested enclave in your own cloud account. | — | — | — | — | Enterprise |
| **[Dedicated support](https://www.afterpack.dev/docs/sla#support-channels-by-tier)** — A direct chat channel with the engineering team. | — | — | — | Studio+ | Studio+ |
| **[On-prem / double-blind install](https://www.afterpack.dev/docs/enterprise#on-prem--double-blind-install) (on request)** — Sealed signed binary in your perimeter. | — | — | — | — | Enterprise |

## Free 在结构上已经很强

Free 会按你设置的任何[预设](https://www.afterpack.dev/zh/docs/presets)运行结构性变换目录，除了两项 Pro 加固变换（[`selfIntegrity`](https://www.afterpack.dev/zh/docs/config#transforms-kind-enabled) 和 [`comparisonHardening`](https://www.afterpack.dev/zh/docs/config#transforms-kind-enabled)）之外的全部变换。这已经在你的整个 bundle 上填满了多项式单射[还原类](https://www.afterpack.dev/zh/docs/reversal-classes)，而且[引擎对你代码所做的事](https://www.afterpack.dev/zh/docs/concepts)在各层级之间没有区别。

| Pro 增加 | 作用 |
|---|---|
| 精准的常量破坏 | [`/* @afterpack preset=extreme */`](https://www.afterpack.dev/zh/docs/config#preset) 把一个区域提升到[复杂度目标](https://www.afterpack.dev/zh/docs/config#complexity) 25，并强制开启[字符串下限](https://www.afterpack.dev/zh/docs/config#strings-encode)，使其中的字面量被编码，而不是以明文发布。 |
| 自完整性检查 | [`transforms.selfIntegrity.enabled`](https://www.afterpack.dev/zh/docs/config#transforms-kind-enabled) 增加一道检查，只检测对它自身校验表的修改，不检测对你代码其他地方的修改。全局生效，默认关闭，并且需要 `medium` 或更高级别的代码。 |
| 精准定位 | 写在源代码中的[指令](https://www.afterpack.dev/zh/docs/directives#what-you-can-set)，为某一个函数或文件设置更重或更轻的预设。由[框架插件](https://www.afterpack.dev/zh/docs/frameworks)读取；CLI 不读取任何指令。 |

跨模块纠缠、破坏边界的融合以及托管的 source map 均不可用。参见 [Pro](https://www.afterpack.dev/zh/docs/pro#soon)。

## 价格

| 层级 | 按月 | 按年 | Pro 构建 / 月 | 项目 | 超额 |
|---|---|---|---|---|---|
| Free | 永久 $0 | 不适用 | 10 MB | 2 | 不适用 |
| Extra MB | 一次性 $5 | 不适用 | +20 MB，永不过期 | 不适用 | 不适用 |
| Indie | $49/月 | $490/年 | 500 MB | 3 | $0.15/MB |
| Team | $159/月 | $1,590/年 | 3 GB | 5 | $0.12/MB |
| Studio | $299/月 | $2,990/年 | 8 GB | 不限 | $0.10/MB |
| Enterprise | 定制 | 定制 | 定制 | 定制 | 定制 |

按年套餐是**付 10 个月的价格用 12 个月**，相当于免费两个月。Indie 和 Team 的按月套餐包含**14 天免费试用**，每个工作区限一次——按年套餐是提前预付的，因此从不附带试用，而 Studio 无论哪种方式都没有试用。

**购买 Pro 的方式不止一种。**Extra MB 是一次性 $5 购买 20 MB，任何工作区都可以购买，包括 Free 工作区。它永不过期，不会自动续费，购买它也不会开启订阅。每隔几周才发布一次的项目，可以一直只靠充值运行下去。用量大时，套餐的每 MB 价格更低。

**Free 不会过期。**本地引擎不计量、不限量：想对多少代码运行 [`npx afterpack@latest`](https://www.afterpack.dev/zh/docs/cli) 都可以，永久如此，也不需要账户。10 MB 是[注册账户](https://www.afterpack.dev/zh/docs/accounts)获得的云端 Pro 配额，让你可以在真实代码上试用这些精准功能。

## 这里的 1 MB 指什么

计量的是 **[云端引擎](https://www.afterpack.dev/zh/docs/deployment-modes)处理的 JavaScript 的 MB 数**，不是文件数，不是构建次数，也不是请求数。

- 1 MB = 10⁶ 字节（十进制），按精确字节计数，显示精确到 0.1 MB。
- 一次构建只计量**一次**，依据是它实际处理的输入。
- 扣减顺序是**先用套餐配额，再用 Extra MB，最后计超额**。一次构建可以同时跨越这三者。
- Free 配额按滚动的 30 天周期补充。订阅的配额则按其计费周期补充。
- **Extra MB 永不过期**，也不会自动续费。它排在套餐配额之后，只有在配额用完后才会动用。

作为参考，一个典型的生产 SPA bundle 在几百 KB 到一两 MB 之间，因此 Indie 的 500 MB 大约够每月进行几百次云端构建。

## 超额，以及保护你的上限

付费套餐默认开启超额，这样在冲刺中途用完配额也不会让你的 CI 中断。超额按上表中的费率逐 MB 累计，并计入你的下一张发票。取整总是对你有利。

有三点对它加以限制：

- **你的消费上限。**由[工作区](https://www.afterpack.dev/zh/docs/dashboard/workspaces)所有者在[账单页面](https://www.afterpack.dev/zh/docs/dashboard/usage)上设置。`0` 会完全关闭超额（此时额度池用尽后构建会失败即中止）；不设置则表示没有用户上限。
- **平台上限。**新工作区在付清**两张发票**之前，上限为**每月基础价格的 2 倍**（Indie $98、Team $318、Studio $598）。
- **实际生效的上限取两者中较低的一个。**[控制台](https://www.afterpack.dev/zh/docs/dashboard/usage)会显示实际适用的上限。

**试用期间**、订阅逾期时或在 Free 套餐上，超额从不累计。在这些情况下，超出预付额度池的构建会失败即中止，而不是向你收费。

超出配额的批次会在任何文件被分发之前就被拒绝，因此一次构建永远不会只处理一部分或只计费一部分。参见[退出码与失败即中止](https://www.afterpack.dev/zh/docs/diagnostics#fail-closed-no-exceptions)。

## 按年套餐详解

按年套餐分两部分收费：在期限开始时预先收取全年价格的大部分，然后在剩余的十一个月里每月收取 $1。Creem 无法为 $0 的周期计费，因此这笔 $1 的扣费用来维持订阅，同时也充当整个期限内**按月收取超额费用**的发票。全年总额与上面显示的价格相同，只是拆分方式不同。

取消任何套餐，无论按年还是按月，都会保留你的层级和包含的配额直到已付费截止日，但会立即关闭超额：计费是后付的，因此已取消订阅的最后一个周期不会再有下一张发票来收取超额费用。在按年套餐上，每月 $1 的扣费会一直持续到期限结束；此后不再收取任何费用。

更换套餐从来都不是重新订阅，而且只有两种结果。

**如果你使用的是按年套餐，任何更改都会安排在下一次年度续订时生效**——无论是升到更高层级、降到更低层级，还是改回按月计费。你买的是一整年，因此在这一年结束之前，你会一直保留已付费的套餐和层级；今天不会收取任何费用，在此之前你当前的套餐也不会有任何变化。这也是切换不会立即生效的原因：预付的一年无法在期中退掉，今天就应用更改的话，要么会让你损失已经付费的月份，要么会向你收取第二年的费用。

**如果你使用的是按月套餐，升级会立即生效**，并把你的配额重置为新套餐的配额。**升级到另一个按月套餐**会按比例计算差价并在今天收取；**升级到按年套餐**则**今天不收取任何费用**——你的下一张发票就是新套餐的第一张年度发票，因为对预付的一年按比例计费会重复收取。按月套餐的**降级**会**安排在下一次续订时生效**，因此在此之前你会保留已经付费的层级，同样不收费。

在已安排的更改生效之前，你随时可以取消它。

## 账单是如何组织的

- **账单归属于[工作区](https://www.afterpack.dev/zh/docs/dashboard/workspaces)，而不是个人。**一个工作区拥有一份订阅、一个配额池、它的各个项目以及它的 [API 密钥](https://www.afterpack.dev/zh/docs/dashboard/api-keys)。你可以属于多个工作区；每个工作区单独计费。角色分为所有者（账单 + 删除）、管理员（成员、密钥、项目）、成员（使用）。
- **不按席位计价。**每个层级（包括 Free）的工作区成员数都不限。层级限制的是项目和 MB，从不限制人数。
- **Creem 是记录商户（merchant of record）。**它负责付款、税费和增值税，只是计费基础设施。它从不接触你的源代码。可以在 Creem 客户门户中管理付款方式和发票，或取消订阅，入口链接在[控制台的账单页面](https://www.afterpack.dev/zh/docs/dashboard/usage)上。
- **账单页面列出每一笔费用。**每一次付款、套餐变更、Extra MB 购买和退款都会出现在控制台的活动记录表中，标明套餐和计费周期、任何超额用量及其所属周期，以及，若为退款，则对应的那笔付款。收据和正式的增值税发票都是 Creem 门户中的文档。
- **取消会保留你已付费的内容。**已取消的订阅在已付费截止日之前仍享有其层级的权益——对于预付的一年，就是年度到期日——之后恢复为 Free，在此之前你随时可以恢复订阅。无论计费周期如何，超额都会立即关闭：该通道按后付方式计费，因此已取消订阅的最后一个周期不会再有下一张发票来收取超额费用。
- **付款失败会有 7 天宽限期**，期间工作区仍享有权益。宽限期结束后，Pro 构建会失败即中止，而不是降级为 Free 输出。你的本地 Free 构建自始至终不受影响。

## 下一步

- [控制台](https://www.afterpack.dev/zh/docs/dashboard)：用量表、密钥生命周期，以及订阅在日常中的表现。
- [Enterprise](https://www.afterpack.dev/zh/docs/enterprise)：机密计算和本地部署形态的详细说明。
- [概念](https://www.afterpack.dev/zh/docs/concepts)：还原类，以及每次构建换一种形态能隐藏什么、不能隐藏什么。
- [最佳实践](https://www.afterpack.dev/zh/docs/best-practices)：在哪个层级上该标记哪些代码行。
- [Pro](https://www.afterpack.dev/zh/docs/pro)：逐项功能详细说明能力差异。
- [部署模式](https://www.afterpack.dev/zh/docs/deployment-modes)：每个层级的引擎实际在哪里运行。
- [指令](https://www.afterpack.dev/zh/docs/directives)：精准层级所解锁的区域标记。
