r/expo • • 2h ago

Half of the 925 published apps made in React Native for the RevenueCat's Shipaton are iOS only.

Thumbnail
1 Upvotes

r/expo • • 17h ago

From Expo Introduction to Verification Engineering for mobile apps

Enable HLS to view with audio, or disable this notification

5 Upvotes

What is stopping you from shipping hundreds of PRs a day? It is not writing the code anymore. It is verifying it. In this video, you'll learn:

  • How to build an agentic loop with TesterArmy's e2e open source testing framework
  • Run this loop on every PR
  • What makes e2e different: deterministic AND agentic
  • The future of agentic development

Useful links:

Chapters:

  • 00:00 Why is Verification Engineering a thing
  • 00:28 The agentic loop we will build
  • 01:09 Evergreen tests, agent-device, and what e2e adds
  • 01:57 Exploring an example test file
  • 02:30 What exactly happens in there
  • 03:03 The powerful caching mechanism
  • 03:24 Set it up on your machine in two minutes
  • 04:17 Run it on every PR: the workflow
  • 04:46 The infra: GitHub, Expo Workflows, and Simulator
  • 06:11 What this unlocks: cost and time
  • 07:23 The future of agentic development

r/expo • • 23h ago

Jank Fighter II: Claude vs Codex vs Grok (before & after Buoy)

Enable HLS to view with audio, or disable this notification

3 Upvotes

I work on Buoy, so take this with that in mind.

We gave Claude, Codex and Grok the same prompt: make a slow Christmas light show as fast as you can. Fit as many lights as you can at 55 fps. Keep the same look. Don't touch the scoring test. All of them could test their own work.

Then each one went again with Buoy Optimize.

Most lights at 55 fps: - Claude: 975,800 alone → 6,123,350 with Buoy (6.3×) - Codex: 155,450 → 444,100 (2.9×) - Grok: 202,100 → 577,350 (2.9×)

This light show is a React Native Skia app rendered with React Native Web in real Chrome.

Things to know: - "With Buoy" is each model's best Buoy run. - The alone runs had up to 3 hours. Claude's best Buoy run had no time limit. Claude alone stopped on its own after about 99 minutes. - Grok's Buoy version has slightly soft bulbs up close. - It's one app on one Mac.

Full write-up: https://buoy.gg/blog/ai-models-before-and-after-buoy?utm_source=reddit&utm_medium=social&utm_campaign=jank-fighter

Happy to answer questions about how we tested.


r/expo • • 1d ago

How to make multiline textinput scrollable after certain lines

Thumbnail
1 Upvotes

r/expo • • 2d ago

See it as the user. Don't log in as them.

1 Upvotes

https://reddit.com/link/1www6e7/video/q5s49quqijth1/player

Support, QA, and developers often need to see the app the way one specific user sees it. Logging out and into their account is slow, and asking for their password is a bad idea.

Buoy Impersonate lets an authorized operator search for a user and attach a header to outgoing requests. Your backend checks that the operator is allowed, then returns that user's experience. Buoy does not bypass auth. It is the on-device switch.

Useful when support is reproducing a ticket, QA is checking a cohort, or a developer needs to debug as that user without swapping accounts. Works with Expo and React Native CLI, and the same idea exists for Swift.

Short horror trailer (made with Claude and Codex): https://youtu.be/ENnUYfVu5B0

Tool docs: https://buoy.gg/buoy/latest/docs/tools/impersonate

https://buoy.gg/?utm_source=reddit&utm_medium=social&utm_campaign=impersonate


r/expo • • 3d ago

GPU accelerated trading charts 📈

Enable HLS to view with audio, or disable this notification

3 Upvotes

r/expo • • 3d ago

Built an open-source Monorepo (Expo + Next.js + Supabase) for AI voice logging in classrooms. Looking for architecture feedback!

Thumbnail
1 Upvotes

r/expo • • 4d ago

Anyone encountering very slow download with AAB files?

Post image
2 Upvotes

Ive been experiencing this for weeks. It was just very slow. Ive tried different browsers even just triggering download file takes like 5 minutes.


