Stacks
Stacks are the infrastructure blueprint for your platform — groups of features that share Cloudflare resources.
Stacks
Think of a Stack like a Docker Compose file for cloud infrastructure. It declares which features belong together, what shared resources they need (database, storage, cache), and how those resources are named and isolated.
What a Stack is
A Stack is a named, versioned collection of NNO features that are provisioned and operated together. When you activate a stack, NNO provisions a shared set of Cloudflare resources — one D1 database, one R2 bucket, one KV namespace — and injects them into every feature Worker in that stack.
Without stacks, each feature would provision its own isolated D1 database. Related features would end up with data silos and need HTTP calls to share data. Stacks solve this by giving a group of features a single shared resource namespace.
The default stack
Every platform has a default stack created automatically at onboarding. The default stack:
- Hosts your platform's auth service (
auth.svc.default.{platformId}.nno.app) - Is the anchor for session cookies — the cookie domain
.<platformId>.nno.appcovers all stacks on your platform - Uses the reserved keyword
defaultin DNS and Cloudflare resource names
You cannot create a user stack named default — it is reserved.
Custom stacks
Beyond the default stack, you can activate additional stacks for different parts of your product. A platform can have multiple active stacks simultaneously:
Platform: acmecorp (k3m9p2xw7q)
├── Stack: default → auth Worker + D1
├── Stack: saas-starter → billing + settings + analytics (shared D1, KV)
└── Stack: analytics-pro → analytics + data-export (shared D1, R2, KV)Each stack gets its own isolated resource set. There is no cross-stack database sharing — if two stacks need to exchange data, they do so through feature API calls.
Stack templates
NNO publishes pre-built stack templates to the Stack Registry. A template defines which features are included, what resources to provision, and the minimum billing plan required. Platform admins activate a template with a single action; NNO handles provisioning.
Example templates:
| Template | Features | Resources |
|---|---|---|
saas-starter | billing, settings, analytics | D1 + KV |
analytics-pro | analytics, data-export, dashboards | D1 + R2 + KV |
You can also create platform-local stacks — custom compositions that are not based on a template.
Stacks and DNS
Stack IDs appear directly in your DNS hostnames:
{service}.svc.{stackId}.{platformId}.nno.app ← backend Worker
{app}.app.{stackId}.{platformId}.nno.app ← frontend Pages appThe default stack uses the literal string default in DNS (e.g. auth.svc.default.k3m9p2xw7q.nno.app). Custom stacks use their 10-character nano-ID.
Required vs optional features
Each feature in a stack is marked as required or optional. If a required feature fails to provision, the entire stack activation fails. If an optional feature fails, the stack still activates — the failure is logged and the stack is usable with the remaining features.
For the full technical specification, see Internal → Stacks.