DocumentsFormisch
Qwik Adapter
Qwik Adapter
Type
Topic
Status
Published
Created
Jul 13, 2026
Updated
Jul 13, 2026
Created by
Dosu Bot
Updated by
Dosu Bot

@formisch/qwik Adapter#

@formisch/qwik is the Qwik-specific adapter for Formisch — a schema-first, headless form library with a framework-agnostic core . It manages form state and validation using Valibot schemas and is type-safe end-to-end.

Install:

npm install valibot @formisch/qwik

The adapter lives at frameworks/qwik/ in the monorepo. Its package.json declares the package as @formisch/qwik with entry point ./dist/index.qwik.js. The public API is re-exported from three sources via src/index.ts: shared types from @formisch/core/qwik, methods from @formisch/methods/qwik, and Qwik-specific components and hooks.

Signal-Based Reactivity#

Formisch achieves native reactivity without a runtime abstraction layer. Instead of wrapping framework signals, it swaps them in at build time via a rolldown plugin that redirects @formisch/core imports to the appropriate index.{framework}.ts file .

For Qwik, the bridge lives at packages/core/src/framework/index.qwik.ts. It simply re-exports createSignal and untrack from @qwik.dev/core , meaning form state runs on native Qwik signals with no overhead. Two additional details:

  • batch is a no-op in Qwik because Qwik handles batching natively .
  • A framework: 'qwik' constant identifies the active framework at the module level .

Core API#

useForm$#

The primary entry point. It creates a reactive form store from a Valibot schema . The config is passed as a factory function QRL:

const loginForm = useForm$(() => ({ schema: LoginSchema }));

⚠️ Breaking change in v0.10.0: the config was changed from an object to a factory function. Update all calls from useForm$({ ... }) to useForm$(() => ({ ... })) .

Internally, useFormQrl uses useConstant to create the store once and wraps boolean state as createComputed$ signals (isTouched, isEdited, isDirty, isValid) so Qwik's fine-grained reactivity kicks in at field level . The exported useForm$ is created via implicit$FirstArg to enable Qwik's QRL lazy-loading.

Other Hooks & Components#

ExportPurposeSource
useFieldReactive store for a single field
useFieldArrayReactive store for dynamic field arrays
<Form />Thin wrapper over <form> handling submit/validation
<Field />Connects an input to field state via render$ prop
<FieldArray />Renders dynamic array fields

Methods from @formisch/methods (e.g., reset, validate, setInput, getErrors) are also re-exported and can be used with any form store .

Full API reference: formisch.dev/qwik/api

Peer Dependencies & Compatibility#

DependencyRequired Version
@qwik.dev/core>= 2 (Qwik 2.0)
valibot^1.4.1
typescript>= 5 (optional)

The package is developed against @qwik.dev/core@2.0.0-beta.5 . The Node.js engine constraint is ^18.17.0 || ^20.3.0 || >=21.0.0 .

For TypeScript users, enable "strict": true in tsconfig.json; minimum supported version is 5.0.2 .

Versioning#

@formisch/qwik uses framework-specific git tags of the form v{version}-qwik (e.g., v0.14.0-qwik, v1.0.0-rc.0-qwik). Each framework adapter in the monorepo has its own independent version progression — for example, on June 22, 2026, Qwik was at v0.14.0 while other adapters were at lower minor versions.

The current release is v1.0.0-rc.0 (June 23, 2026) . All adapter changelogs are maintained at frameworks/qwik/CHANGELOG.md.

Qwik Adapter | Dosu