You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/blog/2025-12-22-oxlint-js-plugins-alpha.md
+77-13Lines changed: 77 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,32 +10,96 @@ authors:
10
10
11
11
<br>
12
12
13
-
We're excited to announce the alpha release of JavaScript plugins for Oxlint!
13
+
**We're excited to announce the alpha release of JavaScript plugins for Oxlint!**
14
+
15
+
For a long time, users have asked for a way to customize the behavior of Oxlint.
16
+
17
+
2 months ago we released the first technical preview of our solution - support for Oxlint plugins written in Javascript, _and_ compatible with ESLint's plugin API. However, that initial preview was incomplete. Many APIs were not implemented yet.
18
+
19
+
Since the initial preview, we've been beavering away on filling out the API surface. At this point, we feel it's ready for testing in real world projects.
20
+
21
+
We expect 80% of users will find they are now able to switch from ESLint to Oxlint and it should "just work".
22
+
23
+
Oxlint supports over 600 popular rules re-implemented in Rust, which run at native speed. JS plugins aim to "fill in the gaps" where Oxlint does not yet support all the rules users need. The combination of raw native performance for the majority of lint rules, and the flexibility of JS plugins for the rest, aims to make Oxlint "the best of both worlds".
14
24
15
25
## Overview
16
26
17
-
[Add overview content here]
27
+
### What it can do
18
28
19
-
## Quick Start
29
+
Oxlint now supports:
30
+
31
+
- Running most existing ESLint plugins without modification.
32
+
- Writing your own custom lint rules in Javascript.
33
+
34
+
Oxlint passes 100% the tests for these popular ESLint plugins:
20
35
21
-
[Add quick start instructions here]
36
+
-`eslint-plugin-react-hooks` (including the React Compiler-powered rules) **TBC - not tested yet**
37
+
- TBC
38
+
- TBC
39
+
- TBC
22
40
23
-
## What's New
41
+
Just because a plugin isn't included in the list above, doesn't mean it doesn't work. Most likely we just haven't tested it yet. Please try it out and let us know!
24
42
25
-
[Add details about new features and capabilities]
43
+
### What it can't do (yet)
44
+
45
+
- No language server support yet. Errors from JS plugins are reported from Oxlint's CLI, but not in IDEs.
46
+
- Support front-end frameworks with custom file formats (e.g. Svelte, Vue, Angular) - this will come next year.
47
+
- Blow your socks off with it's speed.
48
+
49
+
Our efforts over recent months have been to achieve compatibility with ESLint, and to make painless migration possible for as many users as possible. Performance has not been our focus to date. But please believe us when we say that we know exactly how we're going to achieve a leap in performance which will astonish many who say that it's impossible to make Javascript run fast, and we'll get into that next year (more details [in performance section](#performance) below).
50
+
51
+
That said, you will very likely find switching from ESLint to Oxlint to be a _large_ speed-up. It's just that we're not satisfied with large - we want _huge_! This is just the beginning.
52
+
53
+
## Quick Start
54
+
55
+
TODO: Add quick start instructions here - installation, adding a plugin etc.
26
56
27
57
## Performance
28
58
29
-
[Add performance benchmarks and comparisons]
59
+
As noted above, performance has not been our main focus in this first phase of development of Oxlint JS plugins.
60
+
61
+
Much of the API is currently implemented in JS, in part by borrowing heavily from projects like TypeScript-ESLint. Our next step is "Rustification", which will produce dramatic performance gains.
62
+
63
+
However, the current version of Oxlint does contain our "secret weapon" - a new, highly optimized, low-level API for communicating between Rust and JS, which we call "raw transfer". This technique completely destroys the traditional language barrier, reducing the cost of moving data between the "two worlds" of JS and Rust almost to zero.
64
+
65
+
This barrier has always been the fundamental problem for native tooling supporting JS plugins. The native code may well run at the speed of light, but the cost of sending data back and forth to JS is so high that it can offset much of that gain. We believe that we have finally solved this problem.
66
+
67
+
"Raw transfer" is the foundation on which we can build the _next_ version of Oxlint JS plugins, leveraging it to unlock many other optimizations, with which we believe can achieve the seemingly impossible - bring JS plugins up to _almost_ the same level of performance as Rust.
68
+
69
+
In short: Oxlint is already the fastest linter in the world. It's going to get a lot faster.
70
+
71
+
For more details, see [under the hood](#under-the-hood) below.
72
+
73
+
### Benchmarks
74
+
75
+
TODO: Add benchmarks ESLint vs Oxlint with JS plugins
76
+
77
+
## Alternative API
78
+
79
+
Oxlint aims for 100% compatibility with ESLint's plugin API.
80
+
81
+
However, we also offer a slightly different API which is more performant.
82
+
83
+
TODO: Example (similar to preview blog post).
84
+
85
+
## Under the hood
86
+
87
+
TODO: Explanation of AST transfer, lazy deserialization etc (similar to preview blog post).
88
+
89
+
TODO: Add video of overlookmotel's ViteConf talk.
90
+
91
+
## What's next
30
92
31
-
## Technical Details
93
+
Development of Oxlint plugin support is progressing at a rapid pace. Within the next few months, you can expect to see:
32
94
33
-
[Add technical implementation details]
95
+
- Language server support (VS Code etc).
96
+
- Dramatic performance improvements.
97
+
- Full support for frameworks with custom file formats like Svelte, Vue, and Angular.
34
98
35
-
## What's Next
99
+
## Try it out!
36
100
37
-
[Add roadmap and future plans]
101
+
TODO: Get to it people! Let's go!
38
102
39
-
## Try It Out
103
+
## TODO
40
104
41
-
[Add call to action and community information]
105
+
- Windows memory problem - need to warn about this somewhere.
0 commit comments