Wasm 3.0 coming in hot

Issue #425.September 19, 2025.2 Minute read.
Bytes

Today’s issue: Why the Tesla app is 760 MB, Peter Thiel’s thoughts on signals, and new ways to get supply chain attacked.

Welcome to #425.


Eyeballs logo

The Main Thing

A man with a pigeon's head

I built the app with Wasm, btw

Wasm 3.0 coming in hot

They say that every man under 60 thinks about WebAssembly at least once a day. So I guess I shouldn’t have been surprised when my 13-year-old nephew texted me about the “absolutely stacked” Wasm 3.0 launch on Wednesday.

And he wasn’t wrong. This is arguably the project’s biggest release since dropping v1.0 eight years ago, when they first introduced the concept of a “portable compilation target” for allowing browsers and runtimes to run low-level languages like Rust and C++.

Let’s break down the biggest features:

  • Memory64 – The old 4GB memory ceiling is gone. Wasm modules can now theoretically address up to 16 exabytes. Browsers still cap at 16GB, but this is a massive unlock for game engines, ML workloads, edge compute, and other projects outside the web.

  • Multiple memories – Previously, each Wasm module lived in its own little fridge with its own jar of peanut butter. Now a single module can declare multiple memories and copy directly between them. That makes static linking less painful and opens up cleaner patterns for isolating private data or buffers.

  • Garbage collection + typed references – Higher-level languages like Java, Kotlin, and Dart can now target Wasm more directly thanks to a built-in low-level GC system and richer type system. That enables safer calls, more efficient layouts, and fewer runtime hacks, which is the plumbing you need to make many non-JS languages actually viable in Wasm-land.

  • Other goodies – Native exception handling finally provides a sane way to try/catch in Wasm, tail calls are big for functional language support, and JS string builtins let Wasm modules read and manipulate JavaScript strings directly, without awkward glue code.

Bottom Line: WebAssembly 1.0 gave us the dream of running anything on the web, powering impressive web apps like Figma and Photoshop. Wasm 3.0 is the biggest leap since then – it continues to make the web faster and positions Wasm as a universal execution layer beyond the browser. At least that’s what my nephew’s friends think.


CodeRabbit logo

Our Friends
(With Benefits)

Aang and Zuko touching fists together

CodeRabbit teaming up with Claude to write and fix all my code

CodeRabbit CLI just launched – and it’s free

CLI-based coding agents like Claude Code and Codex are writing more code than ever – but who’s gonna review all that AI-generated code?

That’s where CodeRabbit CLI comes in. It gives you senior-level code reviews directly in your terminal, so your CLI code generation can flow straight into automated validation:

  • Enables pre-commit reviews of both staged and unstaged changes

  • Fits into your existing Git workflow by reviewing uncommitted changes, staged files, specific commits, or entire branches

  • Flags AI hallucinations, code smells, and perf problems, then provides one-click fixes in the command line

Install CodeRabbit CLI for free – and give yourself a quality gate for all the code that Claude, Codex, and Gemini write.


Spot the Bug logo

Spot the Bug

Sponsored by Augment Code

They just announced new MCP integrations with Vercel, Render, Honeycomb, and Heroku, so you can easily connect your agents to them with one click.

const products = [
  { name: "Shirt", price: 20, discount: true },
  { name: "Pants", price: 50, discount: false },
  { name: "Hat", price: 15, discount: true },
  { name: "Socks", price: 5, discount: true },
];

const discountThreshold = 30;
const discountRate = 0.1;

const totalCost = products.reduce((acc, product) => {
  if (product.discount) {
    if (product.price > discountThreshold) {
      acc += product.price * (1 - discountRate);
    } else {
      acc += product.price;
    }
  } else {
    acc += product.price;
  }
}, 0);

console.log(`Total cost: ${totalCost}`);

Cool Bits logo

Cool Bits

  1. phishyurl.com is a URL shortener longener that can make any URL look like a malicious crypto/dating/gambling site. Great for teaching your favorite OSS maintainer about phishing or escalating your cold war with the IT department.

  2. The Expert Guide to Next.js Performance Optimization 2025 is a free, 10-chapter ebook filled with real-life examples and open-source libraries to help you fix bottlenecks and boost performance in enterprise-scale Next.js apps. [sponsored]

  3. The Angular team just open sourced Web Codegen Scorer to help AI models generate better framework code. “Web Components solves this,” he muttered to his stuffed animals in his parents’ spare bedroom.

  4. Expo SDK 54 comes with support for Liquid Glass icons, precompiled React Native for iOS, and more.

  5. In related news, the Emerge Tools team broke down why the Tesla iOS app is 760.3 MB – aka 20% of the original iPhone’s storage capacity.

  6. Blacksmith lets you run GitHub Actions 2x faster than GitHub runners and *75% cheaper*, because they run on bare metal gaming CPUs and optimize all your caching. It also makes your GitHub actions fully observable, so you can actually see when something goes wrong in your CI pipeline. [sponsored]

  7. Matt Brophy wrote about how middleware is finally stable in React Router.

  8. pnpm 10.16 comes with a new security setting called minimumReleaseAge that specifies the number of minutes that must pass after a version is published before pnpm will install it. Because sometimes the difference between a hotfix and a supply-chain attack is about five minutes.

  9. Vercel created mcp-to-ai-sdk, a CLI that generates static AI SDK tool definitions from any MCP server to help address security and quality issues.

  10. Minko Gechev gave a talk called Resourceful Suspense about using templating and signals to implement the suspense pattern in Angular. It’s kind of like the suspense I felt waiting for Peter Thiel to answer challenging interview questions like, “do you want humanity to survive?” and “are you the anti-Christ?”


Spot the Bug logo

Spot the Bug: Solution

Sponsored by Augment Code

Total cost is undefined. The reduce function is missing a return statement. The reduce function should return the accumulator after the iteration is complete.

const products = [
  { name: "Shirt", price: 20, discount: true },
  { name: "Pants", price: 50, discount: false },
  { name: "Hat", price: 15, discount: true },
  { name: "Socks", price: 5, discount: true },
];

const discountThreshold = 30;
const discountRate = 0.1;

const totalCost = products.reduce((acc, product) => {
  if (product.discount) {
    if (product.price > discountThreshold) {
      acc += product.price * (1 - discountRate);
    } else {
      acc += product.price;
    }
  } else {
    acc += product.price;
  }
  return acc;
}, 0);

console.log(`Total cost: ${totalCost}`);