docs/linting.md
We use OxLint for linting across the entire monorepo. OxLint is a single Rust binary that's 50-100x faster than ESLint, with zero Node.js dependencies at runtime.
.oxlintrc.json at the repo root handles all packages and appsFrom the root of the repo:
# Check for lint errors
pnpm check:lint
# Auto-fix lint errors
pnpm fix:lint
To lint a specific package:
pnpm turbo run check:lint --filter=@plane/ui
Install the OxLint extension for inline errors/warnings as you type.
The config applies to all TypeScript and JavaScript files across:
apps/web, apps/admin, apps/space, apps/livepackages/Ignored paths:
node_modules/, dist/, build/, .next/, .turbo/*.config.{js,mjs,cjs,ts})OxLint uses category-based configuration:
| Category | Level | What It Catches |
|---|---|---|
| correctness | error | Real bugs that will cause runtime errors |
| suspicious | warn | Code patterns that are likely mistakes |
| perf | warn | Performance anti-patterns |
Additional rule overrides:
react/prop-types off (TypeScript handles prop validation)no-unused-vars warns with _ prefix pattern ignoredOxLint supports eslint-disable comments, so existing inline suppressions continue to work.
// Single line
// eslint-disable-next-line no-unused-vars
const data = response;
// Block
/* eslint-disable no-unused-vars */
// ... code
/* eslint-enable no-unused-vars */
Please use sparingly - most warnings indicate real issues that should be fixed.
Lint-staged runs automatically on commit via Husky:
--deny-warnings)If the commit fails due to lint errors, fix them before committing.