Rusty runtimes

Issue #424.September 17, 2025.2 Minute read.
Bytes

Today’s issue: Hosting websites on your vape, killing frontend innovation, and avoiding supply chain attacks by worshipping The Maker.

Welcome to #424.


Eyeballs logo

The Main Thing

A scary castle at night

Looking forward to my first Rust meetup!

Rusty runtimes

Meet Andromeda. No, that’s not the name of a creepy AI companion designed to prey on Facebook’s loneliest boomers – it’s a hot new JS/TS runtime that’s fully built in Rust.

It’s also powered by the Nova JS Engine and Oxc and is specifically designed for scripts, utilities, and applications that “need to run fast without the complexity of traditional Node.js setups.”

But do we really need another JavaScript runtime? As someone who just wrote a 350-word story about Deno last week, this was my first question too.

According to the Andromedites, the answer is a resounding yes for a few key reasons:

  • Zero-config TypeScript + web standards – Runs .ts files directly with no build step needed, and comes with built-in support for Fetch, Web Crypto, localStorage, and other browser-y APIs.

  • GPU-accelerated graphics – Unlike Node, Deno, and Bun (which don’t touch graphics without browser APIs or heavy libs), Andromeda bakes in a WGPU-powered Canvas API. That lets realtime dashboards and animations run on the GPU out of the box, so you get high-performance graphics and less jank.

  • Rust + Nova performance – Gives you a memory-safe foundation plus sub-10ms startup times, efficient memory management, and multi-threaded execution.

  • All-in-one toolchain – Comes with a REPL, bundler, linter, formatter, compiler, profiler, updater, and language server all baked right in

Bottom Line: Andromeda isn’t trying to replace Node in your giant enterprise app, but if you want a modern, batteries-included runtime for lightweight services or GPU-powered visuals, it might just be the perfect companion after all.


rocket-logo.png

Our Friends
(With Benefits)

Courage the Cowardly dog meditating in front of his computer

Me learning to practice trust with my coding agents

Rocket lets you build powerful apps with a prompt

It’s a full-stack vibe coding platform that lets you turn any idea into a deployable web app, mobile app, internal tool, or landing page in minutes.

And unlike lots of other tools that stop at screens, Rocket builds out the full UI, backend logic, navigation, AI features, and more – all with clean code you can understand and control.

You can start with a prompt, or by uploading a screenshot or Figma file, and you’ll get:

  • Comprehensive app generation on the first try
  • Smart templates and AI-assisted flows for rapid iteration
  • Smooth integrations with Supabase, Netlify, Stripe, GitHub, LLM providers, and more
  • Clean code that’s ready to merge

See Rocket in action – and get 1 million free tokens to start building your first app.


Spot the Bug logo

Spot the Bug

Sponsored by Datadog

Their free ebook on 5 proven ways to reduce container costs gives you practical ways your team can avoid wasting money on idle resources.

class TreeNode {
  constructor(value) {
    this.value = value;
    this.left = null;
    this.right = null;
  }
}

function treeDepth(node) {
  let leftDepth = treeDepth(node.left);
  let rightDepth = treeDepth(node.right);
  return Math.max(leftDepth, rightDepth) + 1;
}

let root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);

console.log("Depth of the tree:", treeDepth(root));

Cool Bits logo

Cool Bits

  1. New npm supply chain attack just dropped. They’ve dubbed this one “Shai-Hulud” because the only way to escape it is to do a funky Crip Walk through the desert at night.

  2. Auth0 built a complete auth solution for GenAI apps that gives you a secure token vault, authorization for async agents, and user auth that allows agents to identify your users. Try it for free today. [sponsored]

  3. Bogdan Ionescu wrote about hosting a website on a disposable vape. That must be why those high school kids keep asking me to buy them vapes on my way into 7-11 every day.

  4. Jake Archibald wrote about how fetch streams are great, but not for measuring upload/download progress.

  5. GitHub just launched a new MCP registry, and it’s managed to go almost 24 hours without being hacked so far.

  6. Sergiy Dybskiy wrote an article on the Sentry blog about the top-10 core KPIs of LLM performance and how to track them. [sponsored]

  7. Michael Lynch wrote about his first impressions of Gleam – the Elixir-like programming language, not the scary glow-in-the-dark toothpaste I impulse-bought on Temu for $0.28.

  8. RustGPT is a complete LLM implementation written in “pure Rust” with no external ML frameworks.

  9. Mike and Oskar wrote about how to use Liquid Glass in React Native, so you can repeatedly trick your users into thinking they spilled water on their phones.

  10. CarbonQA provides high-quality QA services for dev teams, so you’ll never have to test your own app again. Their US-based testers work in your tools, talk with your team on Slack, and let your devs be devs. [sponsored]

  11. The Safari team wrote about all the new WebKit features in Safari 26.0.

  12. Loren Stewart wrote about how React won by default and is killing frontend innovation – similar to how I won my third-grade science fair “by default” after all the other kids’ projects were mysteriously sabotaged the night before. Most unfortunate.


Spot the Bug logo

Spot the Bug: Solution

Sponsored by Datadog

The code will throw a TypeError because the treeDepth function is not handling the base case. The base case should be when the node is null, in which case the function should return 0.

class TreeNode {
  constructor(value) {
    this.value = value;
    this.left = null;
    this.right = null;
  }
}

function treeDepth(node) {
  if (node === null) return 0;
  let leftDepth = treeDepth(node.left);
  let rightDepth = treeDepth(node.right);
  return Math.max(leftDepth, rightDepth) + 1;
}

let root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);

console.log("Depth of the tree:", treeDepth(root));