@@ -217,46 +217,62 @@ The reasons why this alternative API has potential to greatly improve performanc
217217
218218## Performance
219219
220- As mentioned above, performance is not yet as good as it can be. Our prototyping work has demonstrated significant
221- speed-gains from various optimizations, which we'll apply in future releases.
220+ As mentioned above, performance has not been our focus in this initial preview release of Oxlint JS plugins.
221+ Our primary goal has been to fill out enough of the API for JS plugins to be useful in real world projects,
222+ and gather feedback from early adopters.
222223
223- However, even without all those optimizations, the cost of adding JS plugins into the mix is already surprisingly low.
224+ Performance at present is decent, but not by any means stellar.
225+
226+ However - and we feel this is the important point - our prototype of the _ next_ version demonstrates that the
227+ architectural design we've settled on is capable of _ exceptional_ performance, once various optimizations are added
228+ into the mix (see [ Under the hood] ( #under-the-hood ) ).
229+
230+ We'll be applying those optimization over the course of the next few months, and users will see multiple x speed-ups
231+ compared to the current version.
232+
233+ That said, even without those optimizations, Oxlint's performance is still competitive.
224234
225235Oxlint vs ESLint linting a medium-sized TypeScript project [ vuejs/core] ( https://github.com/vuejs/core ) :
226236
227237| Linter | Time |
228238| ---------------------------- | -------- |
229- | ESLint | 7,030 ms |
230- | ESLint multi-threaded | 4,541 ms |
231- | Oxlint | 582 ms |
232- | Oxlint with custom JS plugin | 584 ms |
239+ | ESLint | 4,116 ms |
240+ | ESLint multi-threaded | 3,710 ms |
241+ | Oxlint | 48 ms |
242+ | Oxlint with custom JS plugin | 236 ms |
233243
234244<div >
235245<details >
236246<summary >Details</summary >
237247
238- - Benchmark repo: https://github.com/camc314/core/tree/c/bench-custom-plugins
239- - Benchmarked on 2023 MacBook Pro M2 Max
248+ ::: info
249+
250+ - Benchmark repo: https://github.com/overlookmotel/vue-core-cam/tree/bench-js-plugins
251+ - Benchmarked on MacBook Air M3, 24GB RAM
240252- Bench command:
241253
242254``` sh
243- hyperfine \
244- --warmup 1 \
245- --runs 5 \
246- ' pnpm run oxlint' \
247- ' pnpm run oxlint-with-custom-plugin' \
248- ' pnpm run eslint-with-custom-plugin' \
249- ' pnpm run eslint-with-custom-plugin-parallel' -i
255+ hyperfine -i --warmup 3 \
256+ ' ./node_modules/.bin/oxlint --silent' \
257+ ' ./node_modules/.bin/oxlint -c .oxlintrc-with-custom-plugin.json --silent' \
258+ ' USE_CUSTOM_PLUGIN=true ./node_modules/.bin/eslint .' \
259+ ' USE_CUSTOM_PLUGIN=true ./node_modules/.bin/eslint . --concurrency=auto'
250260```
251261
262+ Note: The version of Oxlint on NPM at time of writing (1.23.0) has a bug which affects this benchmark, and hugely
263+ underestimates the cost of JS plugins. The above results were obtained using latest ` main ` branch, after the bug fix,
264+ at [ this commit] ( https://github.com/oxc-project/oxc/commit/cd266b4c101c35c33e122457cdd0b514b44597a9 ) .
265+ Please also see [ below] ( #edit-18th-oct-2025 ) .
266+
267+ :::
268+
252269</details >
253270</div >
254271
255- In this example, the cost of adding a simple JS plugin to Oxlint is less than 1%, and Oxlint is 8x faster than ESLint,
256- even using ESLint's new multi-threaded runner.
272+ In this example, adding a simple JS plugin to Oxlint does have a significant cost, but Oxlint is still 15x faster
273+ than ESLint, even using ESLint's new multi-threaded runner.
257274
258- Obviously, more complicated JS plugins, or many of them, will have a higher performance cost - which is why we will
259- be focused in future releases on driving down that cost further.
275+ Obviously, more complicated JS plugins, or many of them, will have a higher performance cost.
260276
261277## Features
262278
@@ -293,7 +309,7 @@ plugin without modification.
293309
294310#### 2. Improving performance
295311
296- Performance is already good , but we have proven during our prototyping many significant performance gains from further
312+ Performance is already decent , but we have proven during our prototyping many significant performance gains from further
297313optimizations. We will apply them, and make JS plugins in Oxlint run at as close to Rust speed as we can get.
298314
299315## Under the hood
@@ -380,3 +396,15 @@ please let us know. We'll be filling in the gaps in the API over the next few mo
380396which there's greatest demand.
381397
382398Happy linting!
399+
400+ ---
401+
402+ #### Edit: 18th Oct 2025
403+
404+ The original version of this blog post published on 9th Oct contained benchmarks results which showed the performance
405+ of Oxlint JS plugins to be far better than they are in reality. This was the result of a bug in Oxlint which was causing
406+ JS plugins to be skipped on many files in certain circumstances when the config contains overrides. This bug lead to
407+ the performance of JS plugins being way overestimated in the benchmarks we quoted.
408+
409+ We sincerely apologise for this mistake, and thank [ Herrington Darkholme] ( https://github.com/HerringtonDarkholme )
410+ for pointing out the error.
0 commit comments