Thanks to @notion.com for the $6,000 donation! Amazing to see companies supporting their dependencies in such a big way 🎉
Brad Zacher
@brad.zacher.com.au
Computer scientist. Cider drinker. Dungeon Master. Maintainer of @typescript-eslint.io Software Engineer @ Canva. https://zacher.com.au
Used an agent for profiling for the first time today. It was pretty cool to let it just run some tools and try to find some potential improvements. It came up with some vague suggestions I was able to grow and iterate on for some decent wins!
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!
TypeScript-ESLint v8.53.0 has been released! This release includes a new fixer to remove unused imports. github.com/typescript-e...
📝 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
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
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...
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:
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.
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.
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!
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
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!
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
Today I learned that git and github support emojis in branch names. Do with that information what you will.
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
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
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.
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:
Without downloading any new pics what's your energy going into 2025
without downloading any new pics what’s your energy going into 2025 (Caves of Qud)
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!
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.
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.
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
It's good to know that AI is still a long way off taking my job
I made/maintained a lot of the lint rules people have a love hate relationship with.
"cast"? Sir it's not a cast unless it's from the native region of programming languages. Otherwise it's a sparkling assertion.
I want to CREATE something but all of my energy is being used to merely exist right now
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.
I made an eslint utility that allows finer control over no-restricted-syntax/globals/properties configurations. In a nutshell it generates a plugin that has one rule per selector -- allowing granular disable comments and better auditing! github.com/bradzacher/e...
GitHub - bradzacher/eslint-no-restricted: An eslint plugin for quickly and easily creating no-restricted-syntax rules
An eslint plugin for quickly and easily creating no-restricted-syntax rules - bradzacher/eslint-no-restricted
github.com
👋 Welcome to Bsky, everyone! I'm jumping on the starter pack bandwagon and making one for the static analysis folks around JavaScript/TypeScript. Projects like ESLint, TypeScript, and new fancy versions of them all. Who else should go on it? go.bsky.app/5hwBPTK