Connor Shea

@connorshea.bsky.social

Software Engineer. Denver. I like Ruby, Rails, TypeScript, Rust. Building http://vglist.co, Oxlint core team. Not good at computers, just bad at giving up. I like housing. he/him

In next week's release of Oxlint, import/no-cycle gets a lot faster :) This is a benchmark of the wall clock time, memory allocations, etc. of running the rule on the vscode codebase.

Benchmark table of three builds: main (3341.9 ms, 330.98 M allocations, 1360.8 MB peak RSS) through the drop-two-Vecs-per-edge commit (1082.0 ms, 38.61 M, 1063.9 MB) — cumulatively 3.1× faster, 8.6× fewer allocations, 21.8% lower peak RSS.

Oxlint 1.75.0 (released Tuesday) vs Oxlint main, with 784 rules enabled (disabled no-cycle because it's extremely slow, plus 3 new rules that aren't available on 1.75.0). No notable runtime improvement since it's parallelized across many threads, but still nice.

Benchmark table comparing allocation counts for corpus ~/code/vscode/src (7,368 files), counting global allocator, 2 reps each, run-to-run spread under 400 allocations (~0.0007%). Columns: metric, v1.75.0, main, delta, delta percent. Whole-process allocations 57,248,774 → 52,996,284 (−4,252,490, −7.43%). Allocations minus parse-only baseline 55,589,803 → 51,337,178 (−4,252,626, −7.65%). Bytes requested 7.77 GB → 7.44 GB (−328.3 MB, −4.23%). Allocations per file 7,770 → 7,193 (−577).

We'll see if it gets merged, but I have a potential optimization for the diagnostics printing in default mode for oxlint :) See caveats below, but if you have many lint violations in your project, this will have an actual impact on how quickly an oxlint run finishes and returns your results.

Built oxlint (release) against main of oxc-miette vs. this branch of oxc-miette — identical except for the version of the miette dependency — and measured full-directory lint runs with hyperfine (default rules, output to /dev/null). Since parse + analysis is byte-identical between the two binaries, the entire delta is read_span:

Then a table with the benchmarking results, with the following contents:

On canvas-lms we lint ~10k files, get 3,149 diagnostics, and on main that runs in 370 ms, and on this PR it runs in 224 ms. So a 1.65x speedup.

On the gitlab codebase we lint ~10.7k files, get 1824 diagnostics, and on main that runs in 579ms vs 438ms in this PR, so a 1.32x speedup.

On a synthetic stress test file (2MB file w/ 4k diagnostics), we have 1 file, 4000 diagnostics, and on main it runs in 5.53s vs 1.01s on this PR, 5.47x speedup.

These are now shipped in Oxlint 1.72.0! Hopefully it makes Oxlint a bit faster if you use any of these rules. It's less noticeable when you've got a 12+ core machine since it's all parallelized anyway, but it may make a difference for CPU-constrained CI runners.

Connor Shea@connorshea.bsky.social · last mo.

Oxlint was too slow so I opened some PRs to optimize the slowest Rust rules after checking them on the VS Code repo ;) github.com/oxc-project/...

VoidZero has been very good to the core team helping out with Oxc. I'm very happy to see Boshen, Cam, and the rest of the team under a stable umbrella now :) Oxlint has been wonderful to contribute to, and I look forward to what will come in the rest of the year!

VoidZero@voidzero.dev · 2mo ago

VoidZero is joining Cloudflare. Our mission stays the same: to make JavaScript developers more productive than ever before. Vite, Vitest, Rolldown, Oxc, and Vite+ remain MIT-licensed. Evan and the VoidZero team will continue leading them.

VoidZero + Cloudflare

@andrewnez.bsky.social have you ever written a blog post on what security mechanisms exist / should exist for the Linux distro package installers? apt, dnf, apk, etc. I've read (and implemented) plenty in regards to protecting against npm/rubygems supply chain attacks, but not really Linux distros.

My bottleneck for security vulnerabilities rn is not finding them, not validating them, and not fixing them. It's writing the reports for them. I have 4 I need to report, but each report takes about an hour so I only do one every few days.