This Runtime Kit Cookbook entry builds the same shape explained in Placeable surfaces: package material becomes named data reads and targets, descriptors declare what each surface may touch, and a dumb shell places the surfaces.
The snippets on this page come fromexamples/product-cookbook/placeable-surface-product-loop/ and are checked by cookbook-examples.json.When to use this
Use this recipe when the product is bigger than one component.The point is not “make a dashboard.” The point is to keep arrangement generic while package-specific UI rules live in package data, targets, descriptors, and surface bodies.
What you will build
What should happen
Step 1: package records and targets
The package owns product facts and callable targets.Step 2: surface descriptors
A descriptor says where the surface can appear and which Runtime Kit names the surface body may use.Step 3: dumb shell
The shell receives surface descriptors and a render registry. It builds navigation from descriptor labels and chooses the active surface by id.Step 4: surface body
The surface body is where product work happens. It reads Runtime Kit data and calls Runtime Kit targets.main to panel, opened beside another surface, or reused in a different shell. The product work stays with the surface body. The arrangement stays with the shell.Surface body contract:Step 5: second surface, same request primitive
Verify the full loop
Before you call the feature done, write this checklist beside it:Common failures
Safe variations
You can extend this recipe without changing the primitive:- Add
launch.analyticsin therailregion with its own data name. - Move
launch.helpfrompaneltomainby changingregion. - Add
settings.billingwith a new component key and target. - Add a second shell that renders the same descriptors differently for mobile.
- Add a support surface that reads account/device status once that public names exists.