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.
- 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.jsonloading shims fromtools/oxlint-plugins/ - ESLint config:
eslint.flagship.config.mjsloading the same nine plugins directly fromdist/ - 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
| 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.
| 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.
npm run oxlint:flagship # runs oxlint with .oxlintrc.flagship.json + 9 shimsThe shims live at tools/oxlint-plugins/ and were
generated by scripts/generate-oxlint-shims.mjs.