A Butler Who Never Reads the Diff, 1,000-Page Contracts in 56 Milliseconds, and a Phone That Knows How Far It's Folded

Issue #6220 October 20266 min read
A Butler Who Never Reads the Diff, 1,000-Page Contracts in 56 Milliseconds, and a Phone That Knows How Far It's Folded

Get the next issue first

Subscribe to the weekly newsletter and the 5-day guide covering the story of React Native, where it is now, and what that means for our future.

Siri Swears the PR Is Reviewed

Good evening, Master Wayne.

I've read the changelog, so you needn't.

Expo SDK 58 arrived on October 15, announced by Alan Hughes and Brent Vatne.

And for once, sir, the headline is not a fresh way to break your Podfile.

So what happened to the Simulator?

Xcode 27 has retired Simulator.app, and the new expo-device-hub plugin turns your browser into a device dashboard instead.

It streams your iOS simulators and Android emulators, and you can tap, swipe and type straight into them.

Next to them sit live CPU, memory and network graphs, a bit like the screens in the Batcave.

Here it is running an iPhone 17 Pro Max simulator, courtesy of Nathan Schroeder (@nater02).

1.expo-device-hub.jpg

To try it, run npx expo install expo-device-hub, then npx expo start, and the link will be waiting in your terminal.

Can Siri finally talk to our apps?

The household has a new member of staff, sir.

The alpha package expo-app-intents lets Siri, Shortcuts and Spotlight trigger actions in your app.

