React Native is pre-built different

Issue #400.June 12, 2025.2 Minute read.
Bytes

The haters told us it was impossible, but we’ve officially made it to the 400th issue of Bytes and our 5-year anniversary 💃.

What started as me making dumb JavaScript memes in my mom’s basement during the depths of Covid has grown into… me making dumb JavaScript memes in my mom’s basement (but with sponsors now).

In the early days, we used to do a one-question interview where we asked developers, “What will building for the web look like in 5 years?” One of the most prescient replies came from Eve Porcello, who basically predicted vibe coding back in April 2021:

“Building for the web will look like writing specs or documentation. Robots are coming for our jobs, and we can help these overlords by communicating clearly about the experiences that we want to create.”

Since starting this newsletter, I’ve mostly measured time in Bytes issues. And in many ways, it feels harder than ever to predict what building for the web will look like another 400 issues from now (unless you’re Eve, obviously). But I’m hopeful that most of us will still be getting paid to create cool software – whatever that ends up looking like.

Thanks for reading 🫶.


Today’s issue: Perfecting the UI on my Video iPod, using Git at work for the first time, and giving my relationship with Jest a fighting chance.

Welcome to #400 🍾


Eyeballs logo

The Main Thing

Sheen from Jimmy Neutron with crazy eyes

Flutter devs watching WWDC

React Native is pre-built different

The devil works hard, but the React Native team works harder. They just released React Native 0.80 yesterday – which is already their fourth release of 2025 and one more than they had in all of 2024.

Not only did this release help me win that over/under bet I placed on Polymarket (and avoid defaulting on my mortgage), it also introduced two big changes to React Native’s JavaScript API:

  1. Deep imports get deprecated – Removing these subpath imports will help simplify the API and reduce its surface area into a fixed set of exports that RN can control and eventually make stable.

  2. Strict TypeScript API – This is a new set of opt-in TypeScript types that are generated directly from the RN source code to improve type coverage, and they’re restricted to RN’s index file to help define the public API more tightly. This API will become RN’s default API in the future, so look out.

This other major development from this release is new (experimental) prebuilt iOS dependencies that make iOS builds 12% faster. That might not sound super exciting, but the next release promises to ship the entire core as a prebuild, because the RN team finally thinks we deserve nice things.

Bottom Line: Does this mean we’re finally getting closer to a fully stable React Native v1.0 release? I probably wouldn’t hold my breath.

But now that the RN team has doubled their Adderall prescription started pumping out new releases faster than ever, it might come faster than you think.


QA Wolf logo

Our Friends
(With Benefits)

Zendaya holding a phone looking sad and tired

"Looks good on my device"

Make iOS testing simple (and fast)

This week’s Apple WWDC made one thing clear: shipping apps on iOS devices isn’t going to get any easier.

Thankfully, QA Wolf just launched Automated iOS Testing to help your team catch more bugs and speed up your release cycles.

Here’s how it works:

  • They built their own device farm that provides 100% parallel test runs on real iPhones and iPads – so you get pass/fail results in minutes

  • They create tests to cover every gesture, sensor, and UI/UX element in your app – including Apple ID and Apple Pay features

  • They investigate all test failures, catch all the flakes, and continuously update your test suite as your app evolves

Schedule a personalized demo to learn more – and see how their customers save 9 hours per engineer per week, on average.


Pop Quiz logo

Pop Quiz

Sponsored by Redis

Their data platform powers AI infra like agent memory and semantic caches running at sub-millisecond speed to deliver real-time data to your agents and apps

In what order will the logs below show up in the console?

console.log('First')

setTimeout(() => {
  console.log('Second')
}, 0)

new Promise((res) => {
  res('Third')
}).then(console.log)

console.log('Fourth')

Cool Bits logo

Cool Bits

  1. CSS gap decorations are a fun new way to style the gaps between items in flex, grid, and multi-column layouts. Just don’t put them up before Thanksgiving, or everyone will shame you.

  2. Semgrep provides an AI AppSec Engineer that can eliminate 100% of all false positives by combining static analysis and LLMs – that way, you’ll only ever need to deal with real security issues. [sponsored]

  3. The Safari Team announced a bunch of stuff at WWDC. And they wish to reiterate that Siri being terrible is not their fault.

  4. Leerob wrote some quick thoughts about various AI agents.

  5. Den Odell wrote about what it was like hacking layout before CSS even existed. I can’t wait ‘til I start writing blog posts like this about how we all used to write using our own brains before ChatGPT existed.

  6. Matt Perry just released Motion AI, which lets you add a new Motion MCP to your LLM to help it create better animations.

  7. Emma Forman Ling wrote about why AI agents (and humans) do better with good abstractions. [sponsored]

  8. Jest 30 promises that it’s faster, leaner, better, and willing to do anything to fix this relationship.

  9. Daniel Sada wrote about working on Microsoft Office when they migrated from Source Depot to Git.

  10. liquid-glass-svelte is an npm package that provides a Svelte component that reproduces Apple’s Liquid Glass effect. I need someone to make an unbreakable-svelte package, because I’ve been rewatching M Night Shyamalan classics on my Video iPod to help me feel something again.


Pop Quiz logo

Pop Quiz: Answer

Sponsored by Redis

In what order will the logs below show up in the console?

console.log('First')

setTimeout(() => {
  console.log('Second')
}, 0)

new Promise((res) => {
  res('Third')
}).then(console.log)

console.log('Fourth')

First, Fourth, Third, Second.