Skip to main content

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

options
OptionsConfig
default:"{}"
Configuration options for generating ESLint configurations.
userConfigs
Array<TypedFlatConfigItem | TypedFlatConfigItem[]>
default:"[]"
Extra user configurations to be merged with the generated configurations. Supports:
  • FlatConfigComposer instances
  • Linter.Config[] arrays
  • TypedFlatConfigItem objects
  • Arrays of TypedFlatConfigItem

Returns

config
FlatConfigComposer<TypedFlatConfigItem, ConfigNames>
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>;
};

Build docs developers (and LLMs) love