npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@mfgomess/alpine-zod-validation

v1.1.11

Published

A simple form validation plugin for Alpine.js using Zod

Readme

Alpine.js Zod Validation

🚀 A powerful integration between Alpine.js and Zod for seamless form validation. Define validation schemas using Zod and apply them directly in your Alpine.js components with minimal effort.

📋 Table of Contents

🚀 Installation

NPM + Bundler

npm install @mfgomess/alpine-zod-validation

Import and initialize:

import Alpine from 'alpinejs';
import { zValidation } from '@mfgomess/alpine-zod-validation';

window.Alpine = Alpine;
Alpine.plugin(zValidation);
Alpine.start();

CDN

<script type="module" defer src="https://unpkg.com/@mfgomess/alpine-zod-validation/dist/cdn.js"></script>
<script src="//unpkg.com/alpinejs" defer></script>

🚦 Quick Start

Here's a simple example to get you started:

<form
    x-data="{
        email: '',
        password: '',
        zSchema: $z.object({
            email: $z.string().email(),
            password: $z.string().min(8)
        })
    }"
    x-zvalidation
    @submit.prevent="zValidate() && $event.target.submit()"
>
    <input 
        type="email" 
        x-model="email"
        :class="{ 'error': zIsInvalid('email') }"
    />
    <span x-show="zIsInvalid('email')" x-text="zFirstErrorFor('email')"></span>

    <input 
        type="password" 
        x-model="password"
        :class="{ 'error': zIsInvalid('password') }"
    />
    <span x-show="zIsInvalid('password')" x-text="zFirstErrorFor('password')"></span>

    <button type="submit" :disabled="zHasErrors()">Submit</button>
</form>

🎯 Core Concepts

Directives

| Directive | Description | |-----------|-------------| | x-zvalidation | Main directive to enable validation on a component | | .listen | Modifier to validate on specific events (e.g., x-zvalidation.listen="change") | | .reactive | Enables real-time validation after first error | | .entangled | Syncs with Livewire validation errors |

Magic Properties

  • $z: Direct access to Zod for schema definition

📚 API Reference

Validation Methods

| Method | Parameters | Return Type | Description | |--------|------------|-------------|-------------| | zValidate() | - | boolean | Validates entire form against schema. Returns true if valid. | | zValidateOnly(field) | string | boolean | Validates a single field. Returns true if valid. | | zIsFormValid() | - | boolean | Silently Checks if entire form is currently valid without triggering errors (usefull to enable/disable submit buttons). | | zReset() | - | void | Resets all validation state. |

Error Handling

| Method | Parameters | Return Type | Description | |--------|------------|-------------|-------------| | zIsValid(field) | string | boolean | Checks if field is valid (after validation). | | zIsInvalid(field) | string | boolean | Checks if field has validation errors. | | zFirstErrorFor(field) | string | string\|null | Returns first error message for field. | | zGetErrorsFor(field) | string | string[] | Returns all error messages for field. | | zAllErrors() | - | Object | Returns all validation errors. | | zHasErrors() | - | boolean | Checks if form has any errors. | | zAllSuccesses() | - | Object | Returns validation success state for all fields. |

🔥 Advanced Features

Event-Based Validation

Validate fields on specific events:

<form
    x-zvalidation.listen="change"
    x-data="{ /* ... */ }"
>
    <!-- Validates on change event -->
</form>

Reactive Validation

Enable real-time validation after first error:

<form
    x-zvalidation.listen.reactive="change"
    x-data="{ /* ... */ }"
>
    <!-- Switches to input event validation after first error -->
</form>

Livewire Integration

Sync validation with Livewire components:

<form
    x-zvalidation.entangled
    x-data="{ 
        name: @entangle('clientData.name'),
        zSchema: $z.object({ 
            name: $z.string().min(3)
        })
    }"
>
    <!-- Syncs with Livewire validation -->
</form>

🤝 Contributing

We welcome contributions! Please feel free to submit a Pull Request.

📄 License

MIT Licensed. Enjoy building awesome forms!