@ver0/eslint-config
v1.7.1
Published
ESLint configs used in all ver0 projects
Maintainers
Readme
✨ What's Included
A collection of modular ESLint configs — import only what you need and compose them with defineConfig().
- JavaScript — base rules, import sorting, unicorn, promise, ESLint comments
- TypeScript — type-aware linting via XO TypeScript config
- React — JSX, hooks, and import rules
- Node.js — Node globals and
eslint-plugin-nrules - Browser — browser globals and restricted globals
- JSON —
.json,.jsonc,.json5linting - Markdown — Markdown linting
- Svelte — Svelte component and runes module linting
- Vitest — test file rules
- Prettier — formatting integration
🚀 Installation
yarn add -D @ver0/eslint-config eslintEach config requires its own peer dependencies — see Available Configs below.
📖 Usage
Import the configs you need and compose them with defineConfig():
// eslint.config.js
import {defineConfig} from 'eslint/config';
import javascript from '@ver0/eslint-config/javascript.js';
import node from '@ver0/eslint-config/node.js';
import json from '@ver0/eslint-config/json.js';
import markdown from '@ver0/eslint-config/markdown.js';
import prettier from '@ver0/eslint-config/prettier.js';
export default defineConfig(javascript, node, ...json, markdown, prettier);Note: The JSON config exports an array of 3 configs (JSON, JSONC, JSON5), so spread it with
...json.
📦 Available Configs
Each config is a standalone module. Import it to enable, skip it to disable — no options object needed. If the required peer dependencies are not installed, you'll get a clear error listing exactly what's missing.
JavaScript — base rules, import sorting, unicorn, promise, ESLint comments. Always include this one — other configs build on top of it.
yarn add -D @eslint/js @eslint-community/eslint-plugin-eslint-comments eslint-plugin-import eslint-plugin-promise eslint-plugin-unicorn eslint-plugin-no-use-extend-native eslint-config-xoTypeScript — type-aware linting rules. Also exports
typescriptUnsafeto disable strict type-safety rules.yarn add -D eslint-config-xo-typescript typescriptReact — React, JSX, and hooks rules.
yarn add -D eslint-plugin-import eslint-config-xo-reactNode.js — Node.js globals and
eslint-plugin-nrules.yarn add -D globals eslint-plugin-nBrowser — browser globals and restricted globals (prevents accidental use of confusing browser globals like
event,name, etc.).yarn add -D globals confusing-browser-globalsJSON — linting for
.json,.jsonc, and.json5files. Exports an array of 3 configs — spread it with...jsonindefineConfig().yarn add -D @eslint/jsonMarkdown — Markdown linting.
yarn add -D @eslint/markdownSvelte — Svelte component and runes module linting via
eslint-plugin-svelte. Exports an array of configs — spread it with...svelteindefineConfig().yarn add -D eslint-plugin-svelteVitest — rules for test and benchmark files (
*.test.*,*.benchmark.*).yarn add -D @vitest/eslint-pluginPrettier — formatting integration. Include this last so it overrides conflicting rules.
yarn add -D eslint-plugin-prettier eslint-config-prettier prettier
🌟 Common Configurations
Node.js API project:
// eslint.config.js
import {defineConfig} from 'eslint/config';
import javascript from '@ver0/eslint-config/javascript.js';
import typescript from '@ver0/eslint-config/typescript.js';
import node from '@ver0/eslint-config/node.js';
import json from '@ver0/eslint-config/json.js';
import markdown from '@ver0/eslint-config/markdown.js';
import vitest from '@ver0/eslint-config/vitest.js';
import prettier from '@ver0/eslint-config/prettier.js';
export default defineConfig(javascript, typescript, node, ...json, markdown, vitest, prettier);React web application:
// eslint.config.js
import {defineConfig} from 'eslint/config';
import javascript from '@ver0/eslint-config/javascript.js';
import typescript from '@ver0/eslint-config/typescript.js';
import react from '@ver0/eslint-config/react.js';
import browser from '@ver0/eslint-config/browser.js';
import json from '@ver0/eslint-config/json.js';
import vitest from '@ver0/eslint-config/vitest.js';
import prettier from '@ver0/eslint-config/prettier.js';
export default defineConfig(javascript, typescript, react, browser, ...json, vitest, prettier);SvelteKit application:
// eslint.config.js
import {defineConfig} from 'eslint/config';
import javascript from '@ver0/eslint-config/javascript.js';
import typescript from '@ver0/eslint-config/typescript.js';
import svelte from '@ver0/eslint-config/svelte.js';
import browser from '@ver0/eslint-config/browser.js';
import json from '@ver0/eslint-config/json.js';
import vitest from '@ver0/eslint-config/vitest.js';
import prettier from '@ver0/eslint-config/prettier.js';
export default defineConfig(javascript, typescript, ...svelte, browser, ...json, vitest, prettier);🎨 Prettier Configuration
This package also provides an opinionated default Prettier configuration that you can extend from.
// .prettierrc.js
import ver0Config from '@ver0/eslint-config/.prettierrc.js';
export default {
...ver0Config,
// Override any settings if needed
// printWidth: 100,
};⚙️ EditorConfig
For consistent formatting across different editors, you can copy our .editorconfig that is aligned with our Prettier
configuration:
# .editorconfig
[*]
indent_style = tab
tab_width = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120
[*.yml]
indent_style = space
indent_size = 2🛠️ Troubleshooting
Rules conflicting with your existing setup? You can override specific rules by adding a config after ours:
// eslint.config.js
import {defineConfig} from 'eslint/config';
import javascript from '@ver0/eslint-config/javascript.js';
import node from '@ver0/eslint-config/node.js';
import prettier from '@ver0/eslint-config/prettier.js';
export default defineConfig(javascript, node, prettier, {
rules: {
'some-rule': 'off', // Override any rule
},
});