Sign in

Cam McHenry

@camchenry.com
565 followers 317 following 145 posts

dad | software engineer @github.com | core team member of oxc.rs | ✝️ camchenry.com

PostsRepliesMedia
Cam McHenry @camchenry.com · 05/09/2026
A brief update (since I realized I haven't posted an update on this in 3 months): I'm still working on this when I have time. It's gotten significantly better lately: on the ~8200 files the TS conformance suite has, it matches on 85.6% of types, and on 97.69% of assignability checks.
150
Cam McHenry @camchenry.com · 25/08/2026
Finally got around to updating my personal website. I've migrated to Astro (took ~15 minutes with AI), and replaced my usage of Remix. Turns out I didn't need as much dynamic content as I thought and shipping less (or no JS) is something I like a lot.
110
Cam McHenry @camchenry.com · 03/06/2026
Okay here's my bad idea github.com/camchenry/ox...
github.com
GitHub - camchenry/oxc_checker: Experimental type checker based on oxc
Experimental type checker based on oxc. Contribute to camchenry/oxc_checker development by creating an account on GitHub.
2180
Cam McHenry @camchenry.com · 23/05/2026
Against my better judgment, I have started a side project that is probably impossible to achieve practically. I'm gonna try anyway. Hopefully I will learn a lot 😅
140
Reposted by Cam McHenry
Marvin Hagemeister @marvinh.dev · 17/05/2026
Speeding up the JS ecosystem OXC edition 🚀 We made both oxfmt and oxlint 50% faster on projects with >50k directories. marvinh.dev/blog/speedin...
marvinh.dev
Speeding up the JavaScript ecosystem - oxlint and oxfmt
Future versions of oxlint and oxfmt will be ~50% faster on projecs with many (>=20k) directories.
618024
Cam McHenry @camchenry.com · 16/05/2026
we recently added rule timing support to oxlint to help triage performance issues. try running with `--debug=timings` to see the slowest built-in rules. support for type-aware/JS plugins will be supported in the future too.
results of running "pnpx oxlint --debug=timings --silent" on the actualbudget/actual repository. It says "Found 22 warnings and 0 errors. Finished in 7.5s on 1805 files using 8 threads." and then includes a rule timings table that lists the slowest rules from slowest to fastest. Each row includes the rule name, time it took to run in milliseconds, relative time, number of times called, and where the rule comes from (source). For example, the eslint/no-unused-vars rule took 297ms (26.8% of total), and was called 1,805 times and is a native rule.
1441
Cam McHenry @camchenry.com · 14/05/2026
oxlint now supports 100%* of the eslint-plugin-jsx-a11y rules! final rules will be in the next release. github.com/oxc-project/...
github.com
☂️ eslint-plugin-jsx-a11y · Issue #1141 · oxc-project/oxc
WarningThis comment is maintained by CI. Do not edit this comment directly. To update comment template, see https://github.com/oxc-project/oxc/tree/main/tasks/lint_rules This is the tracking issue ...
2355
Cam McHenry @camchenry.com · 06/05/2026
We are working on bulk suppressions support in oxlint! Next release will have CLI support and we are working on LSP support now.
181
Reposted by Cam McHenry
Connor Shea @connorshea.bsky.social · 01/05/2026
I have now replaced ESLint with Oxlint in the DebtBook Rails/React codebase 🫡 ESLint ran in 20s with full cache, 230s without cache. And somewhere in between very randomly depending on the changes made. Oxlint - with type-aware, a JS Plugin, and more than 250 rules - runs in around 8 seconds :)
3355
Cam McHenry @camchenry.com · 31/03/2026
Excited to see this! I want to make it work with oxlint as soon as possible 😀
0110
Cam McHenry @camchenry.com · 26/03/2026
Really interesting research from auvred on type-aware linting: github.com/auvred/hybri... This is the next frontier for developer tooling: cross-language interoperability and finding the right tradeoffs to make for extensibility/performance.
github.com
GitHub - auvred/hybrid-type-aware-linting-performance: Performance evaluation of different approaches for bridging tsgo with JS
Performance evaluation of different approaches for bridging tsgo with JS - auvred/hybrid-type-aware-linting-performance
092
Cam McHenry @camchenry.com · 12/03/2026
Thank you @andrewbran.ch for upstreaming some perf optimization from tsgolint! github.com/microsoft/ty... I guess this counts as my first typescript-go contribution? 😅
github.com
Add per-directory module resolution cache by andrewbranch · Pull Request #3070 · microsoft/typescript-go
This upstreams oxc-project/tsgolint#764 from @camchenry. Thanks for the work there! This is a simpler than what we used to have, and avoids the lock contention that made caching worse than not cach...
190
Reposted by Cam McHenry
Daniel Rosenwasser @danr.bsky.social · 14/01/2026
Fun story from today. I'm currently trying to get `--strict` on by default in TypeScript 6.0. Our test suite has many tests which are written with `--strict false`, so I am updating them by adding a special comment our test suite recognizes for options // @strict: false However...
Test where `// @strict: false` has been added to the beginning of the file.
54110
Cam McHenry @camchenry.com · 08/12/2025
Try it out!
050
Reposted by Cam McHenry
Boshen @boshen.github.io · 01/12/2025
Announcing Oxfmt: Oxc Formatter Alpha oxc.rs/blog/2025-1...
oxc.rs
Oxfmt: Oxc Formatter Alpha
A collection of high-performance JavaScript tools written in Rust
111011
Cam McHenry @camchenry.com · 19/11/2025
It took a little while, but I feel like using `go tool pprof` is starting to grow on me.
010
Cam McHenry @camchenry.com · 13/11/2025
This has been in the works for a few months now! Excited for more people to try this out when it supports config options. A special thanks to the @typescript-eslint.io team who have set the standard for typed lint rules here. Much of this work is based on what has come before and on their rules.
1271
Cam McHenry @camchenry.com · 08/11/2025
Finally had time to put more effort into implementing oxlint<->tsgolint configuration for rules. Very soon, you'll be able to configure type-aware rules like any other rules. Should be as easy as just upgrading to the latest versions once it is available.
1330
Reposted by Cam McHenry
Connor Shea @connorshea.bsky.social · 02/11/2025
So I started working on it in the evenings when I had time, and last week while I was off work for a week (recovering from eye surgery), in between naps I worked through most of the rule updates. So now almost all of them have documentation for their config options :) github.com/oxc-project/...
github.com
linter: various rules are missing `options` documentation on the Rules pages of the website · Issue #14743 · oxc-project/oxc
I think this was covered slightly by #6050, but may have been missed as being within scope of the problem. no-unused-vars, for example, has various options available. But the page for the rule make...
161
Reposted by Cam McHenry
Connor Shea @connorshea.bsky.social · 02/11/2025
I had been exploring ESLint alternatives and was bothered by the lack of consistent documentation for rule configs in oxlint. So I opened an issue about it and talked with the maintainers about the right way to solve it, and found out there was a system for auto-generating documentation with types.
github.com
linter: various rules are missing `options` documentation on the Rules pages of the website · Issue #14743 · oxc-project/oxc
I think this was covered slightly by #6050, but may have been missed as being within scope of the problem. no-unused-vars, for example, has various options available. But the page for the rule make...
2132
Reposted by Cam McHenry
Chris Coyier @chriscoyier.net · 31/10/2025
I love that this actually works. *Oh yeah, is your list actually UNordered? Prove it.*
2345
Cam McHenry @camchenry.com · 30/10/2025
use no memo hear no memo speak no memo
050
Reposted by Cam McHenry
Josh Goldberg @joshuakgoldberg.com · 30/10/2025
I am looking for a full-time job. Being independent in open source for 3.5+ years has been wonderful. I've gotten done most of the high-level goals I wanted to, and miss having people & structure around me. If you know of a role for a staff-level TypeScript+web developer, let me know! 🙂
1021378
Cam McHenry @camchenry.com · 29/10/2025
Vite and Vitest imply the existence of Viter
2181
Cam McHenry @camchenry.com · 28/10/2025
Does anyone have experience with tools for benchmarking on every PR for Go projects? I'm looking to get a rough estimate of perf regressions/improvements in each PR for github.com/oxc-project/.... Looking into building something custom with `go tool pprof` currently.
github.com
GitHub - oxc-project/tsgolint: Type aware linting for oxlint
Type aware linting for oxlint. Contribute to oxc-project/tsgolint development by creating an account on GitHub.
130
Cam McHenry @camchenry.com · 22/10/2025
On my laptop, oxlint 1.24 is 3% faster than 1.23 on the `vscode` repository, with even larger improvements for very large codebases. That means if you haven't updated to one of the latest versions in a few weeks, your linting step could be >10% slower than it should be!
A hyperfine benchmark showed that oxlint 1.24 is 1.03 times faster than v1.23, 1.11 times faster than v1.21, and 1.12 times faster than v1.22.
151
Cam McHenry @camchenry.com · 18/10/2025
Making something 1% faster 20 times > making something 20% faster once But that doesn't stop me from trying to get that juicy big one 😅
070
Reposted by Cam McHenry
overlookmotel.bsky.social @overlookmotel.bsky.social · 18/10/2025
Big up to new #oxc contributor @arsh.sh, who showed up out of nowhere and is tearing through our issue list! He's just implemented support for all the comment-based APIs in Oxlint JS plugins. github.com/oxc-project/...
github.com
feat(linter/plugins): comment-related APIs by lilnasy · Pull Request #14715 · oxc-project/oxc
Part of #14564. Implement the remaining SourceCode APIs related to comments (getCommentsBefore, getCommentsAfter, getCommentsInside, commentsExistBetween).
0334
Cam McHenry @camchenry.com · 13/10/2025
Oxlint 1.23.0 just got released, which includes the latest in some of the performance optimization work I've been doing. Running on the vscode repository on my M1 laptop, 1.23.0 is ~7-9% faster than previous versions of oxlint with no changes other than just bumping the dependency.
A benchmark of oxlint runs against the vscode repository. The final summary shows 'pnpx oxlint@1.23 --silent' ran 7% faster than 1.21, 8% faster than 1.22, 9% faster than 1.20, and 9% faster than 1.19. The average time for 1.23 was 844.8ms.
2381
Cam McHenry @camchenry.com · 26/09/2025
Just finished writing up an auto-fix for this in Oxlint, in case this was a blocker for anyone: github.com/oxc-project/...
github.com
feat(linter): add fix for `preserve-caught-error` by camchenry · Pull Request #14104 · oxc-project/oxc
Ported over the tests from typescript-eslint. I also improved the diagnostic messages that were pre-existing. I believe the fixer now supports all of the same cases that typescript-eslint does, but...
0120
Cam McHenry @camchenry.com · 12/09/2025
I'm finally starting to pick up Go and try to formally learn it. It's got a lot of wild features! First language I've used in quite a while that natively supports complex numbers, seems like an interesting choice. The swapped type declaration order is gonna take a while to get used to.
120
Cam McHenry @camchenry.com · 11/09/2025
First of these optimizations rolled out in v1.15.0 with a reduced scope. Next version of oxlint will be even faster: github.com/oxc-project/... On my laptop: ~15% faster on `oven-sh/bun`, ~9% faster on `microsoft/vscode`, ~11% faster on `posthog/posthog`, and ~8% faster on `elastic/kibana`
github.com
perf(linter): detect node types from `let..else` statements by camchenry · Pull Request #13690 · oxc-project/oxc
part of linter: dynamically skip running rules that do not have the relevant node types #12223 Adds basic detection for syntax like let AstKind::Something(...) = node.kind() else { return }; in li...
0272
Reposted by Cam McHenry
VoidZero @voidzero.dev · 29/08/2025
VoidZero x SquiggleConf: Win a ticket! VoidZero is a proud sponsor of this year's @squiggleconf.com on September 18th and 19th in Boston. We've got an extra ticket for the event and want to give it away to one of you so you can join us there! Learn in this thread how you can enter the raffle 👇
Post image saying "VoidZero is sponsoring SquiggleConf 2025"
2245
Cam McHenry @camchenry.com · 18/08/2025
Trying some new oxlint optimizations. This PR has gone over several iterations in the last few months and the core idea is simple: don't run rules for files if they don't apply (using an AST node bitset lookup). The result: linting is around 15% faster in practice.
Oxlint linter CodSpeed benchmark showing 65-84% performance improvementsA hyperfine CLI benchmark showing that linting the vscode repository is around 17% faster.A hyperfine CLI benchmark showing that linting the kibana repository is around 17% faster.
5393
Reposted by Cam McHenry
Boshen @boshen.github.io · 17/08/2025
Announcing Oxlint Type-Aware Preview oxc.rs/blog/2025-08...
oxc.rs
The JavaScript Oxidation Compiler
A collection of high-performance JavaScript tools written in Rust
214218
Cam McHenry @camchenry.com · 15/08/2025
Cool to see more tsgo-based linters! I think best practices here are not known yet, so it is great to see more teams innovating on this.
070
Cam McHenry @camchenry.com · 15/08/2025
Great news for anyone linting large repositories! Hopefully this will be an easy performance win for teams using ESLint.
050
Cam McHenry @camchenry.com · 07/08/2025
Just had a listen to this, it's well worth listening to catch up on the current state of JS linting, as Josh has lots of experience from working on ts-eslint. Lots of innovation happening in linting currently Overall, I think right now is a great time to learn more about linting, parsing, and ASTs.
191
Cam McHenry @camchenry.com · 07/08/2025
First version is out! It's still pretty experimental, but we will keep improving performance and fixing bugs with each version. Most importantly though: you can use it now!
091
Reposted by Cam McHenry
Boshen @boshen.github.io · 07/08/2025
`oxlint --type-aware`. Mic drop. It's incomplete and have numerous problems, including a noticeable performance issue. BUT, you can finally see your floating promises quickly! Example PR: github.com/rolldown/rol... Problems: t.co/K7ZVnPjOPL
311014
Cam McHenry @camchenry.com · 19/07/2025
It's been great to work on prototyping this! I'm really excited by typescript-go and looking forward to getting this released as soon as we can. The future is fast ⚡️
0464
Reposted by Cam McHenry
Boshen @boshen.github.io · 14/07/2025
I am permitted to host tsgolint in Oxc and explore type aware linting! I am super excited! We reduced the original scope of tsgolint to be a backend for oxlint, taking the best out of both worlds! github.com/oxc-project/...
github.com
GitHub - oxc-project/tsgolint: Type aware linting for oxlint
Type aware linting for oxlint. Contribute to oxc-project/tsgolint development by creating an account on GitHub.
11008
Reposted by Cam McHenry
Arnaud Barré @arnaud-barre.bsky.social · 09/07/2025
Introducing tsl, an extension of tsc for type-aware linting! Want to speed up your ESLint time without losing the great type-aware rules from @typescript-eslint.io? Run `bunx tsl --migrate` to try it out! github.com/ArnaudBarre/...
github.com
GitHub - ArnaudBarre/tsl: An extension of tsc for type-aware linting
An extension of tsc for type-aware linting. Contribute to ArnaudBarre/tsl development by creating an account on GitHub.
108218
Cam McHenry @camchenry.com · 17/06/2025
This is the best explanation of ARIA that I've seen. There is so much practical advice in here as well!
020
Reposted by Cam McHenry
VoidZero @voidzero.dev · 10/06/2025
We're thrilled to announce the first stable release of Oxlint - version 1.0! Our Rust-powered JavaScript/TypeScript linter delivers 50~100x faster performance than ESLint with 500+ rules and zero configuration required. Time to give it a try! voidzero.dev/posts/announ...
voidzero.dev
Announcing Oxlint 1.0
The first stable version of Oxlint, a fast & easy-to-use Rust-powered linter for JavaScript and TypeScript, is out. Learn about its 50~100x speed advantage over ESLint, support for 500+ rules, real-wo...
1030161
Reposted by Cam McHenry
VoidZero @voidzero.dev · 30/05/2025
Today we are excited to announce Rolldown-Vite: a technical preview of the version of @vite.dev entirely powered by the Rust stack we built over the past year (Oxc + @rolldown.rs) voidzero.dev/posts/announ...
voidzero.dev
Announcing Rolldown-Vite
We are building the next generation of JavaScript tooling
331772
Reposted by Cam McHenry
Boshen @boshen.github.io · 30/05/2025
For the Oxlint 1.0 announcement, I'd like to show more real world performance numbers on large repos. If Oxlint has been satisfactory, would you be keen to send me the numbers Oxlint reports at the end? If you have never tried Oxlint but has a large repo: `npx oxlint@latest`.
9528
Cam McHenry @camchenry.com · 27/05/2025
I got involved with oxc because I just showed up, looked at the issues available and suggested solutions, and started making contributions. It was also nice to not have the pressure of being publicly assigned to it so I could take my time and learn as I went.
1273
Reposted by Cam McHenry
patak @patak.cat · 27/05/2025
If you find an OSS issue that calls your attention, go for it. You don't need to ask permission to start working or have it assigned to you. If someone else sends a PR before you, that's great. You can use your knowledge of the issue to help review the PR, add tests, and validate the approach.
310318
Reposted by Cam McHenry
Alexander Lichter @thealexlichter.com · 19/05/2025
Happy to see Mercedes Benz adopting modern tooling such as @rolldown.rs and Oxc in their workflow, as well as going the extra mile and sharing their results! Up to 64% CI pipeline time reduction is impressive 👀 And more per improvements are yet to come 🤯 www.mercedes-benz.io/blog/2025-05...
Screenshot of the blog post quote saying:

This is truly amazing: we are not talking about refactoring our code or spending time understanding and trying to fit new tools. We are talking about drop-in replacements that could give us a 64% reduction in a CI pipeline (referring to only build + linting).
3619