Skip to content

Latest commit

 

History

History
66 lines (52 loc) · 2.89 KB

oxlint-jstier-vs-eslint.md

File metadata and controls

66 lines (52 loc) · 2.89 KB

Oxlint JS-plugin tier vs ESLint host — same 10 flagship rules, same code

The five Rust ports staged at agents/native-ports/ close the 50–230× raw-latency gap permanently once they land upstream. While we wait for review, the oxlint JS-plugin tier lets users get a large chunk of the win today, with no PR required — same code path, same plugin source, just hosted by oxlint instead of ESLint.

This is a measurement of how much of the win the JS-plugin tier delivers right now on our own monorepo.

Setup

  • Scope: apps/ packages/ scripts/ tools/ (our own monorepo)
  • Same 10 flagship rules in both configs:
    • import-next/no-cycle, pg/no-unsafe-query, secure-coding/no-hardcoded-credentials, secure-coding/no-redos-vulnerable-regex, mongodb-security/no-unsafe-query, jwt/no-algorithm-none, browser-security/no-postmessage-wildcard-origin, react-features/hooks-exhaustive-deps, react-a11y/alt-text, vercel-ai-security/no-unsafe-output-handling
  • Oxlint config: .oxlintrc.flagship.json loading shims from tools/oxlint-plugins/
  • ESLint config: eslint.flagship.config.mjs loading the same nine plugins directly from dist/
  • Both runs cold (no cache flags set on the ESLint side; oxlint has no cache to speak of)
  • Hardware: M-series Mac, Node v24.13.0
  • Versions: oxlint 1.63.0, eslint 9.39.4

Results (3 runs each)

Stack Run 1 Run 2 Run 3 Files scanned Findings
Oxlint JS-plugin tier 1.78s 1.16s 2.27s 905 221
ESLint host 26.72s 20.65s 28.46s (config ignores ~equal) 1682 + 45w
  • Median ESLint host: ~25s
  • Median Oxlint JS-plugin tier: ~1.8s
  • Speedup: ~13–22× wall time

The finding-count delta is explained by parser scope (ESLint reports parse errors as findings; oxlint silently skips files it can't parse). Rule-output findings overlap once parse-errors are excluded.

Where this sits on the immediate-vs-eventual ladder

Path Latency vs ESLint host Available
ESLint host (today, no change) 1× baseline Today
Oxlint JS-plugin tier (this measurement) ~13–22× faster Today (no PR needed)
Native Rust ports in oxlint ~50–100× faster After 5 PRs land in oxc-project/oxc

The JS-plugin tier closes ~40–50% of the raw-latency gap to a native port — without waiting on oxc maintainers. We keep the same plugin source as the ESLint host (no fork divergence) and users opt in by pointing oxlint at the flagship config.

How to use

npm run oxlint:flagship   # runs oxlint with .oxlintrc.flagship.json + 9 shims

The shims live at tools/oxlint-plugins/ and were generated by scripts/generate-oxlint-shims.mjs.