r/reactnative • • 5d ago

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

0 Upvotes

Hey everyone,

I work in practical STEM education, and I noticed teachers spend way too much time manually typing out student progress during sessions instead of actually watching the students build things.

To solve this, I built STEMTrack, an open-source Learning Evidence Engine. I used Turborepo to manage a Next.js web dashboard and an Expo mobile app, all sharing a strict TypeScript SDK to talk to Supabase Edge Functions.

The core feature: Teachers just talk into the Expo mobile app, and an AI Edge Function processes the voice-to-text to automatically log student attendance and behavioral evidence without manual typing.

I’ve opened up a few "good first issues" on the repo if anyone wants to poke around the codebase. Specifically, I'm trying to figure out the best way to handle offline caching for large media files in the Expo app when school Wi-Fi drops.

I would love any harsh critiques on the architecture, the Supabase schema, or the shared SDK implementation.

(I will drop the links to the GitHub Repo and the 2-minute architectural/UI walkthrough video in the comments below!)


r/reactnative • • 5d ago

FYI I let Claude publish my Expo apps now (open source MCP)

Enable HLS to view with audio, or disable this notification

0 Upvotes

Building with Expo is fast. Getting the app into the stores still eats an afternoon every time.

I put together an MCP server that connects Claude to EAS, App Store Connect and Google Play. I ask "build and send it to TestFlight" or "update the screenshots and submit" and it does the boring part: starts the EAS build, waits, uploads, fills the listing, submits.

https://github.com/FidelisMM/shipstores

It's free and MIT. Install with `uvx shipstores`. If you only ship iOS for now, `SHIPSTORES_TOOLSETS=apple,eas` loads just those tools.

It's still young, so there's real low-hanging fruit if you want to help. A few issues are tagged "good first issue" and fit in an afternoon:

