Skip to content

Commit 1582e72

Browse files
committed
Draft v1
1 parent a55e0c1 commit 1582e72

File tree

1 file changed

+77
-13
lines changed

1 file changed

+77
-13
lines changed

src/blog/2025-12-22-oxlint-js-plugins-alpha.md

Lines changed: 77 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,96 @@ authors:
1010

1111
<br>
1212

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".
1424

1525
## Overview
1626

17-
[Add overview content here]
27+
### What it can do
1828

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:
2035

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
2240

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!
2442

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

2757
## Performance
2858

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
3092

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:
3294

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

35-
## What's Next
99+
## Try it out!
36100

37-
[Add roadmap and future plans]
101+
TODO: Get to it people! Let's go!
38102

39-
## Try It Out
103+
## TODO
40104

41-
[Add call to action and community information]
105+
- Windows memory problem - need to warn about this somewhere.

0 commit comments

Comments
 (0)