App Intents (Apple's way of describing what your app can do) still have to be declared in Swift.

Expo queues every request for your JavaScript, so Siri can take an order even when your app is closed.

import * as AppIntents from 'expo-app-intents';

export function AppIntentHandler() {
  AppIntents.useAppIntents(async (pendingIntents) => {
    for (const invocation of pendingIntents) {
      // Siri may have queued this while the app was closed
      console.log(invocation.name, invocation.params);
      await AppIntents.removePendingInvocationAsync(
        invocation.id,
      );
    }
  });

  return null;
}

npx expo-app-intents init sets up the Swift side for you.

In Expo's demo, Siri asks which task to mark as complete and flips the toggle in the app.

2.expo-app-intents-siri-demo.jpg

I regret to report that Siri marked "Review pull requests" as done without reading a single line.

Every bit as thorough as you on a Friday, sir.

Is the bundler any faster?

SDK 58 adds Noxcturnal, an experimental Metro transformer written in Rust with oxc.

In Expo's test, a 5,500-file app went from 5.26 seconds on Babel to 2.46 seconds, about twice as fast.

Phil Pluckthun (@_philpl) shared the timeline, with the new transformer finished at the top and Babel still working below.

3.noxcturnal-transformer-timeline.jpg

You turn it on with experiments.noxcturnalTransformWorker, and it politely steps aside if you use custom Babel plugins.

Will that be all, sir?

👉 Expo SDK 58


4.react-advanced-london-2026.jpg

Two Days of React in an Old London Brewery

React Advanced London is back on October 23 and 26, 2026.

IT'S THIS FU**ING FRIDAY!!!!

And we are obviously gonna be there, so if you are in London, come say hi and make our day.

The first day, October 23, is in person at The Brewery, a London venue on the site of an 18th-century brewery, and it's streamed online for everyone who can't make it.

The second day, October 26, is fully remote, so wherever you are, you still get two days of advanced React engineering.

You'll be joining 800+ engineers for 40+ talks and workshops, given by the library authors and core contributors who build the stuff you ship.

The big topics this year are React Server Components, the React Compiler and AI-assisted development.

And because this is The React Native Rewind, we have to point out there's also a talk on building game UIs in Unreal Engine with React Native.

Want a last-minute discount? Reach out to Luke or Fran.

👉 Reserve your spot at reactadvanced.com


5.first-time-xcode-update-meme.jpg

PDF Now Stands for Pretty Damn Fast

Some say every app eventually gets a support ticket that says "just show the PDF".

And some say that the moment someone opens a 1,000-page scanned contract on a cheap Android phone, the app turns into a hand warmer.

All we know is, react-native-better-pdf hit 1.0 on October 12, built by Jakub Kasprzyk (@jkasprzyk17) and the team at GMI Software.

What's wrong with the old one?

For years, the default has been react-native-pdf, which on Android ships its own PDF engine, PDFium, inside your app.

That's like towing a caravan to a drag race.

better-pdf ditches the caravan and uses the engines the phone already has: PDFKit on iOS and PdfRenderer on Android.

It's built on Nitro Views from Margelo, so there's no WebView and no JavaScript slowing down scrolling or zooming.

Only the pages on screen are kept in memory, no matter how long the lawyers chose to write.

import { PdfView } from 'react-native-better-pdf';

export function Reader() {
  return (
    <PdfView
      style={{ flex: 1 }}
      source={{ uri: 'https://example.com/report.pdf' }}
      onLoad={({ pageCount }) =>
        console.log('pages', pageCount)
      }
    />
  );
}

That's the entire reader.

How fast are we talking?

In the README's latest Android benchmark, the 1,000-page scan opens in 56 ms instead of 622 ms.

It also peaks at 142 MB of memory instead of 898 MB.

POWERRRR.

The race below is a separate run, so its numbers differ a little, but the gap doesn't.

6.better-pdf-race.gif

In fairness, and we hate fairness, on iOS both libraries use PDFKit, so there the gap mostly vanishes.

What else is in the box?

Version 1.0 comes with search, fillable forms, offline caching and printing.

Search and forms answer two react-native-pdf feature requests that have been sitting open since 2021 and 2023.

Here's a form being filled in, straight from the launch video.

7.better-pdf-forms.gif

The catch is that you need the New Architecture and react-native-nitro-modules.

But c’mon, at this point who hasn’t moved to the New Architecture?

Anybody? Raise your hand. Anybody? Anybody?

We’ll love you anyway, but unlike our love, updates aren’t unconditional.

There's even an agent skill, so your coding agent can do the migration while we pretend to read the contract.

And on that bombshell…

👉 react-native-better-pdf


8.michael-scott-gradle-upgrade-meme.jpg

📦 React Native 0.88

Events now travel the web’s EventTarget path with real capture and bubbling, Text and TextInput get variable fonts through fontVariationSettings, and iOS picks up SceneDelegate support before Xcode 27 stops launching apps without it... and for the third time this year, no user-facing breaking changes.

📦 Expo SDK 58

Built for iOS 27 and React Native 0.88, with iPhone Duo support, a new expo-hinge package that tells you exactly how open your phone is, and expo-app-intents in alpha so Siri can finally tick off your onboarding checklist for you.

📦 EAS CLI 25

Cloud simulator sessions now default to signed-in preview links, and 25.2 adds eas simulator:control for poking a remote iOS simulator and moving files on and off it... the Mac under your desk is now officially someone else’s problem.

📦 React Native Gesture Handler 3.4

Swift Package Manager builds on iOS, a new immediatePressOut prop for Touchable, and Android now fires onPressIn when the press actually starts... rather than whenever it got round to it.

📦 React Native Screens 4.30

Stack v4 gets ready for iOS 27 and iPhone Duo and lays screens out properly under opaque headers on iOS 26+, though when the header bugs were reported, Apple simply pointed at its guidance against custom bar backgrounds... so maybe just go transparent.

📦 React Native Nano Icons 1.0

The first stable release hot reloads edited SVGs through a Metro plugin, turns them into SF Symbols and VectorDrawables for native tab bars, and lets Reanimated animate their size and color... so nudging an icon no longer costs you a native rebuild.

📦 React Native Skia 3.7

Eight releases in five days land Skia m157, and Android phones without Vulkan now get pointed back to v2 instead of crashing... the Graphite herd leaves nobody behind on the savanna.

📦 react-native-gpui

Nate (@natebirdman) renders React Native components with GPUI, the GPU-accelerated Rust framework behind the Zed editor, straight into a Metal window on the Mac... no browser, no Electron, and Apple Silicon only for now.

📦 beUI for React Native

Saurabh (@saurra3h) brought 45 free animated components built on Reanimated, Gesture Handler and Uniwind, and npx beui-native add tabs copies one straight into your app... you own the code, and the bugs.

📦 rn-build-doctor

Priyanka (@lassiecoder) built an offline tool that reads your React Native or Expo build or crash log and tells you the real cause, with evidence and next steps... it reads the whole Gradle stack trace so you don’t have to.

📦 Relaunching TeamReach

Gene Cornfield wrote up moving 5,000,000 active users to a rebuilt Expo app overnight, then shipping twelve OTA updates in three days to fix what testing missed... and the whole rescue cost about $4,000.

9.bye62.gif

Join 1,700+ React Native developers

Subscribe to the weekly newsletter and the 5-day guide covering the story of React Native, where it is now, and what that means for our future.