Form Wire
API Reference

Core API

Core package exports and utilities

The @form-wire/core package is framework-agnostic. It handles schema introspection, form model creation, parsing, and server action creation.

Exports

createFormModel

Introspects a Zod schema into a FormModel:

import { createFormModel } from "@form-wire/core";

const model = createFormModel(schema, config);
// model.fields — FormField[]
// model.fieldMap — Record<string, FormField>

createAction

Creates a type-safe server action:

import { createAction } from "@form-wire/core";

export const myAction = createAction(schema, async (data) => {
  return { message: "Done" };
});

formError

Quick error response helper:

import { formError } from "@form-wire/core";

return formError({
  fieldErrors: {
    email: ["Already taken"],
  },
});

withMeta

Attach metadata to Zod schema nodes:

import { withMeta } from "@form-wire/core";

const schema = z.object({
  name: withMeta(z.string(), { label: "Name", placeholder: "Ada" }),
});

parseFormData

Parse FormData against a schema:

import { parseFormData } from "@form-wire/core";

const result = parseFormData(schema, formData, config);
if (result.success) {
  // result.data is typed
} else {
  // result.fieldErrors, result.formErrors
}

formatZodError

Convert Zod errors to field errors:

import { formatZodError } from "@form-wire/core";

const errors = formatZodError(zodError);
// Record<string, string[]>

Utility Functions

humanize

Converts camelCase/snake_case to human-readable labels:

humanize("firstName") // "First Name"
humanize("email_address") // "Email Address"

isScalarField

Checks if a field is a scalar (renderable as a single input):

isScalarField(field) // true for string, number, boolean, date, file

createLocalStorageDraftAdapter

Returns a DraftPersistenceAdapter backed by localStorage:

import { createLocalStorageDraftAdapter } from "@form-wire/react";

const adapter = createLocalStorageDraftAdapter();

createSessionStorageDraftAdapter

Same but backed by sessionStorage.

Types

Key types exported from @form-wire/core:

TypeDescription
FormFieldField metadata (name, kind, label, required, etc.)
FormModelArray of FormFields + fieldMap lookup
ActionState<T>Result type: success with data/message or failure with errors
FormFieldOptionSelect option: { label: string; value: string }
FormWireMetaField metadata: label, description, placeholder, component
SupportedFormSchemaZodObject or ZodDiscriminatedUnion
FormWireServerErrorTyped error class for server actions

On this page