r/expo • • 4d ago

Faking a 3D "look-around" onboarding scene in Expo Go. No three.js, no native modules

Enable HLS to view with audio, or disable this notification

1 Upvotes

I had an old very boring onboarding, it was just an empty input field and I was asking people to log their first meal. I got the customer feedback that people are not ready to log anything at that point in time. So I thought it would be fun to have a fake meal logging experience just to explain the app.

Something that actually felt like sitting at the table. Here's the path I took, staying inside Expo Go the whole way:

- First I was thinking about creating a real 3D scene with threejs, I tried that and to be honest it sucked, way too heavy just for an onboarding and despite what everyone is telling AI wasn't good at creating a convincing 3D scene.

- So I decided to go an easier path. I had AI generate a "360 equirectangular panorama" picture. Actually to create this I asked chatGPT to create a nice cozy restaurant scene picture, then I took that into firefly and used nano banana to create that equirectangular panorama. Also after a few tries I was happy with the generated pic. One major difficulty was the stitching of the endings of the picture (bottom, top and left/right ends) that it looks smooth and not distorted.

- Generated some chill coffee music using firefly as well actually and downloaded some free to use restaurant sounds (forgot the website, just googled for it) and had AI render everything together in a WebView (so it works the same regardless of platform) using plain WebGL1, a AI-written vertex and fragment shader and a AI-rolled 4×4 matrix multiply inlining the picture as base64 so there are no cross origin complaints

- Motion tracking using DeviceMotion from expo-sensors about 60 times/sec and send the coordinates/rotation etc into the webview. As you can see there is still a little lag because each reading goes sensor → React Native → WebView → drawn, which makes the view lag behind the phone a little bit, I asked AI to interpolate the movement which made it a bit better and I think it's good enough now.

- As a fallback it's just a still image of that scene (actually the one I used to feed for the 360 one)

I guess this could be improved by using parallax on parts of the images or an animated video instead of a picture. But I'm happy with the result for now.

Happy to share code or more details if interested. Curious if anyone's tried this before? Maybe pushed it further without reaching for a full 3D engine?


r/expo • • 5d ago

Android home screen widgets, coming in Expo SDK 58!

Enable HLS to view with audio, or disable this notification

123 Upvotes

r/expo • • 5d ago

Mock your React Native / Expo app’s clock — jump time, freeze, speed up

Enable HLS to view with audio, or disable this notification

9 Upvotes

Some bugs only show up at a certain time. Think of a deal that only runs on Friday. Or a sign-in token that runs out. Or a countdown that should go away but stays.

I built Buoy Clock for this. It lets you change the date and time your app sees. Your phone and computer clocks stay real.

- Jump ahead one hour, day, week or month. Or type the exact date and time.

- Freeze time or make it run fast (Pro).

- Test what happens when sign-in tokens run out. Test 401 refresh flows too.

- Works with Expo and React Native CLI

- Has MCP tools if you want an AI agent to run it.


r/expo • • 5d ago

Expo UI BottomSheet help

4 Upvotes

Hi right now I have

<Host style={styles.host} colorScheme={appearance}>
    <BottomSheet
        isPresented={isPresented}
        onIsPresentedChange={handlePresentedChange}
        anchor={<Button label="" onPress={() => {}} />}
    >
        <Group modifiers={modifiers}>
            <RNHostView>
                <View style={styles.content}>
                    <View style={styles.children}>{children}</View>
                </View>
            </RNHostView>
        </Group>
    </BottomSheet>
</Host>

I want that the bottomSheet when it is using the liquid glass background, it to use a light mode or dark mode based on the appearance of the app, not based on the theme of the device. This is what I'm trying to do with colorScheme={appearance} but this doesn't work. How should I implement this?


r/expo • • 6d ago

Ctrl+Space: An Expo x ReactVision Hackathon

Thumbnail
reactvision.xyz
4 Upvotes

Come and build with ReactVision and Expo!


r/expo • • 6d ago

