Plans, locations and what is sellable
How a plan becomes something a billing system can actually sell, and why a location might not qualify.
kstack decides what a product is. Your billing decides how it is sold. The catalogue endpoint is where the two meet.
Kinds
A plan has a kind: shared_hosting, reseller_hosting, database, email, dns or vps. It defaults to shared_hosting, and an update that does not name a kind keeps the stored one.
VPS sizes are bounds, not labels
A VPS size lives in the plan allowances and applies per machine.
| Dimension | From | To |
|---|---|---|
vm_vcpus |
1 | 32 |
vm_memory_mb |
512 | 262144 |
vm_disk_gb |
10 | 2000 |
An order naming no size gets the plan size. An order above it is refused with "beyond this plan" rather than quietly accepted and billed.
Why a location might not qualify
A location is offered for a kind only when a node there:
- holds every role that kind needs,
- accepts placement,
- reports a fresh heartbeat, and
- is under the capacity watermark.
So an unsellable location is a statement about capacity, not a bug. DNS is the exception — it is served from everywhere, carries anywhere: true, and checkout shows no location picker for it.
Measured facts
Each kind reports facts kstack has measured. A product page may claim these and nothing else.
- hosting — PHP, Node and Python versions; where OpenLiteSpeed with LSCache runs; where per-site containers run; HTTP/3 and IPv6 locations; the one-click apps; free TLS; DNSSEC; backup intervals with restore-drill counts.
- vps — bootable images, the vCPU / memory / disk bounds, KVM, root login by SSH key, snapshots, private networks.
- database — engines, engines by location, the PostgreSQL extensions present by default, max connections per database.
- dns — nameservers, DNSSEC, IPv6, record types, and whether every nameserver serves every zone.
Email is built but gated
email exists as a kind and reports itself sellable: false until a mail node at that location passes mail readiness. A billing system should never propose an unsellable kind.

