Skip to main content

A shell is the product frame: navigation, layout, runtime/device state, and where surfaces appear. It should place surfaces, not become every feature.

Your app has a sidebar, a main panel, and a details panel. The shell decides those regions exist. Package surfaces decide what product body appears inside them.
Shell

Navigation, route, account state, runtime/device state, and layout regions.

Descriptor

Which product surface belongs in which shell region.

Surface

Reads named data, renders UI states, and sends named action requests.

Shell ownership

Placeable surface rule

The shell should be able to place a surface from a descriptor without importing the feature’s private screens, stores, actions, or file layout.
The shell decides where a surface goes. The surface still owns the customer-specific UI inside that place.

What this prevents

Verify

You have the right boundary when you can move a surface from main to details without editing the target implementation or named data read contract.

Next

Use Placeable surfaces for the descriptor mental model and Device and deployment shape for account/device rollout.
Last modified on May 11, 2026