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 · 16/09/2026
IIRC from parser testing this is also valid: ``` import { as as as } from 'from' ``` or ``` import { type type as type } from 'as' ```
181
Cam McHenry @camchenry.com · 05/09/2026
Since this is a side project, there's no real deadlines or milestones. Once it hits 90%+ type matches though, I think I'll consider publishing to crates.io and improving the public APIs so people could try it.
crates.io
crates.io: Rust Package Registry
crates.io serves as a central registry for sharing crates, which are packages or libraries written in Rust that you can use to enhance your projects
010
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
Also converted all social media links from the other site to BlueSky now, which was a long time coming. I think I'd like to utilize more AT Protocol stuff in the future too 🤔
010
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 · 09/07/2026
This is actually unrelated but I'm also working on 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.
010
Cam McHenry @camchenry.com · 29/06/2026
Love it!
120
Cam McHenry @camchenry.com · 03/06/2026
yeah I only just recently looked at the biome JS type inference code and it actually looked very similar which was sort of validating.
040
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 · 24/05/2026
Yes, something built with the oxc toolchain.
030
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
Cam McHenry @camchenry.com · 17/05/2026
Great writeup! Also emphasizes the work of continuously profiling too. This bottleneck didn't exist as far as I know before we added support for nested configs and then added multiple config file names. Got to always be profiling and looking to improve.
170
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
thanks for helping with this!
110
Cam McHenry @camchenry.com · 14/05/2026
*: we don't support the deprecated rules, so we haven't ported them over from the original plugin. please give them a try and report bug fixes, docs issues, or performance issues
000
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 · 07/05/2026
Great! We're looking for additional feedback on this. It would be much appreciated if you could give us some of your thoughts: github.com/oxc-project/...
github.com
RFC: Bulk Suppressions Support · oxc-project oxc · Discussion #22198
Related to #10549. This is a mini-RFC to solicit feedback from the community on how we should approach bulk suppressions and to help us prioritize what we should implement. This is primarily target...
010
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 · 22/04/2026
I think ESLint solves this via the bulk suppressions functionality, which generates a file containing all of your existing errors: eslint.org/docs/latest/... Then you can prune it over time. We will soon have the same functionality in oxlint: github.com/oxc-project/...
eslint.org
Bulk Suppressions - ESLint - Pluggable JavaScript Linter
A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.
110
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
Cam McHenry @camchenry.com · 13/02/2026
Replied in the PR, thanks for contributing :)
130
Cam McHenry @camchenry.com · 27/01/2026
What about Rolldown? It will be the default bundler in Vite 8, so it's well supported. I don't know how the performance compares to Farm, but Rolldown is also written in Rust and quite fast. github.com/rolldown/rol...
github.com
GitHub - rolldown/rolldown: Fast Rust bundler for JavaScript/TypeScript with Rollup-compatible API.
Fast Rust bundler for JavaScript/TypeScript with Rollup-compatible API. - rolldown/rolldown
040
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 · 09/12/2025
I like it! Red squiggly is overused anyway.
040
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
Cam McHenry @camchenry.com · 06/11/2025
It's only a subset of crates, but it's some of the most useful crates! Such a great feature ❤️
110
Cam McHenry @camchenry.com · 03/11/2025
Thank you so much for your help on this! It's a tremendous improvement and I hope it inspires more people to contribute 🙏
010
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
Cam McHenry @camchenry.com · 02/11/2025
Despite the warning, comments should be supported! I believe they get stripped out so it doesn't affect the parsing, even if it's not named JSONC. oxc.rs/docs/guide/u...
oxc.rs
Configuring Oxlint
A collection of high-performance JavaScript tools written in Rust
130
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
Thanks! Maybe I will give Go benchmarks another try. I have tried codspeed, but it only supports walltime benchmarks for now. Although the CPU simulation benchmarks are not accurate to the real-world, it has been useful for getting some consistent numbers. Have you used this successfully in CI?
100
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
If you'd like to reproduce these results: Benchmark command: `hyperfine --ignore-failure --warmup 10 --runs 20 'pnpx oxlint@1.24 --silent' 'pnpx oxlint@1.23 --silent' 'pnpx oxlint@1.22 --silent' 'pnpx oxlint@1.21 --silent'` elastic/kibana@2169baef microsoft/vscode@fa994275
020
Cam McHenry @camchenry.com · 22/10/2025
On the Kibana repository, oxlint 1.24 is 11% faster than v1.23, and up to 26% faster than v1.22 and below!
Hyperfine benchmark showing that oxlint 1.24 is 1.11 times faster than v1.23, 1.26 times faster than v1.22, and 1.27 times faster than v1.21.
230
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
Benchmark command, if you'd like to reproduce this (microsoft/vscode@fa99427534301606eb84c30cd8f7701ac2c35f90): hyperfine --ignore-failure --warmup 5 --runs 20 'pnpx oxlint@1.23 --silent' 'pnpx oxlint@1.22 --silent' 'pnpx oxlint@1.21 --silent' 'pnpx oxlint@1.20 --silent' 'pnpx oxlint@1.19 --silent'
020