zayne()
Construct an array of ESLint flat config items with automatic plugin detection and intelligent defaults.import { zayne } from "@zayne-labs/eslint-config";
export default zayne(options, ...userConfigs);
Parameters
Configuration options for generating ESLint configurations.
Show Core Options
Show Core Options
Specify application type to adjust strictness of rules.
Controls whether configs enabled by defaults should stay enabled.
Automatically rename plugins in the config for consistency.
Additional extensions for components (e.g.,
['vue']).Additional extensions for components that should be type aware.
Extend the global ignores. Pass an array to extend ignores, or a function to modify defaults.
Show Language Support
Show Language Support
Core JavaScript rules. Cannot be disabled.
overrides: Override specific rule configurations
Enable TypeScript support. Auto-detects based on dependencies.When passing an object:
tsconfigPath: Path to tsconfig.json for type-aware rulesfiles: Glob patterns for TypeScript filesfilesTypeAware: Patterns for type-aware filesignoresTypeAware: Patterns to exclude from type checkingerasableOnly: Enable erasable syntax only rulesstylistic: Enable stylistic TypeScript rulesoverrides: Override specific rule configurations
Enable JSX related rules.When passing an object:
a11y: Enable JSX accessibility rules (requireseslint-plugin-jsx-a11y)overrides: Override specific rule configurations
Show Framework Support
Show Framework Support
Enable React rules. Auto-detects based on dependencies.Requires:
@eslint-react/eslint-plugineslint-plugin-react-hookseslint-plugin-react-refresheslint-plugin-react-you-might-not-need-an-effect
react: Enable default React rules (default:true)compiler: Enable React compiler rules (default:true)refresh: Enable react-refresh/HMR rules (default:true)youMightNotNeedAnEffect: Enable optimization rules (default:true)nextjs: Enable Next.js rules (default: auto-detect)typescript: Enable TypeScript rules for Reactfiles: Glob patterns for React filesfilesTypeAware: Patterns for type-aware React filesignoresTypeAware: Patterns to exclude from type checkingoverrides: Override specific rule configurations
Enable Vue support.Requires:
eslint-plugin-vuevue-eslint-parser
vueVersion: Vue version (2 or 3, default:3)sfcBlocks: Enable linting for Vue SFC blocks (default:true)typescript: Enable TypeScript rules for Vuestylistic: Enable stylistic rulesfiles: Glob patterns for Vue filesoverrides: Override specific rule configurations
Enable Solid support.Requires:
eslint-plugin-solid
typescript: Enable TypeScript rules for Solidfiles: Glob patterns for Solid filesoverrides: Override specific rule configurations
Enable Astro support.Requires:
eslint-plugin-astroastro-eslint-parser
typescript: Enable TypeScript rules for Astrofiles: Glob patterns for Astro filesoverrides: Override specific rule configurations
Show Style & Formatting
Show Style & Formatting
Enable stylistic rules.When passing an object:
indent: Number of spaces for indentationquotes: Quote style ('single','double', or'backtick')jsx: Enable JSX stylistic rulesoverrides: Override specific rule configurations
Enable perfectionist sorting rules.When passing an object:
overrides: Override specific rule configurations
Show File Format Support
Show File Format Support
Enable JSONC support.When passing an object:
files: Glob patterns for JSON filesoverrides: Override specific rule configurations
Enable YAML support.When passing an object:
files: Glob patterns for YAML filesstylistic: Enable stylistic rulesoverrides: Override specific rule configurations
Enable TOML support.When passing an object:
files: Glob patterns for TOML filesstylistic: Enable stylistic rulesoverrides: Override specific rule configurations
Enable linting for code snippets in Markdown.When passing an object:
componentExts: Additional component extensions to lintfiles: Glob patterns for Markdown filesoverrides: Override specific rule configurations
Show Code Quality
Show Code Quality
Enable linting rules for imports.When passing an object:
typescript: Enable TypeScript import rulesstylistic: Enable stylistic import rulesoverrides: Override specific rule configurations
Enable linting for Node.js.When passing an object:
type: Application typesecurity: Enable eslint-plugin-security (default:false)overrides: Override specific rule configurations
Enable eslint-plugin-unicorn rules.When passing an object:
type: Application typeoverrides: Override specific rule configurations
Enable JSDoc linting.When passing an object:
stylistic: Enable stylistic JSDoc rulesfiles: Glob patterns for files with JSDocoverrides: Override specific rule configurations
Enable linting rules for ESLint comments.When passing an object:
type: Application typeoverrides: Override specific rule configurations
Show Tools & Utilities
Show Tools & Utilities
Enable gitignore support to automatically ignore files.When passing an object, see eslint-config-flat-gitignore options.
Enable pnpm workspace/catalogs support. Auto-detects based on project usage.Requires:
eslint-plugin-pnpm
catalogs: Require catalogs usage (default:false)json: Enable linting for package.json (default:true)yaml: Enable linting for pnpm-workspace.yaml (default:true)sort: Sort entries in pnpm-workspace.yaml (default:false)overrides: Override specific rule configurations for json/yaml
Enable dependency rules via eslint-plugin-depend.Requires:
eslint-plugin-depend
files: Glob patterns for files to checkoverrides: Override specific rule configurations
Show Framework-Specific Tools
Show Framework-Specific Tools
Enable Expo support.Requires:
eslint-plugin-expo
overrides: Override specific rule configurations
Enable TanStack Query/Router support.When passing an object:
query: Enable TanStack Query linting (requires@tanstack/eslint-plugin-query)router: Enable TanStack Router linting (requires@tanstack/eslint-plugin-router)overrides: Override specific rule configurations
Enable TailwindCSS support via eslint-plugin-better-tailwindcss.Requires:
eslint-plugin-better-tailwindcss
settings.attributes: Attribute names containing Tailwind classessettings.callees: Function names whose arguments should be lintedsettings.tags: Template literal tag names to lintsettings.variables: Variable names whose initializer should be lintedsettings.entryPoint: Path to CSS-based Tailwind config entry filesettings.tailwindConfig: Path to tailwind.config.js (v3 only)settings.tsconfig: Path to tsconfig.json for path aliasesoverrides: Override specific rule configurations
Extra user configurations to be merged with the generated configurations. Supports:
FlatConfigComposerinstancesLinter.Config[]arraysTypedFlatConfigItemobjects- Arrays of
TypedFlatConfigItem
Returns
A composed ESLint flat config that can be exported directly or further customized using the FlatConfigComposer API.
Usage Examples
Basic Usage
eslint.config.js
import { zayne } from "@zayne-labs/eslint-config";
export default zayne();
With Options
eslint.config.js
import { zayne } from "@zayne-labs/eslint-config";
export default zayne({
type: "lib",
typescript: true,
react: true,
stylistic: {
indent: 2,
quotes: "single",
},
});
Type-Aware TypeScript
eslint.config.js
import { zayne } from "@zayne-labs/eslint-config";
export default zayne({
typescript: {
tsconfigPath: "./tsconfig.json",
},
});
With Custom Configs
eslint.config.js
import { zayne } from "@zayne-labs/eslint-config";
export default zayne(
{
react: true,
typescript: true,
},
{
files: ["**/*.tsx"],
rules: {
"react-x/no-clone-element": "error",
},
}
);
Multiple Frameworks
eslint.config.js
import { zayne } from "@zayne-labs/eslint-config";
export default zayne({
typescript: true,
react: {
nextjs: true,
compiler: true,
},
tailwindcssBetter: {
settings: {
callees: ["cn", "clsx", "cva"],
},
},
});
Extending with Composer
eslint.config.js
import { zayne } from "@zayne-labs/eslint-config";
export default zayne({
react: true,
})
.append({
files: ["**/*.test.ts"],
rules: {
"no-console": "off",
},
})
.override("zayne/react/official/rules", {
rules: {
"react-hooks/exhaustive-deps": "error",
},
});
Type Definitions
type OptionsConfig = {
// Core options
type?: "app" | "app-strict" | "lib" | "lib-strict";
withDefaults?: boolean;
autoRenamePlugins?: boolean;
componentExts?: string[];
componentExtsTypeAware?: string[];
ignores?: string[] | ((originals: string[]) => string[]);
// Language support
javascript?: OptionsOverrides;
typescript?: boolean | TypeScriptOptions;
jsx?: boolean | JSXOptions;
// Framework support
react?: boolean | ReactOptions;
vue?: boolean | VueOptions;
solid?: boolean | SolidOptions;
astro?: boolean | AstroOptions;
// Style & formatting
stylistic?: boolean | StylisticOptions;
perfectionist?: boolean | OptionsOverrides;
// File formats
jsonc?: boolean | FileOptions;
yaml?: boolean | FileOptions;
toml?: boolean | FileOptions;
markdown?: boolean | MarkdownOptions;
// Code quality
imports?: boolean | ImportsOptions;
node?: boolean | NodeOptions;
unicorn?: boolean | UnicornOptions;
jsdoc?: boolean | JSDocOptions;
comments?: boolean | CommentsOptions;
// Tools & utilities
gitignore?: boolean | FlatGitignoreOptions;
pnpm?: boolean | PnpmOptions;
depend?: boolean | DependOptions;
// Framework-specific tools
expo?: boolean | OptionsOverrides;
tanstack?: boolean | TanstackOptions;
tailwindcssBetter?: boolean | TailwindCSSBetterOptions;
};
type OptionsOverrides = {
overrides?: Record<string, Linter.RuleEntry | undefined>;
};
