Ask the next question at the right time.
Closed expressions control visibility and required state. Conditions read only fields already declared, so the form stays predictable and cycle-free.
- Schema forms

Solution · Forms
Build a multi-step intake, reveal fields when they matter, and keep drafts with storage your app controls. Explore the in-development builder and preview the form beside it.
Status: in development
Try this
Use Reset to return to the starting example.
Interactive preview
Fictional data · in-memory drafts · no network submissionChoose “In person” to reveal the visit step. Edit a field to exercise local autosave.
The sample form is ready. Drafts remain in memory for this page session.
The builder was released in @texuli/forms 0.18.0 (in development, pre-1.0).
2 fields · schema valid
2 fields in the authored schema.
Builder output updates its validated preview and schema JSON as you edit.
If the interactive demo cannot load, use the static preview above.
Use a closed schema with named field types, options and validation constraints.
Package: @texuli/forms
Compile the schema before rendering. Invalid members, expressions and field relationships produce issues.
Package: @texuli/forms
Mount SchemaForm with Texuli controls, accessible validation and multi-step navigation.
Package: @texuli/forms
Pass a host storage adapter for drafts and autosave. This demo keeps its sample draft in memory only.
Package: @texuli/forms
Use the in-development builder (released in 0.18.0) to arrange fields, edit settings and inspect schema JSON before adoption.
Package: @texuli/forms
Solution
Forms
Packages
@texuli/formsSchema, model, controls and host rendering are in development and published on npm; the builder was released in 0.18.0.Subpaths: . · ./model · ./controls · ./builder · ./hostBuilt on
texuli (Styled components)@texuli/core (Texels and the URL policy)@texuli/drag (Drag engine)Build with Forms
pnpm add @texuli/[email protected]import { validateFormSchema } from '@texuli/forms/model';
const result = validateFormSchema({
title: 'Contact example.com',
fields: [
{ name: 'email', type: 'email', label: 'Email address', required: true },
],
});
if (result.ok) {
console.log(result.form.schema.title);
} else {
console.error(result.issues);
}import { createMemoryDrafts } from '@texuli/forms/model';
import { SchemaForm } from '@texuli/forms';
const drafts = { storage: createMemoryDrafts(), key: 'intake-preview' };
// Pass {form, drafts} to SchemaForm. Your app can supply another storage adapter.Verified by tests/e2e/site-solution-forms.spec.ts
Start with a closed schema and mount SchemaForm from the forms package.
Browse the package example for supported form field types.
A host can validate a schema before rendering it. The builder is a developer-facing authoring tool; it does not execute generated code or send form submissions.
@texuli/forms/model@texuli/forms/model: In developmentClosed form schema validation and controller logic, available in the in-development package.
@texuli/forms/builder@texuli/forms/builder: PlannedVisual field authoring and preview; present in this branch and planned for the next release.
Svelte 5 packages published on npm (pre-1.0).
Kotlin Multiplatform renderer on the JVM, built in this repository.
Native renderer target.
Native renderer target.
Schema-driven forms with conditions, steps and drafts.

