Guide

Integrations

Ready-to-copy setup guides for popular frameworks. Quick start: run npx eslint-plugin-ai-guardrails init to auto-generate configs.


Vite + React + TypeScript

Use vite-plugin-checker to surface ESLint violations in both the terminal and browser overlay during development.

eslint.config.js
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import aiGuardrails from 'eslint-plugin-ai-guardrails';

export default [
  { ignores: ['dist', 'build', 'coverage', 'node_modules'] },
  js.configs.recommended,
  ...tseslint.configs.recommended,
  aiGuardrails.flatConfigs.recommended
];
vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import checker from 'vite-plugin-checker';

export default defineConfig({
  plugins: [
    react(),
    checker({
      typescript: true,
      eslint: {
        lintCommand: 'eslint "./src/**/*.{ts,tsx}" --max-warnings 0'
      }
    })
  ]
});

Next.js + TypeScript

Next.js 13+ supports ESLint v9 flat config natively.

eslint.config.mjs
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import aiGuardrails from 'eslint-plugin-ai-guardrails';

export default [
  { ignores: ['.next', 'out', 'node_modules'] },
  js.configs.recommended,
  ...tseslint.configs.recommended,
  aiGuardrails.flatConfigs.recommended
];

NestJS + TypeScript

NestJS projects typically have a src/ directory with decorators and dependency injection patterns. AI assistants tend to generate oversized service files — guardrails help keep them modular.

eslint.config.mjs
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import aiGuardrails from 'eslint-plugin-ai-guardrails';

export default [
  { ignores: ['dist', 'node_modules'] },
  js.configs.recommended,
  ...tseslint.configs.recommended,
  aiGuardrails.flatConfigs.recommended,
  {
    files: ['**/*.ts'],
    rules: {
      'ai-guardrails/max-file-lines': ['warn', { max: 250 }],
      'ai-guardrails/max-function-lines': ['warn', { max: 40 }]
    }
  }
];

Express + TypeScript

Express projects using ESLint v8 can use the legacy .eslintrc config.

.eslintrc.json
{
  "parser": "@typescript-eslint/parser",
  "plugins": ["ai-guardrails"],
  "extends": ["plugin:ai-guardrails/recommended"],
  "rules": {
    "ai-guardrails/max-file-lines": ["warn", { "max": 300 }],
    "ai-guardrails/max-function-lines": ["warn", { "max": 50 }],
    "ai-guardrails/no-orphan-todos": "error",
    "ai-guardrails/no-ai-obvious-comments": "warn"
  }
}

Migrating to ESLint v9? Replace .eslintrc.json with an eslint.config.js that uses aiGuardrails.flatConfigs.recommended.


Elysia / Hono / Bun + TypeScript

Bun-based backends (Elysia, Hono) work with ESLint v9 flat config.

eslint.config.js
import aiGuardrails from 'eslint-plugin-ai-guardrails';
import tseslint from 'typescript-eslint';

export default [
  { ignores: ['dist', 'node_modules'] },
  ...tseslint.configs.recommended,
  aiGuardrails.flatConfigs.recommended
];

SvelteKit + TypeScript

eslint.config.js
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import aiGuardrails from 'eslint-plugin-ai-guardrails';

export default [
  { ignores: ['.svelte-kit', 'build', 'node_modules'] },
  js.configs.recommended,
  ...tseslint.configs.recommended,
  aiGuardrails.flatConfigs.recommended
];

Note: ai-guardrails rules only apply to .ts and .tsx files. Svelte component files (.svelte) are not linted by this plugin.


Monorepo (Turborepo / pnpm / npm workspaces)

Install eslint-plugin-ai-guardrails in each workspace package that runs ESLint, not just the root.

Terminal
# Run inside each package:
npx eslint-plugin-ai-guardrails init
Root package.json (Turborepo)
{
  "scripts": {
    "lint": "turbo run lint",
    "typecheck": "turbo run typecheck",
    "build": "turbo run build"
  }
}

CI Integration

GitHub Actions

.github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - run: npm run lint
      - run: npm run typecheck
      - run: npm test

Pre-commit Hook (Husky + lint-staged)

{
  "lint-staged": {
    "*.{ts,tsx,mts,cts}": "eslint --max-warnings 0"
  }
}