Form & field state
Track isDirty, isTouched, isValid, isSubmitting, and isSubmitted at both form and field level.
Lightweight form state, validation, and submission for Alpine.js

<script defer src="https://unpkg.com/alpine-forms/dist/alpine.forms.min.js"></script>
<script defer src="https://unpkg.com/alpinejs"></script><div
x-data="{
form: Alpine.Form(
{ email: '', password: '' },
{
config: {
validations: {
email: (value) => !value ? { message: 'Email is required' } : undefined,
password: (value) => value.length < 6 ? { message: 'Min 6 characters' } : undefined,
}
}
}
)
}"
>
<form @submit.prevent="form.submit(data => alert(JSON.stringify(data)))">
<input x-register:form="form.field('email')" type="email" placeholder="Email" />
<span
x-show="!form.getFieldState('email').isValid"
x-text="form.getFieldState('email').error"
></span>
<input x-register:form="form.field('password')" type="password" placeholder="Password" />
<span
x-show="!form.getFieldState('password').isValid"
x-text="form.getFieldState('password').error"
></span>
<button type="submit">Submit</button>
</form>
</div>