# Forma stack architecture

Forma 3.2 coordinates eight packages. TypeScript components compile to FMIR v3;
Rust renders native modules with typed request data; the browser adopts declared
islands. The optional router connects compatible destinations while retaining
their common layouts. An application can also use ordinary documents, zero-JavaScript
routes or browser rendering.

## Packages and boundaries

| Package | Responsibility |
| --- | --- |
| `@getforma/core` | Signals, DOM ownership, island adoption and the explicit HTML runtime |
| `@getforma/compiler` | The native source subset, declared props, island identity and FMIR emission |
| `@getforma/build` | Bundles, manifests, asset integrity and native navigation groups |
| `@getforma/router` | Browser, native and generated-HTML navigation adapters |
| `@getforma/create-app` | Connected starter applications and their coordinated dependency locks |
| `forma-ir` | Native module parsing, validation and HTML rendering |
| `forma-ir-derive` | The Rust `PageProps` derive macro |
| `forma-server` | Typed page binding, complete responses, assets and Axum integration |

Use the coordinated **3.2.0** versions. Add the router only where an
application needs it; the [minimal template](/docs/3.2/minimal-template/) and
[Field Notes](/examples/field-notes/) demonstrate applications without it.

## Build, render and activate

The compiler analyzes supported native source without executing application data.
Unsupported expressions produce a build diagnostic. Explicit browser routes and
browser-only islands describe a chosen execution mode; they do not silently
replace a failed native compilation. See the [native subset](/docs/3.2/native-subset/).

The build emits native modules, browser entries, styles and a manifest. Rust loads
the declared modules, binds their schemas to `PageProps`, and finalizes the
registry before listening. A typed page handle renders validated request data
into a complete `PageResponse`, including its nonce, CSP and cache policy.
Return that response intact. See [declared props](/docs/3.2/declared-props/) and
the [server integration](/docs/3.2/server/).

Declared islands validate and adopt existing server-rendered nodes. Local signals
then drive interaction. Static markup outside islands needs no activation, and
ordinary no-JavaScript pages need no executable browser bundle. The explicit HTML
runtime separately mounts reviewed markup through an owner with a declared tier
and grants; importing it does not scan or activate the document.

## Navigation and retained layouts

The router has three adapters. A browser adapter constructs destination content
with Forma. A native adapter receives typed Rust owner branches and adopts fresh
leaf islands. A generated-HTML adapter validates registered document digests before
admitting their content regions. One coordinator owns navigation in each document.

Compatible shared owners retain their DOM, state and resources. Departing owners
dispose their work. Unsupported pages and incompatible builds use document
navigation. Rendering, navigation and durable persistence remain separate choices.
Read [routing and navigation](/docs/3.2/routing/) and try the
[native router lab](/lab/router/).

## Security and compatibility

Native rendering accepts the application's trusted build artifacts. Typed props
and response policy do not supply authentication, authorization or a database.
Rust handlers own request validation, CSRF, transactions and application services.
Trusted Types and sink rules constrain client markup operations; they do not make
arbitrary HTML trusted. See [response policy](/docs/3.2/trusted-types/) and
[building a backend](/docs/3.2/backend/).

Deploy the server binary, manifest, modules and browser assets from one build.
Retain a complete rollback and verify direct requests, no-JavaScript behavior,
island identity and navigation against the running application. The
[packages and deployment guide](/docs/3.2/upgrading/) covers the coordinated build and rollout; the
[compatibility reference](/docs/3.2/compatibility/) defines wire-version rules.
