Skip to content

Tiers & features

Plan-to-tier name mapping, per-tier feature unlock matrix, what happens when you hit a gate.

Which features unlock at which plan, and how the marketing tier names map to what your dashboard shows.

Plan → tier name mapping

The marketing site uses customer-friendly plan names (Hobby, Pro, Team, Enterprise). Your engine reports the underlying license tier by its technical name (starter, business, enterprise, etc.). They map like this:

Plan you boughtTier in your dashboardWhat you see in Settings → License
Free / no licenseunlicensed (with 30-day trial overlay)UNLICENSED badge with TRIAL ACTIVE banner
HobbystarterSTARTER badge
ProbusinessBUSINESS badge
Teambusiness (with higher limits)BUSINESS badge with elevated capacity
EnterpriseenterpriseENTERPRISE badge
Bespoke contractcustomCUSTOM badge — limits negotiated per contract
Air-gapped / on-prem signed claimsofflineOFFLINE badge — no heartbeat traffic

Internally everything keys off the technical tier name; the marketing names are just how we talk about plans on the website. If you bought Pro and your dashboard says BUSINESS, that’s the same thing.

The locked model: what your license actually constrains

Two numeric limits cap your usage:

  • max_instances — the total number of running apps across all your hosting accounts. Counts systemd-managed services, Docker containers, and Vloud-managed Node apps.
  • max_linux_users — the number of Linux user accounts the engine will provision (one per hosting customer you serve).

Both limits surface in the sidebar capacity widget and on the Settings → License page. When you hit one, the next create action returns a 402 and the dashboard shows an Upgrade prompt rather than a generic error.

Per-tier feature unlock

Beyond the numeric limits, your license also carries a set of named feature flags. Routes for those features are only registered when the flag is present. Approximate per-tier defaults (your actual license may differ — contractual licenses can mix and match):

FeatureStarterBusinessEnterprise
core — base hosting (deploy, domains, SSL, databases)
email — Postfix/Dovecot/Rspamd + webmail SSO
backups — scheduled tenant backups + restore
ai-doctor — Claude deploy-failure diagnosis
security-engine — 12-phase ClamAV+YARA+threat-feed
reseller — sub-accounts, reseller plans, white-label
multi-region — cross-region deployment
white-label — full brand customization
kubernetes — Kubernetes plugin (experimental)

See Licensing for activating a license and seeing your exact feature list. The dashboard’s Settings → License page shows the canonical list as feature chips — that’s the ground truth for your install.

What happens when you try to use a feature your tier doesn’t include

The dashboard surfaces an Upgrade prompt with a direct path to /pricing or to your license management page. You don’t see a cryptic error.

Under the hood: the server route returns HTTP 402 with a structured error like { error: 'feature_not_in_package', feature: 'email' }. The web layer intercepts those 402s globally and shows the prompt — every feature-gated route across the dashboard handles them this way.

Hosting packages within an account

Resellers and white-label operators can carve their license capacity into hosting packages (e.g. Bronze / Silver / Gold) that apply per-customer. A package is a subset of what the license allows — you can’t hand a customer a package with more capacity than the license itself has. The package surface lives under Admin → Hosting packages in the dashboard.

Changing plans

From Settings → License → Open billing portal you can upgrade, downgrade, or cancel through Stripe’s hosted portal. Plan changes propagate to your install within one heartbeat cycle (≤6 hours); for immediate effect, restart the engine after the plan change so the next heartbeat fires on boot.