Tom Ballinger
banner
ballingt.com
Tom Ballinger
@ballingt.com
Writing more TypeScript than Rust at Convex
Duboce Triangle in SF
ballingt.com
incredible discovery for the impatient, chicken pot pie plus frozen peas to cool it down
November 2, 2025 at 7:02 AM
Reposted by Tom Ballinger
leaflet.pub/c37b8a8f-f95...

> DNS: an old friend that always takes an extra 20 minutes to do anything
Week 1, or: We Really Love DNS
leaflet.pub
November 1, 2025 at 7:35 PM
Reposted by Tom Ballinger
Exciting progress today! Called with @capt.dev about the React "concurrent stores" prototype, and we brainstormed potential Redux integration issues.

I then whipped up a prototype branch that reworks `useSelector` to use the prototype, and _most_ tests pass!

github.com/reduxjs/reac...
[DRAFT] Initial React "concurrent stores" compat prototype by markerikson · Pull Request #2263 · reduxjs/react-redux
This PR: Is a first prototype to see if we can use the WIP React "concurrent stores" API as a replacement for useSyncExternalStore Added a Yalc-built version of https://github.com/theju...
github.com
October 31, 2025 at 11:06 PM
Reposted by Tom Ballinger
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! 🙂
October 30, 2025 at 2:40 PM
Reposted by Tom Ballinger
March 13, 2025 at 9:52 PM
Reposted by Tom Ballinger
I’m taking a class where we’re learning to make synths. This will be a MIDI controller that we will use to control VCV Rack. It keeps the goblins out my brains.
October 16, 2025 at 2:38 AM
Reposted by Tom Ballinger
📚 Continued writing about @tanstack.com Router this weekend, trying to explain one of the imo best features the router has to offer: Context Inheritance that works in a fully inferred type-safe way across nested routes 🔥
Context Inheritance in TanStack Router
An overview of how TanStack Router automatically shares and infers path params, search params, and context between nested routes in a type-safe way.
tkdodo.eu
October 12, 2025 at 6:52 PM
I tried the same prompt injection demo I showed a couple months ago and @anthropic.com's Claude prevented it this time! Interesting to see progress here.
October 10, 2025 at 6:35 PM
Reposted by Tom Ballinger
Should we ship pre-compiled code (with the react compiler) for React Query v6?
October 8, 2025 at 9:24 AM
Reposted by Tom Ballinger
October 7, 2025 at 7:00 PM
Reposted by Tom Ballinger
Reposted by Tom Ballinger
“[Wasm 3.0] has much better support for compiling high-level programming languages. Enabled by this, we have seen various new languages popping up to target Wasm, such as Java, OCaml, Scala, Kotlin, Scheme, or Dart, all of which use the new GC feature.”
webassembly.org/news/2025-09...
Wasm 3.0 Completed - WebAssembly
WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable compilation target for programming languages, enabling deployment on the...
webassembly.org
September 20, 2025 at 7:34 PM
Reposted by Tom Ballinger
The WebAssembly 3.0 spec is complete!

webassembly.org/news/2025-09...

This includes major features like GC, 64-bit memories, exceptions, and tail calls.
Wasm 3.0 Completed - WebAssembly
WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable compilation target for programming languages, enabling deployment on the...
webassembly.org
September 17, 2025 at 5:04 PM
Reposted by Tom Ballinger
If y’all promise not to ask me for docs or blog posts maybe I’ll explain a bit about why creating a cache API for suspense is so hard
September 15, 2025 at 12:14 AM
Reposted by Tom Ballinger
Any podcasts or streams want to invite me on to talk about React transitions, suspense, and optimistic?
September 11, 2025 at 11:27 PM
Reposted by Tom Ballinger
i wrote a whole thing about wrangling npm dependencies because it's an unglamorous part of the job that's nevertheless really important. also because i wanted to make some watercolor illustrations. blog.val.town/gardening-de...
September 11, 2025 at 4:47 PM
Reposted by Tom Ballinger
Observable Notebook Kit and Desktop 1.3.0 are out, featuring data loader cells. You can now (finally!!) write Python and Node.js in notebooks. 🐍 observablehq.com/notebook-kit...
September 10, 2025 at 3:21 AM
Reposted by Tom Ballinger
death by wrong node version
September 9, 2025 at 3:49 AM
Hey we're hiring for in-person engineering roles in SF. I really enjoy my job and you might too. Come hang out and build developer tools!
September 8, 2025 at 10:45 PM
YouTube
Share your videos with friends, family, and the world
youtube.com
September 7, 2025 at 1:21 AM
Reposted by Tom Ballinger
"In the weeks since, I’ve found myself unable to commit—grammatically, affectively, institutionally. Where once I might have said, 'I teach,' I now say, 'There are moments in which I find myself adjacent to pedagogy.' Friends have grown concerned. My dog, unfed."
I Got Tenure and Now I Can’t Seem to Form Simple Declarative Sentences
When I received the email, I was holding a piece of toast. Dry, no butter. I remember this vividly because it was the last thing in my life with a ...
buff.ly
September 2, 2025 at 6:27 PM
Reposted by Tom Ballinger
Binaryen, the wasm optimizer project, released version 124:

github.com/WebAssembly/...

Many changes here, including support for several new wasm features:

* Compilation Hints and Branch Hinting
* Stack Switching
* Custom Descriptors

& many new wasm-opt optimizations
github.com
September 2, 2025 at 8:26 PM
Reposted by Tom Ballinger
me, a relentless refactorer

webpro.nl/hire-me

i have 1 or 2 days a week availability to untangle & fresh up any JavaScript or TypeScript codebase ✂️
August 28, 2025 at 7:16 PM
Does everyone know about conveyor belt sushi??
August 31, 2025 at 3:25 PM
Reposted by Tom Ballinger
"how does .decode() differ from .parse()?"

good question! they're identical at runtime, but their type signatures differ in an important way.

unlike .parse()—which accepts `unknown` input—decode and encode expect strongly-typed inputs
August 26, 2025 at 12:44 AM