Bytes

Today’s issue: Porting Mac OS X to the Nintendo Wii, the Tech N9ne of TanStack, and 5 simple Git commands to impress the love of your life (you’ll never guess #3!!).

Welcome to #477.


Eyeballs logo

The Main Thing

A demon costume riding on the subway

React Native animations riding on the main JS thread

React Native solves some real problems

While Anthropic was busy locking down its new doomsday model with the help of the big tech oligarchy, React Native was over here shipping a new release that actually fixes some real problems developers have been complaining about for years.

The headlining feature is the new Shared Animation Backend that finally solves one of RN’s most frustrating animation headaches.

The problem: Previously, layout props like width, height, and flex couldn’t be animated via the native driver at all. They instead required a layout pass through Yoga, so RN forced them onto the JS thread where frame drops live.

The new backend provides a unified internal engine that both the core Animated API and Reanimated run on, replacing two separate reconciliation stacks with one well-tested core. Layout props can now animate via the native driver, and Reanimated gets performance optimizations that simply weren’t possible before.

The rest of this release packs in a few more DX goodies:

DevTools got meaningfully better — You can now maintain simultaneous CDP connections from React Native DevTools, VS Code, and AI agents without sessions stomping on each other

Metro now supports TLS — HTTPS and WSS during local dev, so testing against secure APIs no longer requires creative workarounds

Jest preset extracted — They moved it to @react-native/jest-preset, which trims the core package and gives teams more testing flexibility

Bottom Line: React Native 0.85 probably won’t grab quite as many headlines as “our new model might have the power to destroy the fabric of society as we know it,” but it will make day-to-day work feel noticeably less janky for RN devs. So still a pretty big win all around.


convex-logo

Our Friends
(With Benefits)

Floating alien God

Coding agents as soon as you let them write Convex

Why are AI agents good at writing Convex?

In theory, they’re supposed to be good at writing everything, but we all know that’s not true.

But with Convex everything usually just works. And Convex cofounder, Jamie Turner made a cool video explaining the 3 big reasons why:

  1. Convex provides feedback
  2. It enables “local reasoning”
  3. It minimizes the meta layer

I would add a bonus 4th reason: it can scale super fast without breaking or charging you a bajillion dollars.

Seth Raphael wrote about how it helped ClawHub scale from zero to 1 million weekly active users in a week without crashing or running up a huge bill.

Watch the full video for more.


Spot the Bug logo

Spot the Bug

Sponsored by Microsoft Build 2026

Skip the fluff. Pressure-test real AI systems, trade implementation details, and leave with patterns you can ship at Microsoft Build 2026. Developer-only, hands-on.

function stressTest() {
  console.time('Total Stress Test Duration');

  const arraySize = Math.pow(2, 32);
  let largeArray = new Array(arraySize).fill(0);

  console.time('Populate Array');
  largeArray = largeArray.map(() => Math.floor(Math.random() * 1000));
  console.timeEnd('Populate Array');

  console.time('Sort Array');
  largeArray.sort((a, b) => a - b);
  console.timeEnd('Sort Array');

  console.time('Filter Even Numbers');
  const oddArray = largeArray.filter(num => num % 2 !== 0);
  console.timeEnd('Filter Even Numbers');

  console.time('Square Numbers');
  const squaredArray = oddArray.map(num => num * num);
  console.timeEnd('Square Numbers');

  console.time('Sum of Numbers');
  const sum = squaredArray.reduce((acc, num) => acc + num, 0);
  console.timeEnd('Sum of Numbers');

  console.timeEnd('Total Stress Test Duration');
}

stressTest();

Cool Bits logo

Cool Bits

  1. Victor Ramirez wrote about how moving Railway’s frontend off Next.js and onto Vite + TanStack Router gave them a “faster, more explicit stack” but also some tradeoffs. Tech N9ne proved you can build a whole career on being faster and more explicit.

  2. Give your app direct access to Google Search data. SerpApi makes it easy to get clean, structured results in real time, so you can build useful data-powered features faster. Plus, with 100+ APIs across Google and many other search engines and platforms, you can access the data you need through a simple API. [sponsored]

  3. Aaron Harper explained why intentionally hanging a JavaScript promise is a legitimate control flow technique.

  4. TanStack shipped Code Mode, which gives your LLM an execute_typescript tool so it can write a TypeScript program to orchestrate all your API calls at once, instead of making seven sequential tool calls and confidently returning the wrong answer.

  5. Henry Garner wrote about how his team surfaced a decades-old bug in the Apollo flight code. No more astronaut ice cream until you guys get this cleaned up.

  6. Agentforce is now in Slack, so your AI agents live where your team already works. It lets you easily automate workflows, get instant answers, and keep your team moving without ever switching apps. [sponsored]

  7. Ally Piechowski shared the 5 git commands they run before reading any code. I just pray it will age better than 8 Simple Rules for Dating My Teenage Daughter.

  8. Boneyard takes a snapshot of your DOM and then auto-generates pixel-perfect skeleton screens with no need for manual placeholders.

  9. Patak and Zeu gave a 35-minute talk about their npmx project - the fast, modern browser for the npm registry.

  10. Bryan Keller wrote about porting Mac OS X to the Nintendo Wii. I can hear my Mii begging for me to take him out to play Wii Tennis one last time 🥲


Spot the Bug logo

Spot the Bug: Solution

Sponsored by Microsoft Build 2026

function stressTest() {
  console.time('Total Stress Test Duration');

  const arraySize = Math.pow(2, 32);
  let largeArray = new Array(arraySize).fill(0);

  console.time('Populate Array');
  largeArray = largeArray.map(() => Math.floor(Math.random() * 1000));
  console.timeEnd('Populate Array');

  console.time('Sort Array');
  largeArray.sort((a, b) => a - b);
  console.timeEnd('Sort Array');

  console.time('Filter Even Numbers');
  const oddArray = largeArray.filter(num => num % 2 !== 0);
  console.timeEnd('Filter Even Numbers');

  console.time('Square Numbers');
  const squaredArray = oddArray.map(num => num * num);
  console.timeEnd('Square Numbers');

  console.time('Sum of Numbers');
  const sum = squaredArray.reduce((acc, num) => acc + num, 0);
  console.timeEnd('Sum of Numbers');

  console.timeEnd('Total Stress Test Duration');
}

stressTest();

The bug is that the array’s size is too large. The maximum size of an array is 2^32 - 1.

// const arraySize = Math.pow(2, 32);
const arraySize = Math.pow(2, 32) - 1;

In ECMAScript, the length property of an array is a 32-bit unsigned integer, which limits the maximum number of entries an array can have. Because the length property represents the number of entries, and it’s zero-based, the maximum length is Math.pow(2, 32) - 1. #themoreyouknow

Bytes
Want us to say nice things
about your company?

Built with ❤️ by Fireship

50 W Broadway Ste 333 PMB 51647 Salt Lake City, Utah 84101

Unsubscribe