DX & monorepo at @ShopifyEng Craving simplicity, finding it nowhere. Internetrovert 🏳️‍🌈 He/him.

Bristol, UK
📝 First blog in a long time! 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/langgraph/
5
10
84
14,597
Surma retweeted
I vibe-coded a kernel module for FreeBSD that uses GitHub's downtime as an entropy source github.com/DominoTree/ghrand…
14
42
792
27,164
Me: Review your own code changes using subagents GPT 5.6 Sol:
6
29
6,519
This is what I have been working on! Shopify’s monorepo “world”, its nixification, building our Slack-based agent River and now generalizing River’s underlying agentic sandbox infrastructure called Aquifer. Finally I got someting I can share about it! shopify.engineering/under-th…
2
2
18
1,552
`builtins.wasm` is now a (experimental) thing in @DeterminateSys’ nix, with a PR open for upstream nix. This lets you extend the nix language by compiling C/C++/Rust/etc into safely sandboxed, platform-independent plugins! determinate.systems/blog/bui…
1
3
25
2,236
This became real a lot quicker than I thought 😂 There's also a talk about this tomorrow at PlanetNix!
Nix friends: How terrible is this idea? 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)
6
1,523
do you like geology puns and have an unhealthy obsession with package management? 🌋📦 we’re building a nix-based monorepo build system (in @rustlang) at @Shopify and we’re hiring. global, remote, high-autonomy. DMs open. shopify.com/careers/software…
1
2
11
4,731
I dug into the state of progressive image rendering and found: ➡️ Safari renders JPEG differently (worse imo) ➡️ Progressive AVIF is possible in Chrome ➡️ Progressive JPEG XL isn't possible in Safari ➡️ JPEG XL decodes worryingly slow ➡️ Progressive doesn't solve responsive imgs
3
11
106
11,484
I have been working on the nix & Rust codebase that builds @Shopify’s monorepo, and there’s so much left to do that we need help. If you are interested, apply here to join us at @ShopifyEng! DM me if you have questions! shopify.com/careers/software…
1
7
29
4,423
if this type of thing makes you say “this is cursed af, where do i sign up” DM me, we’re looking for some teammates
Nix friends: How terrible is this idea? 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)
3
5
41
12,903
You know your @js13kGames submission is going well when you have to resort to `btoa` and other seemingly stupid hacks to get below the file size limit.
2
2
28
3,737
Nix friends: How terrible is this idea? 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)
4
2
44
14,337
Convince me I am wrong: This should not be a type error, right? - I asserted it’s an object - I am using `?.` for property access typescriptlang.org/play/?#co…
16
17
6,143
CSS uses a complex algorithm to decide how to animate transforms. If you get it wrong, as many folks do, you end up with an unnatural animation. Here's how it works, and how to avoid the pitfalls. jakearchibald.com/2025/anima…
15
60
439
42,212
Unexpected dangers of vibe coding: Somehow git ended up tracking its own .git folder and now I can't commit anymore :3
11
4
122
11,106
Folks who know their way around the TypeScript type checker, I need help: 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.
1
6
3,482
Wait, am I dumb? What does NodeJS' WASI implementation only accept file descriptor numbers for stdio? Why don't they allow a Readables/Writables? How are you supposed to capture the output of a WASI module? nodejs.org/api/wasi.html#new…
3
16
5,502
🔊 It's new OTMT time! Me and @DasSurma chat through some newer View Transitions features that have recently landed in browsers, and some things that might land this year. ⬇️ Pop this in your ears ⬇️ offthemainthread.tech/episod…
2
8
44
7,993
Surma retweeted
Ooh just caught this #OTMT episode on customizable select 😎 Always love to hear @DasSurma and @jaffathecake chat about the web (and especially the features I’ve been working on for the past few years) 🥰 offthemainthread.tech/episod…
1
2
27
7,636
Dominic asked me to look at learn-wasm.dev ahead of time and I think it’s an excellent (and interactive!) learning resource! More importantly, tho: @elmd_ wanted to hear all my feedback, which means he really cares about teaching the subject, not just getting paid.
🚀 Thrilled to announce my interactive #WebAssembly course! Learn WebAssembly from the ground up with: 🔍 Custom-built debugger & VM 📊 Live stack & memory insights 💻 Hands-on exercises 🛠️ Build real projects Level up with WebAssembly! ✨ Link below 👇
1
6
50
4,468