Understand · browser continuation
Resumability
Presolve publishes enough compiler-owned information for the browser to continue an interactive application from a compatible snapshot. It does not mount a second renderer and replay the component tree merely to reconnect behavior.
What the compiler publishes
An interactive pnpm build includes resume.runtime.json and matching browser artifacts. Together they identify:
Do not hand-author resume JSON, depend on internal IDs, or combine it with files from another build. Use presolve explain for supported source-level reasoning.
Cold start
The static HTML is already the page. For admitted interactive behavior, narrow generated programs connect compiler-issued events, bindings, structural hosts, and effects. There is no generic application render pass.
- Use published HTMLThe route remains meaningful before behavior activation.
- Validate runtime productsSchema, integrity, and membership must match the build.
- Activate exact behaviorOnly the plans required by compiler-admitted interactions execute.
Resume sequence
When a compatible snapshot exists, restoration follows compiler-defined dependency and ownership order.
- Verify build identityReject a snapshot from any other publication.
- Validate the full snapshotCheck every retained slot and codec before mutating live state.
- Restore ownersState, computed dependencies, Context, component instances, forms, and bindings restore in fixed order.
- Reconnect events and effectsUse exact artifact membership; never search the DOM for meaning.
- ContinueThe next action executes against the restored instance and its retained identity.
Validation and cold fallback
Resume is transactional. A malformed slot, missing anchor, incompatible codec, stale build identity, or fabricated membership invalidates the attempt before a partial application is exposed.
When validation fails, Presolve performs one cold start and does not reuse the failed resume registry. A clean cold start is safer than a partially restored application.
What authors write
Resumability is a compiler capability, not an extra component API. Use normal components, state, actions, computed getters, effects, slots, Context, forms, and resources within their admitted boundaries.
export class Counter extends Component {count = state(0);increment = action(() => { this.count++; });render() {return <button onClick={this.increment}>{this.count}</button>;}}The compiler decides which values can be retained, how they are encoded, how structural occurrences are materialized, and which DOM binding receives the next update.
Inspect and deploy
pnpm checkpnpm buildpnpm exec presolve explain app/routes/index.tsxpnpm deploy:prepareDeploy the complete compiler inventory. Do not upload only route HTML or replace generated browser files: the build identity and digests intentionally bind all products together.