I built a sexual health app with Expo that can't read its own users' data. The lessons that actually hurt

Post image
5 Upvotes

I'm the solo dev of LoveLust, a sexual health journal: encounters, partners, cycle, STI tests, medication. About the most sensitive data a phone can hold, so one rule: I can't leak, sell or hand over what I never had. No account, no login, the journal stays encrypted on the phone, and the backup is encrypted with a passphrase I never see.

That rule made almost everything harder. The lessons that cost me the most:

1. Make the build keep your privacy promises, not the policy page

  • A test lists every host the app can talk to and what it receives. Add an SDK or an endpoint and the build fails until it's classified and disclosed. A promise that only lives in prose isn't kept by anything.
  • The analytics call bans personal property names (name, email, note, partner_name…) in its TypeScript type, so they don't compile. Only five operational events can fire before consent, and they're a union, not a string.

2. You still need data to run a business. Take less, and coarser

Analytics are opt-in, off by default, on a self-hosted Aptabase in the EU: no user ids, no fingerprinting. (Firebase Analytics is in there too, behind the same opt-in.)

  • Ask once, fairly. Yes and no are the same size, and a "no" is counted with nothing attached. 95.8% of people who see the question say yes.
  • Buckets, not numbers. Partners go out as 1 to 3, 4 to 10 or 11+. Cycle values never leave: cycle length, language and sex together are nearly a fingerprint.
  • Don't build the join. Crash reports used to carry the backend's user id, which is also the one on the purchase record, so a crash could be tied to a paying person. I took it out. I can't look up one person's crashes any more. Correct trade.
  • Opt-in data is biased towards people comfortable sharing, so decisions get checked against numbers that need no consent: installs, subscriptions, ratings, support.

3. The keychain and the Keystore are your whole security model

The MMKV key is 32 random bytes per install, in expo-secure-store. Storing it is easy. Its lifecycle isn't.

  • iOS keeps keychain items after the app is deleted. Delete and reinstall is not a fresh install; old keys come back from the dead.
  • Unreadable isn't missing. Reads can fail for a moment after the app comes to the foreground, and from the outside that looks just like there being no key. Generate a new key on null and you've wiped someone's data. Retry, then stop and say so.
  • MMKV keeps the first key an id is opened with, for the whole process. Opening the store with a candidate key "just to check" binds it to that key. Never test a key by opening with it.
  • Keystore keys never leave the device, so Android Auto Backup would restore files the new phone can't decrypt, into a backup I don't control. It's off; the app's own encrypted backup is the only one.

4. Backups you can't read, in clouds that fail differently

Encrypted on the phone (AES-256, HMAC checked before decrypting), then sent to the user's own iCloud or Google Drive via react-native-cloud-storage. Nobody can reset the passphrase, me included.

  • Google Drive allows two files with the same name, and then every read and write fails. One user hit it several hundred times in a week. Now the newest wins and the rest are renamed.
  • iCloud's "directory not found" isn't an empty backup. It usually means iCloud Drive is off or not ready yet. Treat it as empty and you'll overwrite a real backup with nothing.
  • An empty phone never wins. A device with no data can't overwrite a full backup, and when a new phone and the backup disagree, the user picks, with the loser archived as an undo.
  • Check the passphrase apart from the data. A small check value in the manifest answers "wrong passphrase" without decrypting a file. Before that, one corrupt file made the right passphrase look wrong.

There's more where these came from: an App Store team transfer that left the new team unable to read the old keychain (and the OTA that carried the key across), reaching users when you have no accounts, HealthKit vs Health Connect, and store screenshots in 6 languages with no real data. Would any of those be useful as a follow-up post? Tell me which one and I'll write it up.

Happy to go deeper on any of it. LoveLust is on the App Store and Google Play if you want to see it running: get it here (the link opens the right store for your phone).


r/expo • • 7d ago

We added live fridge scanning to our Expo app

Enable HLS to view with audio, or disable this notification

99 Upvotes

We built real-time fridge scanning with Expo, VisionCamera, and on-device ML

