Composable Blocks
Mix and match from 10 config blocks. Node, React, Tauri, VSCode extensions — pick what you need, skip what you don’t.
Without Uglier — sprawling JSON config
// .eslintrc.json — 200+ lines of this{ "extends": ["eslint:recommended", "prettier"], "plugins": ["@stylistic"], "rules": { "semi": ["error", "never"], "quotes": ["error", "double"], "indent": ["error", 2], "@stylistic/arrow-parens": ["error", "as-needed"], "@stylistic/brace-style": ["error", "1tbs"], "@stylistic/keyword-spacing": ["error", { "before": true, "after": false, "overrides": { "return": { "after": true } } }], // ... another 50 rules ... }}// And you still need prettier.config.js too.With Uglier — composable, readable, done
// eslint.config.js — that's it, that's the whole fileimport uglify from "@gesslar/uglier"
export default [ ...uglify({ with: [ "lints-js", "lints-jsdoc", "node", ] })]Composable Blocks
Mix and match from 10 config blocks. Node, React, Tauri, VSCode extensions — pick what you need, skip what you don’t.
No Prettier Required
All formatting handled by ESLint alone. No conflicting tools, no extra configs, no arguing about semicolons.
Flat Config Native
Built for ESLint v9+ flat configs from the ground up. No legacy compatibility layers or .eslintrc baggage.
CLI Setup
One command to install, init, add, or remove configs. Detects your package manager automatically.
Fully Customizable
Override indent, max line length, file patterns, and individual rules per config block. Opinionated defaults, flexible escape hatches.
TypeScript Ready
Full TypeScript definitions generated from JSDoc. Autocomplete and type checking for all options.
Quick Start
Configs
Customization
Reference
Nerds