Release guide · 0.2.0-beta.26
Beta support matrix
Presolve is a public beta with a deliberately explicit contract. The compiler fails closed when it cannot prove a supported meaning; it does not silently substitute a generic client renderer, source transform, or server runtime.
Computed values, Effects, and Context now share recursively typed constant artifacts. Numeric literals remain numbers at runtime instead of becoming serialized strings, including nested arrays and objects; the canonical scaffold counter proves 0 → 1 with the derived value 1 → 2.
The schema-v3 Node host now executes compiler-proven Form-bound server actions and route-owned loader Resources through digest-verified Vite registries. Exact request decoding, result codecs, cache policy, cancellation, browser bootstrap, typed failures, JSON, and redirects have deterministic request and browser proof.
Actions now execute only the computed update plan owned by their active component instance. Interactive routes remain clean when another route or an unmounted component contributes computed work to the same application publication.
Embedded browser runtime artifacts are now compact JSON while canonical external artifacts remain readable and digest-bound. Large multi-route publications keep the same compiler semantics with substantially less duplicated HTML, making direct Cloudflare publication reliable without adapter patches.
New projects declare the audited esbuild and workerd installers required by Vite and Wrangler, so pnpm 11 can enforce its strict dependency-build policy without blocking checks, builds, or deployment preparation. Use pnpm create presolve@0.2.0-beta.26 my-app during the release's first day because pnpm 11 intentionally delays unversioned packages for 24 hours.
presolve dev watches authored inputs, hot-swaps finished global CSS without replacing page state, safely reloads semantic changes from a new compiler publication, and preserves the last good page with an accessible diagnostic when a build fails.
An Action can invoke an authority-proven named import using the documented primitive parameter or cancellable Promise<void> forms. TypeScript proves the export, Vite bundles it, and Presolve owns arguments, cancellation, publication integrity, diagnostics, and resume-without-replay.
Presolve now publishes content-addressed global CSS and route runtimes while retaining stable compatibility copies. Generated pages reference the immutable asset names, so Safari and other returning clients cannot pair a newly deployed document with stale framework CSS or behavior.
Conventional file-route builds now derive browser and resume records only from the selected layout/route instance tree. Interactive sibling routes cannot leak targets, events, state, or bindings into another page.
Supported for beta projects
| Capability | What is covered | Use it this way |
|---|---|---|
| Component model | Component classes, nested components, element and empty null conditional branches, keyed lists, retained keyed identity, and child-first teardown. | Extend Component and return TSX from one instance render() method. |
| Reactivity | Owned state, synchronous actions, bindings, events, computed getters, effects, cleanup, and compiler-owned update plans. | Keep state writes inside documented action(handler) fields and use pnpm check before relying on a new shape. |
| Forms | Forms, nested Fields, value/checked/file bindings, built-in and Standard Schema validation, client submissions, canonical Node server actions, cancellation, and resume products. | Use defineForm() and field(); server execution requires the exact formData/signal callback and package capability. |
| Resources and server data | Canonical route-owned loader Resources, typed data/error codecs, Node bootstrap, public/private/no-store caching, cancellation, and reload resume. | Use loader<Data, Error>() with canonical route parameters and one admitted named package import. |
| Composition and resume | Slots, Context, form state, Resources, resumability artifacts, identity validation, and cold fallback are compiler products. | Deploy the complete build inventory; never edit generated runtime or resume files. |
| Application platform | File routes, layouts, document templates, metadata sidecars, global CSS, Tailwind input, imported assets, public files, and static output. | Use app/app.tsx, app/app.css, app/index.html, app/routes/, and public/ for new projects. |
| Tooling and release | Diagnostics, explain, compiler query products, Vite/testing adapters, Cloudflare Static Assets preparation, and schema-v3 Node execution. | Keep the framework, CLI, and editor extension on the same beta release train. |
Explicit boundaries
| Boundary | Current behavior |
|---|---|
| Arbitrary TypeScript | TypeScript acceptance alone does not prove compiler semantics. Unsupported forms produce a diagnostic instead of a runtime fallback. |
| Server execution | The generated Node host executes canonical Form-bound actions and canonical route-owned loaders. It is not a generic SSR, streaming, database, authentication, session, or infrastructure layer, and the Cloudflare static adapter rejects dynamic handoffs. |
| Packages and capabilities | Ordinary packages may supply erased build inputs. Current package Actions admit exact named-import terminal calls with documented primitive parameters, synchronous completion, or cancellable Promise<void>. Values entering compiler semantics and specialized integrations still require their capability-specific contracts; package internals are never inferred. |
| Historical projects | Presolve 0.1 compatibility is maintained for migration and documented separately. The current beta guides and scaffold are the source of truth for new work. |
Adopt the beta responsibly
- Pin every Presolve package to the same published beta version.
- Start from the canonical project layout and component examples in this guide.
- Run
pnpm check,pnpm build, and browser coverage for the lifecycles your application owns. - Inspect compiler diagnostics and emitted artifacts when changing structural or deployment behavior.
- Use a capability-specific server executor only when you have selected and operated one explicitly.
Include the exact package versions, a minimal project, compiler diagnostics, and the generated artifact or browser behavior that differs from this contract in GitHub Issues.