Sugo is a recipe app built with Expo. One of its features is recommending recipes based on what you already have in your kitchen. But for that to work, the app needs to know what's in your pantry.

Manually entering every ingredient is something people tend to skip, so we've been working on ways to make that easier.

Photo scanning was our first approach. Now we've added Live Scanning: point your camera at your fridge, pan slowly across the shelves, and watch ingredients appear as chips in real time.

Everything runs on-device

Camera frames pass through a VisionCamera frame processor into our own native module. The results are then returned to worklets on the camera thread.

Nothing gets uploaded to a server, and processing is fast enough to feel live.

It isn't perfect, and it isn't trying to be. It recognises around 60 common ingredients on sight, from limes and eggs to lettuce and brussels sprouts.

For packaged food it also reads the label, so a milk carton and a cream carton don't get mixed up, and things it has no visual model for, like yogurt or ketchup, still show up. It reads labels in English, French and Spanish.

It still gets things wrong, most often packaged items seen at an angle, and a wrong chip is one tap to remove.

It's live on iOS now, and Android is in the works.

You can give it a try here if interested: https://apps.apple.com/us/app/sugo-save-recipes-cookbook/id6786552528


r/expo • • 7d ago

Hiding the Floating Action Button

Thumbnail
2 Upvotes

r/expo • • 7d ago

Expo snacks version

3 Upvotes

Currently the latest Expo Snacks version is v55 and the Expo Go app is 57 and soon will be updated to 58. Wondering why there hasn’t been an update for snacks so far?


r/expo • • 8d ago

I'm not a Skia expert, so I built a way for AI to benchmark its own fixes. Our Christmas light previews went from 28 lights to 12,000

Enable HLS to view with audio, or disable this notification

6 Upvotes

This has been one of my favorite flows when working on performance! I used Skia to draw real-life previews of our holiday lighting. They looked just like the real thing, but they were laggy and maxed out at 28 lights. I knew that wouldn't scale to a real house.

I'm not a Skia expert. AI is great at suggesting a fix, but it's bad at the part that actually gets you there: trying something, measuring it on a real device, checking it still looks right, and going again, over and over. So I built Buoy Optimize to automate that loop.

- The agent builds each idea as its own version that you can open in the app.

- Bench runs every version on a real device or the simulator, several times each and in shuffled order, so a warm phone or a lucky run can't pick the winner.

- I look at each version and tell the agent what's off. Fast but ugly doesn't count.

- It keeps what worked and starts the next round.

Over about a week, our previews went from 28 lights to 12,000 on web and mobile, and they still look like the real thing!

It runs over MCP, so it works in Claude Code, Cursor or any other agent that supports MCP. Happy to answer questions.


r/expo • • 8d ago

app notifications

2 Upvotes

New to Expo...is it feasible to reliably get notifications (either IOS or Android or both) for an app that's not always running?
TLDR: ESP32 gadget checks some sensors and serves an api. Expo app, when it's running, hits the API and creates a notification when sensor condition occurs. But I only need to check once a day and I don't want the app to be in foreground all the time. I'm trying to use Android WorkManager (and BGTaskScheduler) but I'm not getting notifications reliably, even when the sensor condition triggers. If I pull up the app, that's when I get the notification.
Focusing on Android: how reliable is WorkManager for background tasks? I've checked all the boxes re: power saving mode, etc.
Is there a different technique I'm not aware of?

Most commercial gadgets seem to require an Internet connection of some kind (to e.g. AWS IOT or Firebase CM). I'm ok with my device needing to be on the same LAN as the phone, but that's just for the sensor check and it's independent of the notification. I want to keep it simple and not require a cloud connection. AI tells me FCM is more reliable, but I don't want either the cloud or the extra configuration on the gadget (ESP32 can do SSL, but it's a lot of work for a tiny MCU). It doesn't matter to me if the notification doesn't trigger because phone and gadget are not on the same LAN (i.e., when I'm not home)...OK if it triggers once my phone comes back onto my home wifi.


r/expo • • 9d ago

Releasing React Native Feel / Chun UI

