# AfterPack plans and tiers

Free runs the full pipeline: complexity is unbounded and every preset is available. What changes between tiers is how surgically you can apply protection, and how many MB of Pro builds you get each month.

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

**Free runs the full pipeline. [`complexity`](https://www.afterpack.dev/docs/config#complexity) is unbounded and every [preset](https://www.afterpack.dev/docs/presets) is available.** What you pay for is applying protection surgically, [per region](https://www.afterpack.dev/docs/directives) and [per file](https://www.afterpack.dev/docs/config#paths-exclude), plus environments where source can never leave, and volume: [Pro](https://www.afterpack.dev/docs/pro) builds run in [AfterPack's cloud](https://www.afterpack.dev/docs/deployment-modes) and are metered by the megabyte.

Free is enough to obfuscate your code. The real questions are whether you need to mark specific regions for harder treatment, run where a third party can't touch your source, or push more JavaScript through the cloud engine than Free's allowance covers.

## Capability matrix

| Capability | Free ($0) | Indie ($49) | Team ($159) | Studio ($299) | Enterprise (Custom) |
| --- | --- | --- | --- | --- | --- |
| **All structural transforms** — Renaming, encoding, control-flow, constants, inflation. The two Pro hardening transforms are a separate row. | Yes | Yes | Yes | Yes | Yes |
| **Unlimited complexity** — `complexity` is unbounded on every tier. | Yes | Yes | Yes | Yes | Yes |
| **Plugin nudge after a CLI run** — The CLI reads `package.json` and points you at the matching plugin. | Yes | Yes | Yes | Yes | Yes |
| **Audit command** — `npx afterpack@latest audit <url>` — find exposed secrets and weak protection on a live URL. | Yes | Yes | Yes | Yes | Yes |
| **Escape-hatch directives** — `/* @afterpack skip */` on a region. In a Free build a directive is an error. | — | Pro | Pro | Pro | Pro |
| **Reserved identifiers** — `identifiers.reserved`: keep specific names. | Yes | Yes | Yes | Yes | Yes |
| **Source maps** — Generate locally; keep them out of production. | Yes | Yes | Yes | Yes | Yes |
| **Per-file rules** — Different settings per glob. | — | Pro | Pro | Pro | Pro |
| **Pro amplifying directives** — `preset=hard` or `preset=extreme` on a region. | — | Pro | Pro | Pro | Pro |
| **Hardening transforms** — `transforms.selfIntegrity` and `transforms.comparisonHardening`. Off by default; a Free build ignores both. | — | Pro | Pro | Pro | Pro |
| **Cross-module obfuscation (planned)** — Imports/exports renamed; smaller bundles. | — | Pro | Pro | Pro | Pro |
| **Pro destructive transforms (planned)** — Boundary-destroying fusion on marked regions. | — | Pro | Pro | Pro | Pro |
| **Managed source maps (planned)** — Encrypted off-site storage; symbolicate production traces. | — | Pro | Pro | Pro | Pro |
| **Confidential Computing deployment (on request)** — Attested enclave in your own cloud account. | — | — | — | — | Enterprise |
| **Dedicated support** — A direct chat channel with the engineering team. | — | — | — | Studio+ | Studio+ |
| **On-prem / double-blind install (on request)** — Sealed signed binary in your perimeter. | — | — | — | — | Enterprise |

## Free is structurally strong

Free runs the structural transform catalog at whatever [preset](https://www.afterpack.dev/docs/presets) you set, everything except the two Pro hardening transforms ([`selfIntegrity`](https://www.afterpack.dev/docs/config#transforms-kind-enabled) and [`comparisonHardening`](https://www.afterpack.dev/docs/config#transforms-kind-enabled)). That already spans both polynomial [reversal classes](https://www.afterpack.dev/docs/reversal-classes), and [what the engine does to your code](https://www.afterpack.dev/docs/concepts) does not change between tiers.

| Pro adds | What it does |
|---|---|
| Surgical constant destruction | [`/* @afterpack preset=extreme */`](https://www.afterpack.dev/docs/config#preset) raises a region to [complexity target](https://www.afterpack.dev/docs/config#complexity) 80 with the [string floor](https://www.afterpack.dev/docs/config#strings-encode) forced on, so its literals are encoded rather than shipped in cleartext. |
| Anti-tamper | [`transforms.selfIntegrity.enabled`](https://www.afterpack.dev/docs/config#transforms-kind-enabled) makes a tampered build break instead of running. Global and off by default. |
| Surgical targeting | [Per-region directives](https://www.afterpack.dev/docs/directives#what-you-can-set) and per-file rules that raise protection exactly where it matters. |

Cross-module entanglement, boundary-destroying fusion and managed source maps are not available. See [Pro](https://www.afterpack.dev/docs/pro#soon).

## Pricing

| Tier | Monthly | Yearly | Pro builds / month | Projects | Overage |
|---|---|---|---|---|---|
| Free | $0 forever | n/a | 10 MB | 2 | n/a |
| Extra MB | $5 one-time | n/a | +20 MB, never expires | n/a | n/a |
| Indie | $49/mo | $490/yr | 500 MB | 3 | $0.15/MB |
| Team | $159/mo | $1,590/yr | 3 GB | 5 | $0.12/MB |
| Studio | $299/mo | $2,990/yr | 8 GB | unlimited | $0.10/MB |
| Enterprise | Custom | Custom | Custom | Custom | Custom |

A yearly plan is **10 months' price for 12 months**, two months free. Indie and Team include a **14-day free trial** on the monthly plan, once per workspace — a yearly plan is prepaid up front, so it never carries one, and Studio has no trial either way.

**There is more than one way to buy Pro.** Extra MB is a one-time $5 purchase of 20 MB that any workspace can make, Free ones included. It never expires, never auto-renews, and buying one does not start a subscription. A project that ships a release every few weeks can run on top-ups indefinitely. At volume, a plan is cheaper per MB.

**Free does not expire.** The local engine is unmetered and unlimited: run [`npx afterpack@latest`](https://www.afterpack.dev/docs/cli) on as much code as you like, forever, with no account. The 10 MB is the cloud Pro allowance a [registered account](https://www.afterpack.dev/docs/accounts) gets so you can try the surgical features on real code.

## What a megabyte means here

The meter is **MB of JavaScript the [cloud engine](https://www.afterpack.dev/docs/deployment-modes) processes**, not files, not builds, not requests.

- 1 MB = 10⁶ bytes (decimal), counted in exact bytes and displayed to 0.1 MB.
- A build is metered **once**, against the input it actually processes.
- Draw order is **plan allowance, then Extra MB, then overage**. A single build can span all three.
- The Free allowance refills on a rolling 30-day window. A subscription's allowance refills on its billing cycle instead.
- **Extra MB never expires** and does not auto-renew. It sits behind the plan allowance and is only drawn once the allowance is empty.

For scale, a typical production SPA bundle is a few hundred KB to a couple of MB, so Indie's 500 MB covers roughly a few hundred cloud builds a month.

## Overage, and the cap that protects you

Overage is on by default on a paid plan, so running out of allowance mid-sprint does not break your CI. It accrues per MB at the rate in the table above and is added to your next invoice. Rounding always goes your way.

Three things bound it:

- **Your spend cap.** Settable by the [workspace](https://www.afterpack.dev/docs/dashboard/workspaces) owner on the [billing page](https://www.afterpack.dev/docs/dashboard/usage). `0` turns overage off entirely (builds then fail closed when the pools run dry); unset means no user cap.
- **A house cap.** A new workspace is capped at **2× the monthly base** ($98 Indie, $318 Team, $598 Studio) until **two invoices** are paid.
- **The effective cap is the lower of the two.** The [dashboard](https://www.afterpack.dev/docs/dashboard/usage) shows the cap that actually applies.

Overage never accrues **during a trial**, on a past-due subscription, or on the Free plan. On those, a build that outruns the prepaid pools fails closed instead of billing you.

An over-quota batch is rejected before any file is dispatched, so a build is never partly processed or partly billed. See [Exit codes & fail-closed](https://www.afterpack.dev/docs/diagnostics#fail-closed-no-exceptions).

## Yearly plans, in detail

A yearly plan is billed as two charges: most of the year's price upfront when the term starts, then $1 a month for the remaining eleven months. Creem cannot bill a $0 cycle, so that $1 charge keeps the subscription alive, and it doubles as the invoice that **collects overage monthly** for the whole term. The total across the year is the same price shown above, just split differently.

Cancelling any plan, yearly or monthly, keeps your tier and included allowance until the paid-through date, but turns overage off immediately: billing is trailing, so a cancelled subscription's final cycle never gets another invoice to collect overage on. On a yearly plan, the $1 monthly charges keep billing until the term ends; nothing is charged after that.

Changing plan is never a re-subscribe, and there are only two outcomes.

**If you are on a yearly plan, any change is scheduled for your next annual renewal** — a higher tier, a lower one, or a move back to monthly billing. You bought a year, so you keep the plan you paid for, at the tier you paid for, until the year is up; nothing is charged today, and nothing about your current plan changes before then. That is also why the switch is not instant: a year paid up front cannot be un-bought mid-term, and applying the change today would either forfeit the months you already paid for or charge you a second year.

**If you are on a monthly plan, moving up applies immediately** and resets your allowance to the new plan's. Moving up **to another monthly plan** prorates the difference and charges it today; moving up **to a yearly plan** charges **nothing today** — your next invoice is simply the new plan's first yearly invoice, because prorating a year paid up front would collect it twice. **Moving down** a monthly plan is **scheduled for your next renewal**, so you keep the tier you already paid for until then, with no charge either.

You can cancel a scheduled change any time before it lands.

## How billing is organised

- **Billing attaches to a [workspace](https://www.afterpack.dev/docs/dashboard/workspaces), not to an individual.** A workspace owns one subscription, one allowance pool, its projects, and its [API keys](https://www.afterpack.dev/docs/dashboard/api-keys). You can belong to several; each bills separately. Roles are owner (billing + delete), admin (members, keys, projects), member (use).
- **No per-seat pricing.** Every tier, Free included, has unlimited workspace members. What the tier bounds is projects and MB, never people.
- **Creem is the merchant of record.** It handles payment, tax, and VAT, and is billing infrastructure only. It never touches your source code. Manage the payment method, invoices, or cancel from the Creem customer portal, linked from the [dashboard billing page](https://www.afterpack.dev/docs/dashboard/usage).
- **AfterPack's monthly Statement email summarizes billing; it is separate from your invoice.** It covers plan, period, base, overage, and Extra MB used. The official VAT invoice is the Creem portal document.
- **Cancelling keeps what you paid for.** A cancelled subscription stays entitled at its tier until the paid-through date — the annual date on a prepaid year — then reverts to Free, and you can resume any time before it. Overage turns off immediately, on any interval: the rail bills trailing, so a cancelled subscription's final cycle never gets another invoice to collect overage on.
- **A failed payment gets a 7-day grace window**, with the workspace still entitled. After it expires, Pro builds fail closed instead of downgrading to Free output. Your local Free builds are unaffected throughout.

## Next

- [Dashboard](https://www.afterpack.dev/docs/dashboard): the meter, the key lifecycle, and how a subscription behaves day to day.
- [Enterprise](https://www.afterpack.dev/docs/enterprise): the Confidential Computing and on-prem shapes, in detail.
- [Concepts](https://www.afterpack.dev/docs/concepts): reversal classes and why there are no peelable layers.
- [Best practices](https://www.afterpack.dev/docs/best-practices): which lines to mark, on which tier.
- [Pro](https://www.afterpack.dev/docs/pro): the capability delta in detail, feature by feature.
- [Deployment modes](https://www.afterpack.dev/docs/deployment-modes): where each tier's engine actually runs.
- [Directives](https://www.afterpack.dev/docs/directives): the region markers the surgical tiers unlock.
