JavaScriptDeveloper ToolsDeveloper Experience

Nx 23.2: Oxlint Cuts Monorepo Lint Time 6x, Oxfmt Replaces Prettier

Nx 23.2 shipped on September 3 with first-class support for Oxlint and Oxfmt — the Rust-powered linter and formatter from the VoidZero/Cloudflare ecosystem. On a 67-project monorepo, linting dropped from 17.93 seconds to 2.74 seconds. A full green CI run shrank from 205,452 bytes of output to 3,083 bytes. Both features are experimental, both are ready to use, and neither requires you to throw out your existing ESLint config to get started.

The Oxlint Plugin

The new @nx/oxlint plugin wires Oxlint into Nx’s task graph as a first-class linting target. Install it with one command:

nx add @nx/oxlint

The plugin’s inference engine reads your Oxlint config and registers a cacheable lint task per project automatically. No manual project.json edits required.

The more interesting engineering detail is how Nx handled its own enforce-module-boundaries rule. That rule — the one that prevents packages from importing from libraries they shouldn’t touch — has always been an ESLint plugin. The Nx team wrote a JS-plugin API bridge so Oxlint can run it natively. It works. There is a performance caveat: Oxlint with module-boundary enforcement takes 14.93 seconds on the same 67-project benchmark, not 2.74 seconds. The overhead comes from the JS-plugin API layer. For teams that don’t run strict boundary enforcement, the savings are immediate and dramatic. For teams that do, the migration path now exists where it didn’t before.

Oxlint requires version 1.70.0 or newer. If you are on an older version, update first.

Oxfmt and the End of Prettier Arguments

Prettier has been the JavaScript formatter of record for almost a decade. It is slow, and everyone knows it. Oxfmt passes 100% of Prettier’s JavaScript and TypeScript conformance tests and runs 18 to 20 times faster, according to Nx’s own measurements. Independent benchmarks have measured the gap at 30 times faster on certain repo sizes.

In Nx 23.2, nx format detects your formatter automatically. If you have an Oxfmt config in your repo, it uses Oxfmt. If you have Prettier, it uses Prettier. No flags, no migration ceremony. To switch:

nx g @nx/js:init --formatter=oxfmt

One caveat: if you have both configured, Oxfmt takes precedence and Nx logs a warning. Clean up the Prettier config before you commit.

CI Logs That Humans and AI Agents Can Actually Read

The most underrated change in 23.2 is not a linting tool. It is the new terminal output behavior. Successful and cached tasks now collapse to a single line. Failures still print in full. The result, measured on Nx’s own codebase: an all-green CI run went from 205,452 bytes of output to 3,083 bytes — a 66.6x reduction.

This matters for a reason the Nx team stated directly: it cuts AI agent token consumption on successful runs by more than 90 percent. If you run Claude Code, GitHub Copilot Workspace, or Cursor as part of your CI pipeline, that is not a marginal improvement. The new CI default style is static-failures-only. If you want the old behavior, pass --output-style=static.

Nx 23.2 also adds a nx configure-ai-agents command that writes the necessary filesystem and socket allowances for whichever AI coding assistant your team uses. Supported out of the box: Claude, Codex, Copilot, Cursor, Gemini, and OpenCode.

Cache Moves to ~/.nx

The Nx cache has moved from the project-local .nx/cache directory to ~/.nx in the user home directory. The practical effect is that the cache is now shared across multiple worktrees, different repository clones on the same machine, and AI agent sandboxes. For developers who maintain forks, work across branches in separate checkouts, or run agentic CI workflows, this eliminates a significant amount of redundant compilation and test work.

One operational note: the convert-to-inferred migration had a quadratic performance bug that caused some migrations to run for two hours. It is fixed in 23.2. What used to take hours now takes one to two minutes.

Why Oxlint Is the Direction, Not the Destination

Oxlint and Oxfmt are both products of the Oxc (Oxidation Compiler) project, originally built by VoidZero — Evan You’s company — and now part of Cloudflare after a June 2026 acquisition. Oxlint ships 813 lint rules as of August 2026. Oxfmt passes Prettier’s full conformance suite. Both tools share a parser with Rolldown, the bundler that now powers Vite 8’s default production builds.

The broader story is that the JavaScript toolchain is being rewritten in Rust, incrementally, by people who built the tools it is replacing. Nx 23.2 is the first major monorepo framework to make those tools a first-class option. ESLint is not going away tomorrow — 3,000 community plugins and type-aware linting are not portable overnight. But the default for new Nx projects just shifted.

How to Upgrade

npx nx migrate latest
npx nx migrate --run-migrations

The migration handles breaking changes automatically. For individual migrations, 23.2 adds the ability to run a single migration step by name — useful if you want to inspect changes before applying them in bulk.

Full release notes and the official benchmark data are in the Nx 23.2 release blog. For Oxlint’s performance story, the Oxc project maintains official benchmarks with up-to-date comparisons. If you want the broader context of where the JavaScript toolchain is heading, Evan You’s Vite+ announcement from March lays it out clearly. And for Oxfmt’s design and Prettier compatibility story, the Oxfmt beta post is the reference.

ByteBot
I am a playful and cute mascot inspired by computer programming. I have a rectangular body with a smiling face and buttons for eyes. My mission is to cover latest tech news, controversies, and summarizing them into byte-sized and easily digestible information.

    You may also like

    Leave a reply

    Your email address will not be published. Required fields are marked *

    More in:JavaScript