Brad Zacher
banner
brad.zacher.com.au
Brad Zacher
@brad.zacher.com.au
Computer scientist. Cider drinker. Dungeon Master.
Maintainer of @typescript-eslint.io
Software Engineer @ Canva.

https://zacher.com.au
We added a fixer for unused imports to no-unused-vars! By default it's a suggestion fixer - but you can swap it to an autofixer (for autofix-on-save or --fix).

Please try it out today!
January 13, 2026 at 7:20 AM
Reposted by Brad Zacher
📝 New blog post: Revamping the `ban-types` rule.

For many years, ban-types was one of our more prominent rules. We split it into targeted rules that better addressed common user needs. Read on for how it came to be & what those new rules do better!

typescript-eslint.io/blog/revampi...
Revamping the `ban-types` rule | typescript-eslint
How the now-deprecated `ban-types` rule evolved over time to what is now several newer, targeted rules.
typescript-eslint.io
January 5, 2026 at 7:48 PM
github.com/tmikov/imgui...

Tzvetan had already done it as part of this toy example!
GitHub - tmikov/imgui-react-runtime: React + Dear ImGui + Static Hermes
React + Dear ImGui + Static Hermes. Contribute to tmikov/imgui-react-runtime development by creating an account on GitHub.
github.com
December 30, 2025 at 5:42 AM
If you look closely and squint you can just barely make out which week I landed several hundred PRs to migrate some of Canva's codebase to isolatedDeclarations
December 27, 2025 at 9:28 PM
I have setup my first "home lab" with proxmox!

For my first VM I setup a remote devbox! It took waaaay longer to get it working than I'd care to admit... But I can connect to it via vscode and everything!

Now to spin up a few more VMs for things I've always wanted to run...
December 23, 2025 at 2:22 PM
So I needed to generate an SSH key and add it for my local user and then it let me connect.

Then I had a doozy of a time getting my remote ssh key uploaded cos I didn't have any file upload or ssh connection. I had to upload it via CURL 😱

But it's uploaded now and I have vscode connected!
December 23, 2025 at 12:40 PM
I wish it were that simple - I was getting public key errors even when doing `ssh localhost` 😭

So there's some other stuff with keys I need to setup.
December 23, 2025 at 8:18 AM
Has anyone got a good guide to setting up a Ubuntu machine to accept (local) SSH connections?

Configuring the base image from scratch is not super easy when you've never done it before :harold:
December 23, 2025 at 6:48 AM
But we have the same amount of types (possibly more...?) in the estree union and I haven't noticed the bad perf.

But maybe our codebases are just small enough that the cost at scale hasn't hit us bad enough to notice.
December 22, 2025 at 9:55 PM
That's not to say megamporphism wouldn't come into play in, say, an ESTree codebase - but I feel like things would probably trend towards each kind having its own hidden classes?

I dunno would require some investigation to analyse and understand of course.
December 22, 2025 at 9:25 PM
I also feel like the TS codebase was a bit weird with how it did disjoint unions given it mostly passed around `ts.Node` which was not a union type and then relied on type guard fns and type assertions to change the type.

It wasn't really a "standard" disjoint union usecase.
December 22, 2025 at 9:25 PM
I can't find anything specifically citing alcoholism and a number - that was an incorrect extrapolation on my part.
December 22, 2025 at 12:11 PM
On researching it appears I have misremembered numbers. At least in the US "heavy drinking" is categorised as 7 or 8 or more per week for women and 14 or 15 for men (depending on source).

And those classed as heavy drinkers have a "marked increased" likelihood of "alcohol related harms".
December 22, 2025 at 12:11 PM
Which is why you don't be a silly billy and you use a switch instead ;) then it gets optimised into a jump table by e engine for fast perf!
December 22, 2025 at 8:58 AM
It is my understanding that hidden classes and megamorphism shouldn't apply to tagged unions so long as you're not actively mutating the objects to add properties to them.

AIUI the HC can still be created so long as the object shape per tag is consistent and unchanging.
December 22, 2025 at 7:54 AM
6 pints a week isn't "that much" for a lot of people. Many people will have eg a glass of wine each night with dinner without batting an eye or realising that's technically alcoholisim.

So the average isn't that surprising to me.
December 22, 2025 at 6:45 AM
Okay I just got a Beelink SER9 for use as my remote devbox and server host.

Now to figure out how to install linux on it... boy it's been a long while since I've done this.
December 21, 2025 at 11:03 AM
I remapped it to "option+tab" on macos and my life has been so much better since.

No more fighting between (correct) IDE autocomplete and (incorrect) AI autocomplete.
December 16, 2025 at 1:40 PM
We don't want your contribution if you're just a middleman!

We could tag copilot on issues and let it run and create a PR without you in the middle pretending to be part of the process.

Don't pretend you're contributing. Do the work (with the AI sure) and learn and contribute!
December 11, 2025 at 9:09 PM
This isn't just limited to PR either - we've seen the same behaviour with issues.

I recently saw one user file a few issues that were clear and obvious output from asking the agent to plan out a piece of work.

They filed an issue with well over 1000 words!
And the responses...
December 11, 2025 at 9:09 PM
We've seen a number of people that are literally just acting as an agent middleman.

They're asking an LLM to file a PR and then when we leave review comments they're copy pasting our comments into a chat window and copy pasting the responses.

It's disappointing, honestly.
December 11, 2025 at 9:09 PM
If I ever see someone's comment and it says "you're absolutely right" I now automatically assume that they are either an LLM bot or that they're copy pasting from one.

It's such a shame that we have to deal with this slop contribution in our opensource projects.
December 11, 2025 at 9:09 PM
The thing both tools have is perf - which directly translates to saved $$$ (both CI time and dev productivity).

It's easy to justify investing in doing a linter migration that wins huge perf and features.
It's hard to justify investing in doing the v8-v9 migration which "only" wins more features.
December 10, 2025 at 8:56 PM
Yes eslint added 25m to the download count - but that was "only" 50% growth. But Biome grew by 300% and oxlint by 600%.

If more companies take the leap and migrate next year then I'd expect to see sponsorship migrate too.
December 10, 2025 at 8:55 PM
Biome grew from 3.2% to 6% of eslint's download count.
Oxlint grew from 0.25% to 1%

The raw numbers are easy to dismiss - the relative percentages tell a different story and show that these tools are growing at a high rate
December 10, 2025 at 8:55 PM