Craving simplicity, finding it nowhere.
Internetrovert 🏳️🌈 He/him.
I always like “flow-based” programming, and it’s a very powerful paradigm. LangGraph lets you codify complex workflows as graphs, and also integrates really well with LangChain, if your workflow is LLM-driven.
surma.dev/things/langg...
we’re building a nix-based monorepo build system (in Rust!) at Shopify and we’re hiring.
global, remote, high-autonomy. DMs open.
www.shopify.com/careers/soft...
we’re building a nix-based monorepo build system (in Rust!) at Shopify and we’re hiring.
global, remote, high-autonomy. DMs open.
www.shopify.com/careers/soft...
If you are interested, apply here to join us! DM me if you have questions!
www.shopify.com/careers/soft...
If you are interested, apply here to join us! DM me if you have questions!
www.shopify.com/careers/soft...
➡️ JPEG & WebP progressive-renders worse in Safari
➡️ AVIF _does_ support progressive
➡️ But JPEG XL in Safari doesn't
➡️ JPEG XL decodes much slower than AVIF
⬇️ and more
jakearchibald.com/2025/present...
➡️ JPEG & WebP progressive-renders worse in Safari
➡️ AVIF _does_ support progressive
➡️ But JPEG XL in Safari doesn't
➡️ JPEG XL decodes much slower than AVIF
⬇️ and more
jakearchibald.com/2025/present...
I added `builtins.runWasm` to nix, allowing you to call out to Wasm. The Wasm is reset every time, so the functions remain pure. This gives you a (performant?) escape hatch for things that Nix is missing. E.g parsing YAML (here: via Rust)
I added `builtins.runWasm` to nix, allowing you to call out to Wasm. The Wasm is reset every time, so the functions remain pure. This gives you a (performant?) escape hatch for things that Nix is missing. E.g parsing YAML (here: via Rust)
I added `builtins.runWasm` to nix, allowing you to call out to Wasm. The Wasm is reset every time, so the functions remain pure. This gives you a (performant?) escape hatch for things that Nix is missing. E.g parsing YAML (here: via Rust)
Turns out, JavaScript works pretty well!
jakearchibald.com/2025/making-...
Turns out, JavaScript works pretty well!
jakearchibald.com/2025/making-...
Congrats to @bakkot.com on advancing UInt8Array ↔️ Base64/Hex to Stage 4 at TC39 this week 🎉
UInt8Array.prototype.
toBase64
toHex
UInt8Array.
fromBase64
fromHex
It lets you convert directly between binary data and Base64/Hex strings 👍
Congrats to @bakkot.com on advancing UInt8Array ↔️ Base64/Hex to Stage 4 at TC39 this week 🎉
UInt8Array.prototype.
toBase64
toHex
UInt8Array.
fromBase64
fromHex
It lets you convert directly between binary data and Base64/Hex strings 👍
infrequently.org/2025/07/links/
infrequently.org/2025/07/links/
- I asserted it’s an object
- I am using `?.` for property access
www.typescriptlang.org/play/#code/G...
- I asserted it’s an object
- I am using `?.` for property access
www.typescriptlang.org/play/#code/G...
Here's how it works, and how to avoid the pitfalls.
jakearchibald.com/2025/animati...
Here's how it works, and how to avoid the pitfalls.
jakearchibald.com/2025/animati...
I always like “flow-based” programming, and it’s a very powerful paradigm. LangGraph lets you codify complex workflows as graphs, and also integrates really well with LangChain, if your workflow is LLM-driven.
surma.dev/things/langg...
I always like “flow-based” programming, and it’s a very powerful paradigm. LangGraph lets you codify complex workflows as graphs, and also integrates really well with LangChain, if your workflow is LLM-driven.
surma.dev/things/langg...
Somehow git ended up tracking its own .git folder and now I can't commit anymore :3
Somehow git ended up tracking its own .git folder and now I can't commit anymore :3
gist.github.com/surma/be14ca...
How do I figure out what types the type parameters have been bound to given a `CallExpression`? I know the answer is in `resolvedSignature.mapper`, but that’s not a public API.
gist.github.com/surma/be14ca...
How do I figure out what types the type parameters have been bound to given a `CallExpression`? I know the answer is in `resolvedSignature.mapper`, but that’s not a public API.
nodejs.org/api/wasi.htm...
nodejs.org/api/wasi.htm...
⬇️ Pop this in your ears ⬇️
offthemainthread.tech/episode/new-...
⬇️ Pop this in your ears ⬇️
offthemainthread.tech/episode/new-...
offthemainthread.tech/episode/styl...
offthemainthread.tech/episode/styl...
🎧 Part II of the TC39 Drama 🌶️ Roundup is now out!
In this one, I talk to @jakearchibald.com about JS0, which proposes to split JavaScript into two specifications.
offthemainthread.tech/episode/tc39...
🎧 Part II of the TC39 Drama 🌶️ Roundup is now out!
In this one, I talk to @jakearchibald.com about JS0, which proposes to split JavaScript into two specifications.
offthemainthread.tech/episode/tc39...
🎧 Part II of the TC39 Drama 🌶️ Roundup is now out!
In this one, I talk to @jakearchibald.com about JS0, which proposes to split JavaScript into two specifications.
offthemainthread.tech/episode/tc39...
🎧 Part II of the TC39 Drama 🌶️ Roundup is now out!
In this one, I talk to @jakearchibald.com about JS0, which proposes to split JavaScript into two specifications.
offthemainthread.tech/episode/tc39...
The TC39 Roundup 🌶️ Drama Edition — Part I
I talk to @jakearchibald.com about the TC39 Structs proposal and how it is a big step towards shared-data multithreading in JS.
offthemainthread.tech/episode/tc39...
The TC39 Roundup 🌶️ Drama Edition — Part I
I talk to @jakearchibald.com about the TC39 Structs proposal and how it is a big step towards shared-data multithreading in JS.
offthemainthread.tech/episode/tc39...
A while ago we talked about Bazel, and now it's time to take a closer look at Nix! How does it work? Is it any good for web development? In this episode, @jakearchibald.com and I try to provide answers.
offthemainthread.tech/episode/nix/
A while ago we talked about Bazel, and now it's time to take a closer look at Nix! How does it work? Is it any good for web development? In this episode, @jakearchibald.com and I try to provide answers.
offthemainthread.tech/episode/nix/