Generated apps
Generated apps
A generated app on Furnace is not a deployed piece of software. It's governed data: a schema, a set of pages, and optionally some automation, all stored the same way as any other content on the platform and rendered by one shared runtime. Creating a new app costs a write, not a deployment.
What an app is made of
A generated app has up to three parts, each owned by a different layer of the platform:
- Schema — the declarative data layer: what entities the app has, what permissions guard them, and what server-side logic runs against them.
- Pages — SDL documents describing what the app looks like: screens built from the same closed, validated component vocabulary as every hand-built Furnace interface.
- Automation — functions and triggers that act on the app's data on a schedule, in response to a webhook, or in response to changes to the app's own entities.
None of these three grows into a general-purpose programming language. Schema declares shape, SDL declares presentation, and automation runs narrowly scoped functions — keeping each layer legible on its own rather than merging into one do-everything DSL.
One shared runtime, zero per-app deployment
Every generated app is rendered by the same host application, keyed by its own slug. There is no container, no DNS entry, no deploy pipeline per app — the marginal cost of a new generated app approaches the cost of describing it. Each app still gets its own isolated data: a structurally separate namespace that its own code cannot escape, and its own access control, enforced the same way for every caller regardless of which app is asking.
Automation without ambient authority
Custom functions attached to a generated app don't get broad access to the platform by default. They run against a narrow, explicitly injected set of capabilities — a scoped view of the app's own data, and scoped access to outbound actions the platform grants — rather than an open credential that could reach anywhere. A function that needs a new capability gets it added deliberately; it can't reach past what it was given.