ESLint configuration for Turborepo monorepo projects with pre-configured rules and flat config support
npx @tessl/cli install tessl/npm-eslint-config-turbo@2.5.0ESLint Config Turbo provides a pre-configured ESLint configuration specifically designed for Turborepo monorepo projects. It extends the eslint-plugin-turbo plugin with recommended settings and includes both legacy (.eslintrc) and modern flat config (eslint.config.js) support.
npm install eslint-config-turbo --save-dev// In .eslintrc.js or similar
{
"extends": ["turbo"]
}import turboConfig from "eslint-config-turbo/flat";
export default [
...turboConfig,
// Other configuration
];For CommonJS flat config:
const turboConfig = require("eslint-config-turbo/flat");
module.exports = [
...turboConfig,
// Other configuration
];Add turbo to the extends section of your ESLint configuration:
{
"extends": ["turbo"]
}You can also configure the turbo rules:
{
"plugins": ["turbo"],
"rules": {
"turbo/no-undeclared-env-vars": [
"error",
{
"allowList": ["^ENV_[A-Z]+$"]
}
]
}
}Import and spread the turbo configuration:
import turboConfig from "eslint-config-turbo/flat";
export default [
...turboConfig,
// Other configuration
{
rules: {
"turbo/no-undeclared-env-vars": [
"error",
{
allowList: ["^ENV_[A-Z]+$"],
},
],
},
},
];Provides a legacy ESLint configuration object compatible with .eslintrc files and older ESLint setups.
/**
* Legacy ESLint configuration object that extends plugin:turbo/recommended
* Exported as CommonJS module.exports for compatibility with .eslintrc files
*/
const config = {
extends: ["plugin:turbo/recommended"]
};
module.exports = config;The configuration automatically includes:
plugin:turbo/recommended which provides Turborepo-specific linting rulesProvides an ESLint flat configuration array compatible with modern ESLint (v8.21.0+) flat config format.
import type { Linter } from "eslint";
import plugin from "eslint-plugin-turbo";
/**
* Flat ESLint configuration array for modern ESLint setups
* Exports a pre-configured array of ESLint flat config objects
*/
export default [
{
plugins: {
turbo: plugin,
},
rules: {
"turbo/no-undeclared-env-vars": "error",
},
},
] satisfies Array<Linter.FlatConfig>;The flat configuration includes:
turbo plugin registration from eslint-plugin-turboturbo/no-undeclared-env-vars rule set to "error" levelLinter.FlatConfig interface/**
* ESLint Linter configuration interface for flat config
* Imported from eslint package - contains configuration for plugins, rules, and other ESLint settings
*/
interface Linter.FlatConfig {
plugins?: Record<string, ESLint.Plugin>;
rules?: Record<string, any>;
settings?: Record<string, any>;
languageOptions?: {
ecmaVersion?: number;
sourceType?: "script" | "module";
globals?: Record<string, boolean>;
parser?: any;
parserOptions?: any;
};
files?: string[];
ignores?: string[];
// Additional ESLint flat config properties
}The primary rule enforced by this configuration prevents usage of undeclared environment variables in Turborepo contexts.
Default Configuration: "error"
Options: The rule accepts an options object with an allowList property for pattern-based exceptions:
interface NoUndeclaredEnvVarsOptions {
allowList?: string[]; // Array of regex patterns for allowed environment variables
}Usage Examples:
// Allow environment variables matching specific patterns
{
"turbo/no-undeclared-env-vars": [
"error",
{
"allowList": ["^ENV_[A-Z]+$", "^NEXT_PUBLIC_"]
}
]
}This rule ensures that all environment variables used in your Turborepo project are properly declared in the turbo.json configuration, helping maintain consistency across your monorepo.