Files
upstream-plane/docs/linting.md
upstream-mirror 23059a1de3
Some checks failed
CodeQL / Analyze (javascript) (push) Failing after 16s
CodeQL / Analyze (python) (push) Failing after 3s
i18n sync check / check:sync (push) Failing after 3s
React Doctor / react-doctor (push) Failing after 16s
Branch Build CE / Build-Push Admin Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Admin Manifest (push) Has been cancelled
Branch Build CE / Build-Push Web Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Web Manifest (push) Has been cancelled
Branch Build CE / Build-Push Space Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Proxy Manifest (push) Has been cancelled
Branch Build CE / Merge Space Manifest (push) Has been cancelled
Branch Build CE / Prepare AIO Assets (push) Has been cancelled
Branch Build CE / Build Setup (push) Has been cancelled
Branch Build CE / Build-Push Live Collaboration Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge Live Collaboration Manifest (push) Has been cancelled
Branch Build CE / Build-Push API Server Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge API Server Manifest (push) Has been cancelled
Branch Build CE / Build-Push Proxy Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Build-Push AIO Docker Image (${{ matrix.arch }}) (push) Has been cancelled
Branch Build CE / Merge AIO Manifest (push) Has been cancelled
Branch Build CE / Upload Build Assets (push) Has been cancelled
Branch Build CE / Build Release (push) Has been cancelled
snapshot of https://github.com/makeplane/plane.git @ d868349a55de79979eb8b98701bf1702c67ad634 (2026-09-15)
2026-09-15 15:14:58 +05:00

2.7 KiB

Linting in Plane - How It Works

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.

Key Points

  1. Single Root Config - One .oxlintrc.json at the repo root handles all packages and apps
  2. No Build Required - OxLint doesn't need TypeScript build artifacts, so lint runs independently of build
  3. Plugin Coverage - react, typescript, jsx-a11y, import, promise, unicorn, oxc

How to Run

From 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

VS Code Integration

Install the OxLint extension for inline errors/warnings as you type.

What Gets Linted

The config applies to all TypeScript and JavaScript files across:

  • apps/web, apps/admin, apps/space, apps/live
  • All packages in packages/

Ignored paths:

  • node_modules/, dist/, build/, .next/, .turbo/
  • Config files (*.config.{js,mjs,cjs,ts})
  • Public folders, coverage, storybook-static

Rules Overview

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 ignored
  • Several noisy unicorn rules disabled

Backward Compatibility

OxLint supports eslint-disable comments, so existing inline suppressions continue to work.

Suppressing Warnings

// 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.

Pre-commit Hook

Lint-staged runs automatically on commit via Husky:

  • oxfmt formats your staged files
  • OxLint fixes what it can (with --deny-warnings)

If the commit fails due to lint errors, fix them before committing.

Reference Files