Pricing

/pricing is what it costs, written for someone deciding whether to sign up at all. It is public — no account, no sign-in — for the same reason /status and /install are: needing an account to find out the price is a good way to not be asked.

The public pricing page

The model

The shape is settled even though the numbers are not:

You pay with Prepaid credit, held per organization and shared by its members — see Billing
Metered in Container-seconds, counted per container. Three replicas for an hour is three container-hours
Charged for Running containers. Image builds are included
Not charged for Seats, applications, or an organization with nothing deployed
Not metered yet Egress bandwidth and registry storage — the page says so rather than implying they are free forever

A container the platform started but never saw stop is reported separately rather than guessed at, and is not billed.

What is real, and what is a placeholder

This is the part worth being precise about, because "placeholder" has meant two different things on this page at different times:

Status
Metering Real. App\Service\Usage\UsageMeter counts container-seconds against the organization
Top-ups Real. Stripe Checkout, in test mode — see Billing
Drawing credit down Real. App\Service\Credit\UsageBiller writes one debit per organization-hour, on a tick scheduled every 15 minutes
The rate per container-second A placeholder. The figure on the page is indicative and has not been set from observed usage

So a balance does move on its own. The amber banner on the page is about the rate, not about whether anything is charged — an earlier version of it said nothing was billed at all, which stopped being true once hourly debiting shipped.

Setting the rate from real observed usage, and taking the banner off once it is set, is tracked separately.

Where each figure comes from

No number on the page is meant to be an independent claim; each one is supposed to be the same number the product uses.

On the page Source
$5 / $10 / $20 top-ups BillingTopUpFormType::FIXED_AMOUNTS_CENTS
"any amount from $1 to $500" BillingTopUpFormType::CUSTOM_MIN_DOLLARS and CUSTOM_MAX_DOLLARS
Container-seconds as the unit App\Service\Usage\UsageMeter, the same meter Billing reports from
The indicative rate Currently a literal in templates/marketing/pricing.html.twig. The rate actually charged is CREDIT_RATE_CENTS_PER_CONTAINER_SECOND, and the two can drift — that is one of the things setting the real rate has to fix
"not metered" for containers the platform writes into your stack App\Entity\Task::isBillable() for the per-binding proxy, and App\Service\Platform\PlatformTenancy::owns() for the organization the engine itself runs under — see Billing for the same fact in the reader's terms

The top-up bounds are constants precisely so this page and the payment screen cannot disagree: a marketing page advertising a range the form then rejects is the worse of the two ways to get that wrong.

← All guide pages