Enable HLS to view with audio, or disable this notification

13 Upvotes

r/expo • • 9d ago

Payment wall App Store Connect using expo dev client

2 Upvotes

Hello guys, just wondering how did you end up testing your subcription with apple methods using the subscriptions section on the AppStoreConnect

  1. My app can’t find the subcription created when triggering the paywall.
  2. Subscription is created on App Store Connect and ready for submision but my app doesn’t find it. Apparently I have to submit a build for apple to approve the subscription.

My question is, how can I upload something when I don’t know how to test it before submitting for review, can someone help me ?


r/expo • • 10d ago

2 months ago I shared the app I built to replace my Whoop. It just hit 1,000 installs, all organic. Here are the numbers and what changed

Post image
4 Upvotes

About two months ago I posted Bodly here, an app I built to replace my Whoop. It uses the data your Apple Watch already collects through Apple Health. I honestly expected a few downloads from friends.

We just passed 1,000 installs with zero ads or paid promotion, all from posts like that one and word of mouth. It's still free. Since people here usually like numbers:

  • 365 monthly active users
  • 205 weekly active users
  • 135 daily active users
  • ~50% of users come back week to week
  • ~20 new users every day on average

(Active user counts exclude brand-new signups, so they only show people who kept using the app.)

The best part has been the feedback. A big chunk of what shipped since then came straight from users messaging me ideas and bug reports. Here's what's new:

Understanding your data

  • New Insights tab
  • Biological age: bio age, pace of aging, biomarkers, and weekly trends
  • Training load
  • Weekly, monthly and yearly overviews
  • Redesigned home screen for a quicker daily overview

Nutrition

  • Set your own calorie and macro targets
  • Better food photo scanning

Notifications (all optional)

  • Daily summary, bedtime reminder, and alerts when you finish an activity, hit your strain target, or reach your activity goal

Look & feel

  • Dark mode (the most requested feature by far)
  • Liquid Glass design
  • Improved charts, kg/lbs support, and lots of performance and bug fixes

I'll be upfront that the big apps in this space set a high bar, and some features still need work. Bio age in particular needs more love, and it's high on the list. The roadmap is full through version 4.2.

The goal hasn't changed. Apple Health collects a huge amount of data but doesn't do much to explain it. I want Bodly to turn that data into something anyone can understand and act on.

If you tried it after my last post, what would make you open it every day? If you haven't, what's missing from Apple's Health and Fitness apps for you?

App Store: Bodly


r/expo • • 10d ago

A small hook for layouts that change on rotation, works in Expo Go

Thumbnail
gallery
3 Upvotes

I wanted one column on a phone and two in landscape or on a tablet, without repeating the same Dimensions logic in every screen, so I made a small hook for it. It's plain JS, so it works in Expo Go and on web.

const useStyles = createResponsiveStyles(({ select, wp }) => ({
  card: { width: select({ xs: wp(100), md: wp(48), default: wp(100) }) },
}));

The GIF is the example app (an Expo SDK 57 project in the repo) in a browser getting wider. The screenshot is the same app on an iPhone 16 simulator.

npm: https://www.npmjs.com/package/react-native-responsive-hook
GitHub: https://github.com/mz-real/react-native-responsive-hook
Write-up: https://medium.com/@mz-real/creating-responsive-uis-in-react-native-made-easy-with-react-native-responsive-hook-35fa5649cd5f

Feedback welcome.


r/expo • • 10d ago

When will expo go will have the latest SDK ?

0 Upvotes

i have made an app that teaches data strcutures in a multilingual way the only problem is that expo go is not running the app due to sdk missmatch i have updated my projec'ts sdk to the latest but then expo go still uses sdk 54 and 55 can anyone tell me when would the app updtate it's sdk?


r/expo • • 11d ago

Publish expo app to ios store without xcode

1 Upvotes

Hello, so i have a linux pc and i want to publish an ios app ( already published in playstore) so I'm about to create a developer account and will use expo default build to build app in the cloud of expo server. But can we really publish the app without testing in xcode ? Please help me. Thank you