Surma
surma.dev
Surma
@surma.dev
DX & monorepo at Shopify.
Craving simplicity, finding it nowhere.
Internetrovert 🏳️‍🌈 He/him.
Pinned
Surma @surma.dev · Jun 17
📝 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/langg...
LangGraph for complex workflows — surma.dev
I may be late to the party, but LangGraph lets you build complex workflow architectures and codify them as powerful automations. Also LLMs, if you want. But you don’t have to!
surma.dev
What a flex :D

Fwiw, it was similarly easy on the spec side. The algorithm was fully spec’d, just not attached to any globals. And after the spec was written, it took 3 years or something for browsers to go “well I suppose this is kinda useful?” 😂
October 23, 2025 at 11:56 AM
Reposted by Surma
do you like geology puns and have an unhealthy obsession with package management? 🌋📦

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...
Software Engineer - Monorepo Systems (Rust & Nix)
ARE YOU READY? Join the fully-remote rocketship. Find your next quest to make commerce better for everyone. Unlimited growth. Crafters and hard workers only. Apply within.
www.shopify.com
October 16, 2025 at 2:56 PM
Thank you!! Fixed :)
October 16, 2025 at 9:06 PM
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! DM me if you have questions!

www.shopify.com/careers/soft...
Software Engineer - Monorepo Systems (Rust & Nix)
ARE YOU READY? Join the fully-remote rocketship. Find your next quest to make commerce better for everyone. Unlimited growth. Crafters and hard workers only. Apply within.
www.shopify.com
October 16, 2025 at 4:20 PM
Reposted by Surma
I dug into progressive image rendering and found a bunch of common assumptions aren't quite true.

➡️ 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...
The present and potential future of progressive image rendering
Exploring progressive image rendering across JPEG, PNG, WebP, AVIF, and JPEG XL.
jakearchibald.com
October 16, 2025 at 10:16 AM
It can handle 400 megapixel manga like no other
October 7, 2025 at 4:42 PM
JSConf.eu throwback for me
September 27, 2025 at 6:03 PM
Take a look at ImHex!!
September 14, 2025 at 8:31 PM
This is so perfect for you. Can't wait to see you crush it.
September 13, 2025 at 8:38 AM
Alternativprojektsinterressantheitsverstärkung
September 10, 2025 at 7:21 AM
`enum` yes, `const enum` no. Gotta love TS sometimes :3
September 9, 2025 at 11:04 AM
You know your JS13k submission is going well when you have to resort to `btoa` and other seemingly stupid hacks to get below the file size limit.
September 9, 2025 at 9:45 AM
Reposted by Surma
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
surma.dev Surma @surma.dev · Sep 4
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)
September 6, 2025 at 3:37 PM
For now, I established the convention the the parameters must be pointers to byte arrays containing UTF-8 encoded JSON strings. I think that’s actually quite feasible.

But the real deal would be to use the Wasm component model imo
September 4, 2025 at 4:03 PM
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)
September 4, 2025 at 2:44 PM
Reposted by Surma
📝 Making XML human-readable without XSLT.

Turns out, JavaScript works pretty well!

jakearchibald.com/2025/making-...
Making XML human-readable without XSLT
JavaScript is right there.
jakearchibald.com
September 2, 2025 at 5:23 PM
I guess I grouped all kinds of implementation bugs into the "interoperability" category. Probably not super fair to folks working on interop 😅
August 27, 2025 at 4:38 PM
I had to learn it for my UK citizenship test. I didn't do very well, just barely enough to pass.
August 27, 2025 at 4:37 PM
I mean, something working in one browser and not the other is a failure of either interoperability or specification.
August 27, 2025 at 4:33 PM
The thing is that Firefox on iOS is not even Firefox. But whenever I see multiple rAF's nested, especially with a setTimeout sprinkled in, I gotta summon Jake.
August 24, 2025 at 9:35 AM
August 24, 2025 at 9:24 AM
Reposted by Surma
Starting my new role on Monday. Could be anywhere.
July 31, 2025 at 12:57 PM
Reposted by Surma
ECMAScript excitement 😉

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 👍
July 30, 2025 at 6:56 AM
Super happy with hyperoptic
July 24, 2025 at 9:26 PM