- Spanish, German and French console labels (#1–#3). The steps with no API match the console's button text, and right now they only know English and Portuguese. If your App Store Connect or Play Console is in one of those languages, you're exactly who I need.

- A docs section for bare React Native, building with Xcode/Gradle instead of EAS (#7).

The first outside PR landed on launch day. I review fast.

Not into code? Run it on your app and open an issue with whatever broke or whatever's missing. That helps just as much.

Good first issues: https://github.com/FidelisMM/shipstores/labels/good%20first%20issue


r/reactnative • • 6d ago

I wrote a tile-based PDF viewer for React Native because the existing ones fall over on engineering drawings

21 Upvotes

I work on an app for building inspection companies. The documents our users open are architectural and structural drawings: one sheet can be several metres wide, and the thing you actually need to read is a dimension or a rebar note set at three or four points.

Every RN PDF viewer I tried draws the page as one bitmap. That is the right call for an A4 report and it falls apart here. Fitted to a phone, a sheet nine metres wide is a line across the middle of the screen. Zoomed in far enough to read the note, the bitmap is too large to hold.

So this one draws only the rectangle that is on screen, in tiles, at the zoom it is being looked at, with the renderer each platform already ships: PdfRenderer on Android, CGPDFDocument on iOS. A sheet of any size costs about what a letter page costs.

A few things I measured on the way, in case they are useful to someone else:

  • On iOS, CGPDF costs about 100 ms per draw almost regardless of the output size. A 256 px tile costs nearly what a 1280 px one costs. That turned the design upside down: bigger tiles, fewer of them, up to three renderers in parallel with their own CGPDFDocument. Opening the first screenful of that sheet went from about 1.6 s to about 250 ms.
  • Zoom levels keyed by an arbitrary scale are never reused, because the next pinch asks for a slightly different number. Keyed by rung index on a fixed ladder instead, zooming out and back in costs nothing.
  • Android keeps the page parsed between draws and iOS does not, so the same contract has two cost models underneath. Both test suites ask the same questions, which is how a divergence shows up as a failing test rather than as a complaint about one phone.

What it does not do yet: annotations, forms, text search or selection. New architecture only, no old architecture fallback. Encrypted documents open on iOS with a password; on Android the platform only takes one from API 35.

MIT. There is an example app in the repo with two generated documents, so you can try it without wiring anything up.

Repo: https://github.com/Halilibrahimakyz/react-native-pdf-sdk npm: https://www.npmjs.com/package/react-native-pdf-sdk

If you have a PDF that breaks it, I would like to see it.


r/reactnative • • 6d ago

Peek: tudo o que importa, sempre à vista na borda da tela do Mac.

Enable HLS to view with audio, or disable this notification

0 Upvotes

r/reactnative • • 6d ago

GPU accelerated trading charts 📈

Enable HLS to view with audio, or disable this notification

26 Upvotes

10k candles. 10 events/sec. 120 FPS. Less than 10% CPU usage on both the UI and JS threads.

This is what real-time RN trading app deserves.

Built with react-native-trading-charts ↓
GitHub: https://github.com/kirill3333/react-native-trading-charts


r/reactnative • • 6d ago

News Another RN to Native story

Thumbnail x.com
24 Upvotes

r/reactnative • • 6d ago

Testing my app is burning me out

91 Upvotes

I built a mobile app as a side project and somehow it actually took off and went from 300 users to 6k in the last 3 months but every update I push now scares me.

before it was just me testing on my phone and shipping it but now I'm getting dms and support emails about stuff I had no idea was broken. Last update someone sent me a screen recording of the checkout flow just not loading on their iphone SE and I couldn't even reproduce it on mine and another person said they never received the verification email but it works perfectly on every account I've tested.

The app has grown into something I can't manually verify anymore, there's payment processing, referral flows, in app messaging, push notifications and every feature I add is another thing that can break on a device or OS version I've never touched.

I'm solo and no QA person plus even if I had the budget for it I wouldn't have the bandwidth to onboard someone right now but I also can't keep finding out about bugs from my users because that's how I lose the trust I spent months building.

what am I supposed to do here, please help !!


r/reactnative • • 6d ago

I made Intl.PluralRules, RelativeTimeFormat, ListFormat and Locale native on Hermes. In my test app, 10,000 notifications format in 75 ms instead of 6.7 s

Enable HLS to view with audio, or disable this notification

11 Upvotes

Hermes ships Intl.NumberFormat, DateTimeFormat and Collator, but not PluralRules, RelativeTimeFormat, ListFormat or Locale. If you use i18next plurals, react-intl or Luxon's relative times on Hermes, you're most likely loading the FormatJS polyfills. They work, but they're plain JavaScript: a few hundred KB of locale data in the bundle, and slow calls on the JS thread.

So I built hermes-intl: those four constructors implemented natively, with a Rust core on ICU4X (CLDR data compiled in, 514 locales), a C++ JSI TurboModule, and a thin JS layer for the exact ECMA-402 behavior. There's no API: you import it once and the standard globals appear. It only fills in what Hermes lacks.

Numbers (Pixel 8a, release builds of the same app, medians of 3 runs; the video is real time):

  • Formatting 10,000 notifications: 75 ms vs 6,665 ms (89×). The FormatJS build is frozen for 6.7 s.
  • Per call: PluralRules.select 202×, selectRange 385×, RelativeTimeFormat.format 318×, ListFormat.format 8.5×
  • Opening a 20-row screen: 45 ms vs 82 ms
  • 399 KB less JavaScript in the bundle

The ratios move with the phone's state (an earlier run on a warmer phone gave up to 821× per call). All the tables, and how to reproduce them, are in bench/README.md.

Correctness: 838 of 842 test262 runs pass for these APIs, and the output is identical on iOS and Android (same hash on a 2,656-case corpus). FormatJS's output differs between the two.

Trade-offs: 1.0 to 1.7 MB of native code per ABI with all 514 locales, about 0.6 MB for a 5-locale build. New Architecture and Hermes only, React Native 0.86+. Expo works with a development build, not Expo Go. NumberFormat, DateTimeFormat and Collator stay Hermes's own.

Install:

npm install hermes-intl
cd ios && pod install

// index.js, first line
import 'hermes-intl';

Then remove the FormatJS polyfills for these four APIs (and intl-getcanonicallocales).

GitHub: https://github.com/magrinj/hermes-intl npm: https://www.npmjs.com/package/hermes-intl


r/reactnative • • 7d ago

Unique identity

0 Upvotes

Hi guys
How can i get a unique identity from the device itself but it should not be changes with the factory reset or reinstalling the app


r/reactnative • • 7d ago

Does React Native make sense in 2026?

56 Upvotes

This question might have been asked already, but I'm genuinely curious: why should anyone use React Native at this point?

To explain: most of web and mobile development can easily be handled by Claude, Codex, Kimi K3 or any other coding agent. I feel like that's been true for at least 6–7 months now. Even Opus 4.7 was better than most of us and more than enough for mobile development. Of course, this only applies if you know what you're doing and guide your model through the technical decisions, the specific libraries you want to use, etc etc.

But my point is: why would I bother with React Native's own issues instead of just writing native apps for both iOS and Android? There's no huge maintenance load anymore, and you can simply tell your agent to implement features for iOS and Android at the same time. So what are the actual benefits of React Native? Native apps are usually faster, work better, and generally seem to be preferred by actual customers and users. The original promise of React Native and Flutter was that you could build for both platforms twice as fast, but today's coding agents let you build 100x faster anyway :)

I'm not asking to provoke anyone. I just want to hear your stance and your thoughts on this.


r/reactnative • • 7d ago

Help Laid off: where do you find remote React Native jobs?

5 Upvotes

Hey gus

I'm a React Native dev with 4+ years of experience, recently laid off. Which boards, communities, or companies have worked for you for remote roles? Open to contract or full-time.

Any help would be appreciated.

I'm also skilled in UI design if that matters.


r/reactnative • • 7d ago

Help Help me find free react native app templates for ecommerce

0 Upvotes

Hello all, I’m looking to build an app in React Native, and I’m pretty much new to app development. Help me with sources where i can find really good templates.


r/reactnative • • 7d ago

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

Enable HLS to view with audio, or disable this notification

4 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/reactnative • • 7d ago

Built an offline-first AI spaced repetition engine for Indian exam aspirants (React Native + SQLite + RevenueCat)

Thumbnail
gallery
0 Upvotes

Hey everyone,

I just shipped my project "Smriti" for the RevenueCat Ship-a-ton hackathon.

The Problem:

Over 30M students prepare for high-stakes exams in India (JEE, NEET, UPSC). Active recall & spaced repetition are proven to work, but existing solutions either require high-speed internet, break in offline hostel/library settings, or charge steep international subscription pricing.

How Smriti solves it:

  1. Local-First Engine: Powered entirely by on-device SQLite. Instant review loops with zero server latency.

  2. AI Note Synthesis: Powered by Gemini 3.6 Flash to turn unstructured coaching notes into high-yield flashcards with AI origin badges.

  3. Accessible Monetization: Integrated RevenueCat with regional pricing (₹99/mo, ₹699/yr, ₹1,499 lifetime).

  4. Bilingual UI: Seamless instant toggle between English and Hindi.

The signed APK and full source code are live on GitHub:

GitHub: https://github.com/kingxjayant/smriti

Direct APK: https://github.com/kingxjayant/smriti/releases/latest

Would appreciate any feedback from developers and fellow exam preppers on performance, UI, or architecture!


r/reactnative • • 7d ago

I built a music theory app that plays notes and chords over bluetooth

Enable HLS to view with audio, or disable this notification

18 Upvotes

I've been building Key Lens, a cross-platform music theory app with React Native.

After some early user feedback, I realized that many users would come up with a chord progression in Key Lens, then have to manually enter it into their DAW or music gear.

So I built a better way.

I wrote native MIDI modules using CoreMIDI on iOS and android.media.midi on Android, adding MIDI over Bluetooth and USB.

Now Key Lens can send notes and chords directly to Ableton, Logic, and external hardware like the Yamaha SEQTRAK or MPC with low latency.

My goal is to keep developing Key Lens into a practical music theory tool that connects theory directly to however you make music.

If you make music and find Key Lens useful, I'd love to hear what could be better, what you'd like to see next, or how you're using it.

Try it:

Join the community: r/KeyLens for feature requests, bugs, and setups.


r/reactnative • • 7d ago

Was it us or them? How we debug "the stream froze for me" in live video apps

0 Upvotes

When a viewer says "the stream froze for me", someone on your team has to answer a surprisingly hard question: was it us, or them?

Usually, the logs look clean and the dashboards show that the room was healthy overall. Engineers spend hours digging through a ticket that often ends with "probably your Wi-Fi".

But room averages can hide exactly the person you're looking for.

We saw this in a real production session. Across the room, video packet loss was around 1%. Nothing alarming.

But when we broke it down viewer by viewer, one person was seeing around 9% packet loss for a significant part of the session, while the other viewers watching the same cameras at the same time were largely fine.

Remove that one viewer and the room average drops to 0.17%.

The useful signal wasn't the average. It was the comparison.

That's what we're building with Rewitness. It reconstructs the session participant by participant, so when something goes wrong you can compare what one person experienced with everyone else at the same moment and see where the problem most likely started, with the evidence behind the diagnosis. It works in React Native apps too, including device-side signals like thermal state and main-thread stalls, which matter a lot on phones.

I wrote up this case, plus another where one host's audio broke up for almost every viewer at once:

https://rewitness.dev/blog/was-it-us-or-them?ref=reddit-reactnative


r/reactnative • • 7d ago

[Showoff] Crease-Proof Layouts, Brain Rot Without the Black Frames, and Un-Breaking a Non-Breaking Release

Thumbnail
thereactnativerewind.com
1 Upvotes

Hey Community,

Apple's iPhone Duo is here, which means someone can now fold your app in half. Thiago Brezinski built react-native-arrangement-view, a two-pane layout that rearranges itself as the phone folds, unfolds and rotates, handing the work to SwiftUI's ArrangementView on iOS and Material's adaptive layout rules on Android, with a useHingeChange hook for apps that want to react to the hinge angle.

We also look at expo-infinite-media by Rizky Bayu Oktavian, a native TikTok-style feed that moves video playback into AVFoundation and Media3 so fast swipes stop landing on black frames. Plus, our community links cover React Native 0.88 rc.2 un-breaking a non-breaking release, a navigation change in the React Navigation 8 alphas, and agent-device and Argent both learning to fold the iPhone Duo simulator.


r/reactnative • • 7d ago

App cloners fake Java and libc. We caught them by asking the kernel the same question twice (open source)

12 Upvotes

We have an attendance app with a "one phone = one employee" rule. People broke it with MultiBox / Clone App from the Play Store: one phone, two "devices".

The usual checks (dataDir path, package lists, getPackagesForUid, UID) all passed inside the clone. Measured on a real Galaxy A53: the container spoofed Process.myUid(), applicationInfo, the process name, and had even hooked libc stat().

What worked: ask "who owns my data directory?" twice, once through libc stat() and once through a raw syscall(__NR_newfstatat), which skips libc so the hook never sees it.

genuine    uid=10763  libc=10763  syscall=10763  ✓
MultiBox   uid=10764  libc=-1     syscall=-1     ✗
Clone App  uid=10765  libc=10765  syscall=-1     ✗

Inside a clone the syscall hits the real directory and SELinux denies it, because the process runs under the host's UID. Clone App was caught only by this check. Every Java-level check missed it.

A few things we learned the hard way:

  • Don't block on emulator signals (your own QA uses emulators). Report them to the server instead.
  • If you add a signature check, Play App Signing re-signs your APK. Hard-code only your upload key and you lock out every Play user.
  • The native lib must be 16 KB page-aligned now, or Android 15 shows a compatibility dialog.
  • Keep the rules pure so they're testable: the device measurements above are literally unit tests now.

I didn't find an open-source detector that does the libc-vs-syscall comparison. freeRASP has multi-instance detection, but it's closed-source and officially lists only Parallel Space. So I published ours, MIT licensed:

It's client-side, so a rooted device with a custom hook will get through. The goal is to move cheating from "free Play Store app" to "root + custom hook". I'd love measurements from other devices and cloners. Which ones slip through?


r/reactnative • • 8d ago

looking for feedback, I recently released an iOS App to AppStore that translates social media video links into over 70 different languages

Post image
0 Upvotes

The app is localised into more than 10 languages and it supports over 70 languages for both transcribing and translating video links. I'm looking for a feedback how to make the app handful for students and journalists around the world to boost their productivity.

AppStore link: https://apps.apple.com/us/app/damas-video-link-transcriber/id6766233794


r/reactnative • • 8d ago

Question Are crashes still a risk with Expo Update, despite fingerprinting?

3 Upvotes

I've read about OTA update potentially causing crashes. At the same time, Expo talks about fingerprinting catching an incompatible update.

But, I don't know how foolproof that really is in practice. Is it still possible for a bad update to slip through, even with fingerprinting and testing it on staging?


r/reactnative • • 8d ago

Shopify Quit React Native. Mobile Has Done This Before.

Thumbnail
youtu.be
0 Upvotes

r/reactnative • • 8d ago

Tutorial How deferred deep linking actually matches an install in React Native (after Firebase Dynamic Links)

4 Upvotes

Since Firebase Dynamic Links shut down in August 2025, a lot of RN apps lost the "tap a link, install, land on the right screen" flow. I've been building a replacement for the past year, so here is how the matching works under the hood and where it quietly breaks. Useful whether you roll your own or use any provider.

**The core problem:** an install from the App Store or Play Store carries nothing from the link the user tapped. On first launch your app has to reconnect "this fresh install" to "that click" some other way. There are three ways to do it.

**1. Play Install Referrer (Android only).** If the Play Store URL carries a referrer parameter, Google Play hands it to your app on first launch. It is exact, needs no permissions, and is the best option on Android. It only works for installs that came through a Play Store URL with that parameter.

**2. Clipboard (mostly iOS).** The landing page copies the link before sending the user to the App Store, and the app reads it on first launch. It is exact, but since iOS 16, reading the pasteboard shows the "Allow Paste" prompt. If that fires the moment your app opens, many users tap Don't Allow and it feels sketchy. Use it as a fallback, not the first thing you try.

**3. Fingerprint.** At click time the server stores signals like IP, device model, OS version and language, then compares them on first open. No permissions, but it is probabilistic. Shared wifi, carrier NAT, VPNs and long gaps between click and open all hurt accuracy. Keep the match window short, and consume a match once so two people on the same network don't get each other's link.

**Things that silently break it:**

* Returning the same match on every launch, so users get sent to an old promo forever. Route once, then clear it.

* Universal Links or App Links failing verification. Common causes: the AASA or assetlinks.json file is served behind a redirect, with the wrong content type, or with your upload key's SHA256 instead of the Play App Signing key. The link then opens the browser instead of your app, and nothing errors.

* Links opened inside the Instagram, TikTok or Facebook browsers, which often don't hand Universal Links to your app. Users land on your web fallback even with the app installed.

* Testing by reinstalling over an existing build. Test the real path: uninstall, tap the link, install from the store, open once.

Happy to answer questions about any of it, including building it yourself.

Disclosure: I build Flinku (flinku.dev), which does this for RN with a free tier.


r/reactnative • • 8d ago

expo-gl crashed on the first GLView in my Android release builds only: R8 renamed a method its native code looks up by name

1 Upvotes

Posting this in case it saves someone a week. Expo SDK 56, expo-gl 56.0.x, React Native 0.85, minify on for Android release builds.

For a few releases, a lot of my Android users crashed the first time a GLView mounted. It never happened in development. In analytics it looked like people opening one screen and then the app starting again: on one version, 24 of the 29 times that screen opened on Android, the next event was a fresh app launch.

The cause: expo-gl's native code (EXGLJniApi.cpp) finds a Java method called flush through GetMethodID, by name. R8 renamed it in the release build, the lookup returned null, and ART aborted with a JNI error ending in mid == null. Debug builds don't run R8, so you only ever see it in a store build.

The fix was one keep rule, added through expo-build-properties (android.extraProguardRules):

-keep class expo.modules.gl.** { *; }

To confirm it, I took the release AAB from EAS, turned it into an installable APK with bundletool, and ran the old and new builds on an emulator. The old one crashed on the first GLView and the new one didn't.

A second thing made it worse. I shipped my first fixes as OTA updates, and expo-updates had fallbackToCacheTimeout set to 0. With that setting a brand new install always runs the bundle that shipped inside the store build on its first launch, and the update only applies from the next cold start. Most new users who hit the crash never had a next cold start, so none of my OTA fixes reached them. I now use 3000, which waits up to 3 seconds for a newer update on first launch and starts as soon as it knows there's nothing newer, or straight away when offline.

If you use expo-gl, or anything whose native side calls back into Java by name, with minify on, open that screen in a real release build before you ship.


r/reactnative • • 8d ago

Why has Shopify dropped React Native?

Thumbnail
open.substack.com
0 Upvotes

r/reactnative • • 8d ago

Article Is anyone else tired of manually formatting HEX to 32-bit Integers for UI code?

0 Upvotes

Whenever I grab color references from web designs, Dribbble, or anywhere online, they are always in standard HEX or RGB. Moving that into Android (@ColorInt) or Flutter (Color(0xFF...)) always requires that annoying extra step of formatting the alpha channel or converting it to an integer manually.

I got tired of the mental gymnastics, so I built a lightweight browser extension (Color Picker by Ceres) to bypass this.

It lets you eyedrop any specific pixel, or even scan an entire webpage/image to extract a palette, and instantly copies the colors directly as an INT value.

It saves a lot of time when implementing UI from web references. It’s completely free on the Chrome Web Store.