/posts/announcing-oxlint-js-plugins.md
Announcing Oxlint JavaScript Plugin Support
October 20, 2025

Announcing Oxlint JavaScript Plugin Support

Michael Dong

Michael Dong

For more technical details, implementations, and considerations for Oxlint's support for JavaScript plugins, see the blog post on the Oxc website or watch the ViteConf talk.

TL;DR: Oxlint now supports plugins written in JavaScript. Developers can customize and extend Oxlint using JavaScript, but at a speed approaching Rust, due to 'raw transfer' between Rust and JS, and other breakthroughs. Many ESLint plugins can run without any modification.


VoidZero set out with an ambitious goal to improve DX and build a unified toolchain that is fast. Developers have been eagerly waiting for a linter that can function at native speed and is a complete replacement for existing solutions. Oxlint, written in Rust, is VoidZero’s answer. The v1.0 stable version was released in Jun 2025 and type-aware linting was released in Aug 2025. Today, we’re excited to announce another major milestone:

Oxlint supports plugins written in JavaScript!

Why JavaScript plugins matter

Taking a step back, why did tools like Vite, ESLint and Rollup become so popular? While there are many contributing factors, we believe a major reason is customizability. Their plugin ecosystem empowered developers to author plugins and tailor behaviors to their specific needs. And then share the plugins via NPM, building an ecosystem. This makes sense for tools written in JavaScript and used by JavaScript developers.

But what happens when the tool is written in Rust and used JavaScript developers? How will JavaScript developers customize Oxlint? The two naive solutions:

  1. Everyone learns Rust.
  2. Tooling authors rewrite every single plugin in Rust.

Hopefully, no explanation is needed as to why solution one is unrealistic. While VoidZero has already rewritten many commonly used linting plugins in Rust, it’s unrealistic to rewrite and maintain the entire universe of JavaScript plugins. Including the “long tail” of plugins that have a small user base but are essential and project-specific plugins.

Oxlint is stuck between a rock and a hard place. The Rust architecture that drastically improved performance also makes it less accessible to developers who only “speak” JavaScript. A direct departure from the company’s goal to improve DX.

Is there another solution?

JavaScript-Rust Transfer

A middle ground that lets JavaScript developers continue using the language they know best while enjoying Rust’s exceptional speed. The conventional method, involves doing the heavy processing in Rust, and then transfering the resulting processed code over to JavaScript, where JavaScript can quickly apply additional tweaks.

Simple in theory. Disastrous in practice. The issue is the cost of the transfer between the "two worlds" of Rust and JavaScript. If the main reason to switch to Oxlint is speed improvements, then the transfer’s overhead would render the switch's reason almost meaningless.

What if, instead, the processed code was transparently shared between JavaScript and Rust, instead of transferred? If there was no transfer, and almost no cost at all?

Over the past year, this is exactly what the Oxc team have achieved, a unique architecture designed to completely destroy the traditional language barrier. This, along with other optimizations, enabled Oxlint plugins written in JavaScript to run 86% faster, or at a speed comparable to Rust. More implementation details here.

Bar chart showing Oxlint speed going from 1,360ms to 189ms with JavaScript plugins
Oxlint speed going from 1,360ms to 189ms with JavaScript plugins

Next steps

Oxlint’s JavaScript plugin functionality is in its early stages, with further optimizations and implementations in the works. When that happens, because Oxlint plugins are ESLint-compatible, users will soon be able to fully switch from ESLint to Oxlint in under an hour. Everything will simply work just as before, but an order of magnitude faster. We believe that we can continue to reduce the transfer overhead to the point where it becomes almost negligible.

If a fast linter is something you are interested in, we ask that you test it. It’s easy to get started since Oxlint can run many ESLint plugins without any modifications. An alternative API is also available to unlock even better performance. The more feedback, both positive and negative, we get, the more robust Oxlint’s JavaScript plugins support becomes.

Connect with us:

Get all of our updates directly to your inbox. Sign up for our newsletter.

04CallToAction.vue

Interested in the future of JavaScript tooling and want to stay ahead of the curve?

We’d love to talk to you.

ContactButton.vueserved in 13ms@click=”contact”