falcondev-form

Installation
SKILL.md

@falcondev-oss/form

A framework-agnostic form-state library on top of @vue/reactivity. You give it a Standard Schema (zod v4, arktype, …) and reactive sourceValues; it gives you a reactive form handle with a tree of field accessors.

Three published packages — pick the one for the runtime, never import -core directly in app code:

Package Entry Adds
@falcondev-oss/form-core useFormCore, all types, /reactive helpers engine; use directly only outside React/Vue
@falcondev-oss/form-react useForm, useField, FormFieldMemo React re-render integration, field.model = {value,onUpdate}
@falcondev-oss/form-vue useForm, useFormHandles field.model writable computed (v-model)

useForm from the framework package wraps useFormCore — same options, same handle. Everything below is identical across frameworks except field binding and re-render (see reference/frameworks.md).

Two ideas that explain everything

  1. Accessors are lazy paths; $use() materializes. form.fields.address.city is just a typed path proxy — no field object exists yet. Calling .$use() creates (and caches) the actual reactive FormField. Navigate with dot/.at(), then .$use() at the leaf you bind.

  2. Form data is NullableDeep. While editing, every value can be null — a half-filled form has nulls everywhere. So form.data, field.value, and accessor types are the schema's input type made deeply nullable (objects → T | null, arrays → (T|null)[] | null). The validated output type (non-null) only appears in submit({ values }). Write UI against nullable types; trust submit for clean data.

Installs
32
GitHub Stars
2
First Seen
Jul 20, 2026
falcondev-form — falcondev-oss/skills