ESLint plugin that adds custom linting rules to enforce best practices when using Zod
💼 Configurations enabled in.
✅ Set in the recommended configuration.
🔧 Automatically fixable by the --fix CLI option.
💡 Manually fixable by editor suggestions.
| Name | Description | 💼 | 🔧 | 💡 |
|---|---|---|---|---|
| array-style | Enforce consistent Zod array style | ✅ | 🔧 | |
| consistent-import-source | Enforce consistent source from Zod imports | |||
| no-any | Disallow usage of z.any() in Zod schemas | ✅ | 💡 | |
| no-empty-custom-schema | Disallow usage of z.custom() without arguments | ✅ | ||
| no-throw-in-refine | Disallow throwing errors directly inside Zod refine callbacks | ✅ | ||
| prefer-meta | Enforce usage of .meta() over .describe() | ✅ | 🔧 | |
| prefer-meta-last | Enforce .meta() as last method | ✅ | 🔧 | |
| prefer-namespace-import | Enforce importing zod as a namespace import (import * as z from 'zod') | ✅ | 🔧 | |
| prefer-strict-object | Enforce usage of .strictObject() over .object() and/or .looseObject() | |||
| require-error-message | Enforce that custom refinements include an error message | ✅ | 🔧 | |
| require-schema-suffix | Require schema suffix when declaring a Zod schema | ✅ | 🔧 |
npm i --save-dev eslint eslint-plugin-zod-xyarn add --dev eslint eslint-plugin-zod-xpnpm add --save-dev eslint eslint-plugin-zod-x// eslint.config.js
import { defineConfig } from 'eslint/config';
import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';
import eslintPluginZodX from 'eslint-plugin-zod-x';
export default defineConfig(
eslint.configs.recommended,
tseslint.configs.recommendedTypeChecked,
eslintPluginZodX.configs.recommended,
);