Skip to main content

Remote vs Client Forms

When to Use

Remote - Database mutations, server-side validation, redirects after submit.

Client - Local state, filters, search forms, multi-step wizards.

Comparison

RemoteClient
Importform from $app/serverZod schema only
Data bindingform.fields.set()bind:value
SubmissionServer actiononsubmit callback
ValidationServer-sideClient-side
RedirectsBuilt-inManual

Examples

Remote

<script lang="ts">
import { TypedForm } from '@repo/form'
import { createUserForm, userSchema } from './user.remote'
</script>

<TypedForm.Remote form={createUserForm} schema={userSchema} />

Client

<script lang="ts">
import { TypedForm } from '@repo/form'
import { z } from 'zod/v4'

const schema = z.object({ name: z.string() })
let value = $state(TypedForm.getInitial(schema))
</script>

<TypedForm.Client bind:value {schema} onsubmit={() => console.log(value)} />