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
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
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
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
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
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
One major issue I've found with package.json imports over tsconfig paths is usage across "boundaries".

A package.json import spec cannot include a file outside the current dir -- eg it can't start with `../`!

They also don't "bubble" through nested package.jsons!
December 8, 2025 at 12:37 AM
My #BazelCon 2025 talk about how Canva used isolatedDeclarations to greatly improve typecheck performance
youtu.be/26CoMExb6FE
Improving Bazel TypeScript Type-Checks With IsolatedDeclarations - Brad Zacher, Canva
YouTube video by BazelCon
youtu.be
November 14, 2025 at 8:48 PM
It's been a great few days in Atlanta for #BazelCon. Met lots of great people. Learned a bunch about bazel and the community around it. And (finally) gave my first conference talk!
November 13, 2025 at 4:41 PM
Reposted by Brad Zacher
Folks ask us in @typescript-eslint.io about typed linting perf optimizations often. There's a lot of work we *want* to do but can't - so we put our deep explainer in an issue.

github.com/typescript-e...

Enjoy!
Typed linting optimizations blocked by ESLint core · Issue #11677 · typescript-eslint/typescript-eslint
Suggestion tl;dr: We get asked pretty frequently about improving the state of cross-file linting, e.g. typed linting, in ESLint core. Most requests are around performance, with others around core E...
github.com
October 3, 2025 at 12:25 PM
Today I learned that git and github support emojis in branch names. Do with that information what you will.
September 11, 2025 at 4:05 AM
We've had a few people ask about type-aware linting, eslint's new concurrent linting mode, and why they don't play well together. So we (the ts-eslint team) wrote a short post breaking down why and the design limitations we're constrained by.

github.com/typescript-e...
Interaction with multithread linting · typescript-eslint typescript-eslint · Discussion #11568
Body ESlint v9.34.0 has added support for multithread linting: https://eslint.org/blog/2025/08/multithread-linting/ One word that isn't mentioned in that blog post is "TypeScript." If you use linti...
github.com
September 6, 2025 at 1:11 PM
TypeScript-ESLint v8.42.0 has been released!

This is our first release with npm provenance!
Shoutout to @jameshenry.bsky.social for the hard work securing our release pipeline.

github.com/typescript-e...
Release v8.42.0 · typescript-eslint/typescript-eslint
8.42.0 (2025-09-02) 🚀 Features deprecate tseslint.config() (#11531) 🩹 Fixes deps: update eslint monorepo to v9.33.0 (#11482) typescript-eslint: handle non-normalized windows paths produced by ji...
github.com
September 2, 2025 at 2:30 PM
Been seeing an uptick in what are clearly vibe-coded PRs. On the surface this seems great -- more contributors!

But in the reality it's often AI slop that the person hasn't reviewed and instead the burden of review is on us, the maintainers -- which is a horrible trade.
July 23, 2025 at 11:29 PM
I asked cursor's AI agent to try to create a small TUI form.
It went HORRIBLY. After a while it declared the task as done despite numerous compiler errors.

When I told it that it wasn't done. This was the agent's response:
February 12, 2025 at 8:44 PM
Without downloading any new pics what's your energy going into 2025
December 28, 2024 at 7:47 AM
I've been doing a bunch of work on a meta-linter of sorts and so I need to ingest results from many different linters.

A really painful problem I've discovered recently is that nobody is consistent about how to define a "location" in text. It's a surprisingly complex space to try and reconcile!
December 12, 2024 at 12:51 AM
I finally started using copilot a few weeks ago. As a skeptic I didn't think that I'd like it so I was surprised to find I actually have found value in it.

(Humble brag) I've met very few people who can pump out code as fast as I can. So I didn't think that copilot would really make me much faster.
November 26, 2024 at 10:04 PM
The most frustrating thing about providing support to someone is when they use words like "this / that / it".

I tried that, but it errored

Tried what? What error?
Show what you tried!
There's a good chance you did "it" wrong!
After all that's why you're asking for help.
November 25, 2024 at 10:17 PM
Reposted by Brad Zacher
TypeScript-ESLint v8.15.0 has been released!

This release includes:
- a fix for the recent crash introduced with ESLint v9.15.0
- support for arrays in `tseslint.config` (no more spreads necessary!)
- a new rule `no-unsafe-type-assertion`
- and more...!

github.com/typescript-e...
Release v8.15.0 · typescript-eslint/typescript-eslint
8.15.0 (2024-11-18) 🚀 Features eslint-plugin: added related-getter-setter-pairs rule (#10192) eslint-plugin: new rule no-unsafe-type-assertion (#10051) eslint-plugin: [prefer-nullish-coalescing] f...
github.com
November 18, 2024 at 5:44 PM
It's good to know that AI is still a long way off taking my job
November 14, 2024 at 4:07 AM
I made/maintained a lot of the lint rules people have a love hate relationship with.
November 10, 2024 at 7:47 AM
Reposted by Brad Zacher
"cast"?

Sir it's not a cast unless it's from the native region of programming languages.
Otherwise it's a sparkling assertion.
November 10, 2024 at 5:13 AM
Reposted by Brad Zacher
I want to CREATE something but all of my energy is being used to merely exist right now
November 7, 2024 at 8:15 PM
Reposted by Brad Zacher
Thanks for filing this issue. We generally look at bug reports in order of most-succinct repro to most-complex repro. We have currently scheduled this one for three weeks after the heat death of the universe.
November 7, 2024 at 11:38 PM