I’m Nick Babcock, a software engineer with 10+ years of fullstack and DevOps experience earned as the principal developer on flagship products.

You might know me from my open source work, or from one of my many articles covering topics from authoring Wasm libraries to intricacies in Rust to edge compute to React component design.


There's always a niche: rawzip and the cost of ergonomics

rawzip is a minimalist Rust zip archive parser with zero dependencies, allocations, copies, and unsafe code, built to handle massive archives where existing libraries showed 15x–15000x more overhead. This is the story of the niche it fills and why ergonomics have an invisible cost.

Read more...


When React strict mode meets a one-way door

I’ve built several applications with transferring offscreen canvases to web workers in React, and the strict mode has been continual sticking point that LLMs seem inadequate in, so I figured I’d type up my thoughts.

Read more...


Wasm is not an implementation detail

Stop inlining Wasm as base64 and using top level awaits. Learn why treating WebAssembly as an implementation detail hurts performance and how to properly bundle for Cloudflare, SIMD, and modern runtimes.

Read more...


The serde optimization gauntlet: Wasm and arenas

Arena allocators are having a bit of a moment. I’m often hearing about them. I have a data model that is deserialized from 200MB of binary data in the browser via Wasm and performance is a key feature. Could arena allocators be a good fit?

Read more...


Life after wasm-pack: an opinionated deconstruction

Wasm-pack, the rustwasm working group, and other Wasm related tools were sunset and archived in July 2025, after more than 5 years of being on life support. Since wasm-pack can be seen as an abstraction layer over several tools, what is an effective way to peel back this layer and use the tools directly?

Read more...


Top-level await is a footgun: The Wasm worker edition

Web workers that load Wasm through an ES6 import with the help of bundler plugins can silently drop messages during startup. This happens because the top level await for Wasm’s asynchronous initialization blocks the worker’s message handler registration, creating a race condition that’s often invisible.

Read more...


Are SIMD gather instructions underrated?

SIMD gather instructions seem incredibly useful, and I’ve measured they improve performance by 3x. If compiler can auto vectorize the equivalent scalar code, they must be underrated right?

Read more...


The DuckDB and Arrow rabbit hole: data modeling adventures

I didn’t understand the hype around Duckdb until recently, where I wanted to share data and Duckdb was the perfect fit. While powerful, it has rough edges, such as limited ecosystem support for tagged unions and substantial Wasm payload sizes for web deployment. Still, DuckDB has me excited to revisit how I structure bespoke data queries.

Read more...


A Bevy app entirely off the main thread

There are several options for how to structure a Bevy app for the web. I’m a proponent of shifting as much as possible to web workers, but shifting an entire Bevy app to a web worker is going to require elbow grease as we ditch the builtin windowing system.

Read more...


Wasm's curious word size and the SWAR advantage

Journey through WebAssembly’s architectural quirk: 32-bit addressing with 64-bit operations.How does this impact SWAR techniques to turn this unusual combination into a performance advantage? Let’s benchmark this bit wizardry in a whitespace skipping scenario!

Read more...