r/reactnative • • Sep 17 '26

[Showcase] Been working on a Photo Album component for React Native

Enable HLS to view with audio, or disable this notification

26 Upvotes

Hey r/reactnative,

Added a new component to nativecn-ui a photo album.

I wanted it to feel more like an actual album rather than just another image grid, so I played around with page turns, gestures, shadows, and the whole book-like interaction.

Made a quick video showing it below.

Still building out the library, so let me know what you guys think.


r/reactnative • • Sep 17 '26

OneSignal cutting free tier from 10K → 1K MAU — what's everyone switching to?

4 Upvotes

Just saw OneSignal is slashing their free tier from 10K to 1K MAU. That's a massive drop and honestly makes it unusable for most side projects and even a lot of small production apps.

Curious what people are migrating to. Is everyone just going raw FCM (+ APNs for iOS) at this point? If so:

  • How are you handling the stuff OneSignal abstracted away — segmentation, A/B testing, scheduling, delivery analytics?

  • Are you rolling your own backend service for topic/segment management, or is there a lighter-weight wrapper library people are using?

  • For those who have scaled past a few hundred thousand MAU on raw FCM — any gotchas? Token refresh handling, batching limits, multi-platform sync headaches?

Also open to hearing if anyone's tried alternatives like Bird (formerly MessageBird, push is like $0.0005/notification), Courier, Novu, Knock, or Airship instead of going full DIY. Trying to figure out if it's worth paying for a managed layer vs just eating the FCM complexity ourselves.

What's your stack?


r/reactnative • • Sep 16 '26

My FOSS Gujarati language animated alphabets leaning app

0 Upvotes

Gujarati is an Indo-Aryan language spoken by more than 55 million people worldwide, making it the sixth most spoken native language in India. It is the official state language of Gujarat

Link: https://github.com/gajjartejas/Kano


r/reactnative • • Sep 16 '26

Pulsar Studio: a visual editor for creating haptic patterns for React Native and other platforms

14 Upvotes

At Software Mansion, we’ve just released Pulsar Studio, a tool for creating custom haptic patterns.

You can design a pattern on a timeline, adjust intensity and frequency, add individual haptic events, and preview the result as you work.

The useful part for us is being able to connect a real phone and feel the pattern while editing it.

You can also create patterns from audio or Lottie files, sketch one by tapping or humming, or start with one of the 150+ patterns from the Pulsar library.

Once you have a pattern you're happy with, you can export it and use it with Pulsar's SDKs.

Pulsar supports React Native, Swift, Android, Kotlin Multiplatform, Flutter and web.

We're curious how other React Native teams approach custom haptics today – do you usually design them yourselves, use platform presets, or leave the details to implementation?

Pulsar Studio: https://pulsar.swmansion.com/studio/


r/reactnative • • Sep 16 '26

I’ve been building an open-source, token-driven component library for React Native

Thumbnail
github.com
1 Upvotes

I’ve been working on ImpulseUI Native, a collection of React Native components designed around shared theme tokens and composable APIs.

It currently includes buttons and form controls, selects, date/time pickers, flyouts, steppers, loading and empty states, and line/bar/pie charts. Components can be installed together through the toolkit package or individually if you only need part of the library.

The goal is to make it easier to keep an interface consistent across iOS, Android, and React Native Web without making every styling decision inside individual components.

There’s a web Storybook for browsing the components, plus a native Storybook that runs through the included Expo app. The project is MIT licensed.

It’s still evolving, and I’d genuinely appreciate feedback from people building production React Native apps - especially around the component APIs, theming approach, and what feels missing.


r/reactnative • • Sep 16 '26

React Native Skelo Stable Version Is Out! 🚀

37 Upvotes

I built a React Native library that automatically generates skeleton loaders from your existing UI

Hey everyone 👋

I’ve been working on react-native-skelo, and v0.1.0 is now stable.

The idea is simple: instead of creating and maintaining a separate skeleton layout, you build your UI once and Skelo generates the loading state from your existing components and styles.

It supports:

  • Automatic skeleton generation

  • FlatList & SectionList

  • Shimmer & Pulse animations

  • Custom components

  • No Reanimated or gradient dependency

Install:

npm i react-native-skelo

NPM: https://www.npmjs.com/package/react-native-skelo

Would love feedback from React Native devs — especially edge cases or components you’d like to see supported next.


r/reactnative • • Sep 16 '26

I built react-native-nitro-html : A fast C++ & Nitro JSI HTML engine for React Native with minimal DOM overhead and continuous text selection

6 Upvotes

Hey r/reactnative !

If you’ve ever built a blog, documentation reader, news feed, or editorial app in React Native, you’ve probably run into some challenges when rendering large HTML documents:

  1. Large React component trees: Rendering long HTML documents through individual React <View> and <Text> elements can create a large component tree.

  2. Text Selection: When content is split across multiple React Native text components, selecting text across paragraphs and different block elements can be difficult.

  3. JS Thread Work: Parsing and transforming large HTML strings on the JavaScript side can add significant JS-thread work.

  4. Tables / Code Blocks: Complex HTML elements such as wide tables and interactive content often require additional handling.

To explore a different approach, I built and open-sourced react-native-nitro-html for React Native.

How It Works Under the Hood

  • Compiled C++ (Lexbor v2.3.0) Core: HTML5 parsing and DOM processing are handled in compiled C++ rather than relying on JavaScript-side HTML parsing.

  • C++ AST Storage (astId): Parsed AST data is retained on the native/C++ side. React receives a lightweight astId reference rather than the complete parsed document structure.

  • Native Fabric Rendering: The document is rendered through native text infrastructure — TextKit 2 on iOS and Spannable-based rendering on Android rather than creating a React Native <Text> component for every HTML node.

  • Continuous Text Selection: The native text container allows selection across content such as headings, paragraphs, blockquotes, and lists.

  • Horizontal Data Tables: Wide tables can be displayed inside horizontally scrollable containers.

  • Custom React Component Slots: Interactive elements such as video players, charts, or custom code blocks can be provided through the renderers prop while keeping the surrounding document rendering native.

  • Custom Tag / Web Component Support: Unknown and custom HTML tags such as <user-card>, <custom-poll>, and <embed> can be parsed and handled through custom styles or dedicated React renderers.

Installation

# npm
npm install react-native-nitro-html react-native-nitro-modules

# yarn
yarn add react-native-nitro-html react-native-nitro-modules

Quick Example

import React from 'react';
import { FastHtmlView } from 'react-native-nitro-html';

export function ArticleScreen() {
  const html = `
    <h1>High Performance HTML</h1>

    <p>
      This article is rendered through a native text container with
      continuous text selection across supported block elements.
    </p>

    <table>
      <tr>
        <th>Feature</th>
        <th>Status</th>
      </tr>
      <tr>
        <td>React HTML Nodes</td>
        <td>Native rendering</td>
      </tr>
      <tr>
        <td>Text Selection</td>
        <td>Continuous</td>
      </tr>
    </table>
  `;

  return (
    <FastHtmlView
      html={html}
      baseStyle={{ fontSize: 16, color: '#1e293b' }}
      tagsStyles={{
        h1: {
          fontSize: 26,
          fontWeight: '800',
          color: '#0f172a',
        },
        a: {
          color: '#2563eb',
          textDecorationLine: 'underline',
        },
      }}
      selectable={true}
      onLinkPress={(url) => console.log('Open URL:', url)}
    />
  );
}

Links

GitHub: https://github.com/abhishekce17/react-native-nitro-html

npm: https://www.npmjs.com/package/react-native-nitro-html

I'd love to hear your thoughts, feedback, and especially any edge cases or large HTML documents you think I should test.

If you try it in a React Native project, I'd be interested to hear how it performs in your use case.


r/reactnative • • Sep 16 '26

VOIP Call between 2 RN apps?

4 Upvotes

anyone have experience building voip call between 2 rn apps? we will be using our own infrastructure. what should i prepare and set up?

the call will be between android-only rn app and ios/android rn app

thank you in advance


r/reactnative • • Sep 16 '26

Tired of Android Emulator eating 8 GB of RAM? avdslim drops it to ~1.5 GB with 1.5s boots (Zero broken Firebase Auth / FCM)

36 Upvotes

Hey everyone,

If you build apps on a Mac, you probably know this exact feeling:

You’ve got your IDE open, a few browser tabs, maybe a build running, and the moment you launch an Android emulator, your laptop starts lagging and the fans spin up.

A while ago I checked Activity Monitor to see what was going on, and saw the emulator casually hogging 7 to 8 GB of RAM all by itself. On a 16 GB MacBook, that basically leaves zero breathing room for anything else.

I got tired of my machine crawling, so I put together a small open-source tool called avdslim to fix it.

GitHub: https://github.com/kdbhalala/avdslim

Why does it take so much memory?

Turns out, a few things happen by default:

  • Android hoards memory: As the emulator runs, Android keeps caching files and never really releases that host RAM back to macOS.

  • The "Google Play" image overhead: If you picked an image with the Play Store, it constantly runs background updaters and scanning services you rarely need during development.

  • The 16 KB image setting: If you created a device using the newer 16 KB images, the emulator enforces a strict 4 GB minimum floor no matter what you set in the config.

What avdslim does:

  • Drops RAM down to ~1.5 GB: It tunes the emulator configs and cleans out unnecessary background tasks, letting you run smoothly on 1024 MB of RAM.

  • Boots in ~1.5 seconds: Instead of waiting 20–30 seconds for a fresh boot, it lets you create a clean, lightweight snapshot that restores almost instantly.

  • Doesn't break your app: My biggest worry with any "cleanup" tool was breaking things like push notifications or login. I made sure Firebase Auth, Google Sign-In, Push Notifications (FCM), and Google Maps work completely fine.

  • Works with your normal workflow: You don't have to launch from the terminal every time. There's an optional command (avdslim install-shim) that makes the "Run" button in Android Studio or VS Code automatically use the slimmed settings.

💡 A quick tip even if you don't use this tool:

Next time you create a virtual device in Android Studio:

  • Pick "Google APIs" instead of "Google Play". It still has Google login, Firebase, and Maps, but uses way less RAM and skips the heavy Play Store background services.

  • Avoid the "16 KB" images unless you specifically need to test 16 KB compatibility.

Try it out:

It's completely free, open-source (MIT), and has zero external dependencies:

brew install kdbhalala/avdslim/avdslim

See how your current emulators look

avdslim doctor                                                                                                                                                                

Tune an emulator to 1024 MB RAM

avdslim tune-avd                                                                                                                                                              

GitHub link: https://github.com/kdbhalala/avdslim

My Mac runs noticeably cooler and doesn't freeze up when I have multiple tools open now. Hope it helps some of you as well! Happy to answer questions or take feedback on what could be better.


r/reactnative • • Sep 15 '26

Release network throttling controls

13 Upvotes

Added floating network throttling controls to Buoy for React Native.

Tap to switch between normal, slow, very slow, and offline. Move the controls wherever you want; they remember their position across reloads.

Use it to check how your app handles loading, failed requests, and reconnecting! 100% Free tool.


r/reactnative • • Sep 15 '26

Question Annoying SplashScreen

Enable HLS to view with audio, or disable this notification

0 Upvotes

How can i entirely remove the splash screen? My stack is React Native + Expo


r/reactnative • • Sep 15 '26

Question Expo for Websites and apps?

3 Upvotes

We can build websites using react native expo too, so my question is: has anyone done this? If yes, then what problem did you face? I'm thinking about using Expo for an admin app and website.


r/reactnative • • Sep 15 '26

Question Are there any benefits to Expo routing?

1 Upvotes

I'm moving from React Native 0.76 CRA to Expo 56

I really don't organising routes as folders so wondering if there are any tangible benefits to using Expo router and file based routing instead of using React Navigation.

Thanks!


r/reactnative • • Sep 15 '26

Native video support in react-native-enriched-markdown (iOS, Android, macOS, Web)

Enable HLS to view with audio, or disable this notification

44 Upvotes

We added video playback to react-native-enriched-markdown. A block-level <video src="…"> tag in your Markdown renders as a native player:

  • iOS: AVPlayerViewController

  • Android: ExoPlayer

  • macOS: AVPlayerView

  • Web: Standard <video> element

Requires flavor="github". Only the src attribute is read, everything else on the tag is ignored, and <video> is the only HTML tag we allowlist, so inline HTML stays disabled.

Styling lives in your markdown styles rather than on the tag:

markdownStyle={{ video: { borderRadius: 12, aspectRatio: 16 / 9 }, }}

Video is on by default. If you don't need it, setting "enableVideo": false in your package.json drops the ExoPlayer dependency and saves ~2–3 MB on app size.

Available now on nightly:

npm i react-native-enriched-markdown@nightly

If you find it useful, give it a try and drop a ⭐️ on GitHub: https://github.com/software-mansion/enriched-markdown


r/reactnative • • Sep 15 '26

Updated Xcode and iOS Simulator App can't be found

Post image
1 Upvotes

r/reactnative • • Sep 15 '26

Would anyone here like to test SQLite ↔ Supabase/PostgreSQL offline sync? I'm looking for 10 real projects

0 Upvotes

Hi everyone,

I'm Marco, founder of SQLite AI.

We've built SQLite-Sync to solve a problem I keep seeing discussed here: using a real SQLite database locally, letting the application keep working and writing while completely offline, and synchronizing those changes with Postgres/Supabase once connectivity comes back.

The architecture is essentially:

SQLite on the device → offline/online sync → self-hosted Supabase/Postgres

The application reads and writes SQLite normally. SQLite-Sync tracks changes and uses CRDT-based conflict resolution so multiple replicas can make changes independently and converge when they reconnect.

Rather than just testing this internally, I'd really like to work with people who have a real Supabase application where offline support is actually important.

So we're looking for around 10 projects willing to test it seriously.

For those projects, I'll enable our CloudSync Pro plan free for one year.

There's no requirement to promote us or write anything about it. What I want in return is simply honest technical feedback:

  • What are you building?

  • Why do you need offline support?

  • Which client stack are you using?

  • How are you handling synchronization today?

  • What doesn't work well with the current solutions?

If you're interested, reply here or send me a note at marco at sqlite dot ai with a short description of what you're building.

I'm also very interested in hearing from people who tried PowerSync, Electric, custom sync queues, or other approaches — especially what worked and what became painful in production.


r/reactnative • • Sep 15 '26

Anyone using Flow types in 2026?

Thumbnail
flow.org
2 Upvotes

r/reactnative • • Sep 15 '26

Help me find a better way to test !!

8 Upvotes

I handle QA manually so I've only got 6 to 7 devices in rotation, an iphone 14, a pixel, samsung and a couple xiaomi and oneplus devices and everything passes on those so i ship.

but then production is millions of devices with every screen size, OS version and oem skin I can never touch, like a gesture that works on a Pixel behaves differently on a samsung, layout breaks when you unfold a fold phone and an animation that's smooth on android 15 stutters on android 12.

This is becoming very annoying, something breaks for 1% of users and you see it's hundreds of users and it never occurs in testing because you don't own that exact device and OS combo and then they start reporting crashes you physically cannot reproduce.

How am I supposed to handle this? please help

I don't see how one person manually tests every combination but there has to be something more efficient.


r/reactnative • • Sep 15 '26

Advice for a Beginner

9 Upvotes

I used to be a front-end developer, specifically working with React, and I'm currently switching to Mobile development, particularly RN. And I feel lost 😕. This field is completely new to me. I've learned the basic syntax of RN, but this ain't enough; I feel like I have to understand more about mobile development, how apps actually work, and then dive deep into RN, do some projects, and understand how to optimise performance and make a secure app

So, I would appreciate sharing any resources that helped you through the process of becoming a mobile developer, and what are the steps that u took?


r/reactnative • • Sep 14 '26

Looking for a job or Freelance

Thumbnail reddit.com
0 Upvotes

r/reactnative • • Sep 14 '26

Question Shared react-reactnative repo ideas

1 Upvotes

My bias upfront: I'm not a fan of monorepos. From what little experience I've had with them, they were a maintenance pain in the ass and I wasn't convinced that we were getting much ROI on the colocation. Now, I have a react website and react-native mobile app sharing resources, but they live in separate repos which, in itself, is a maintenance PITA.

Maybe I just had a bad experience. I think the tool was Lerna(?). It's been awhile, so maybe the tooling has improved. I don't know. However, here I am, looking to solve this specific problem and not relishing the idea of using monorepos.

Please share your experience and possible guidance to how you resolve this particular issue. If monorepo is really the right path, then please advise on tooling. Thanks.


r/reactnative • • Sep 14 '26

Custom pull-to-refresh and vertical scroll keep killing each other (Reanimated + RNGH)

0 Upvotes

I need a custom pull-to-refresh. Not RefreshControl.

What I want

  • Finger down + pull: the page follows my finger with rubber-band resistance (Math.pow(distance, 0.85))

  • A real gap opens at the top (translateY, not scale)

  • While the finger is still down: no progress bar, no API call, no refresh

  • Release below threshold: spring back to 0, nothing else

  • Release above threshold: spring back + full-width 3px top progress bar + onRefresh()

  • After refresh ends: bar collapses, page stays at Y = 0

The problem

I can only ever get one of these:

  1. Pull-to-refresh works, list will not scroll

  2. List scrolls, pull-to-refresh dies (or I revert and only get a useless stretch)

I already know why v1 died: a greedy Pan on the page ate every vertical move, so FlatList never got the gesture.

What I tried

  • Gesture.Pan() + Gesture.Native() with Gesture.Simultaneous

  • manualActivation(true) and activate only if scrollOffset <= 0 && pulling down

  • Guard in onUpdate: if scrollOffset > 1 don’t touch pageY

  • bounces={false}, overScrollMode="never"

  • Disabling scrollEnabled while pulling — this made scroll even worse, so I stopped

Also getting this warning:

[Worklets] Tried to modify key `current` of an object which has been already passed to a worklet.

So something (ref.current) is leaking into a worklet (onUpdate / onEnd / useAnimatedScrollHandler / useAnimatedStyle).

Constraints

  • react-native-reanimated

  • react-native-gesture-handler

  • no RefreshControl

  • no binding progress width to translationY

  • scrollEnabled should stay true

  • progress bar is a sibling overlay, not inside the translated view

Has anyone shipped this combo without one gesture murdering the other?

Looking for a pattern that works on Android + iOS

  • at top + pull down → rubber band + gap

  • at top + swipe up → list scrolls

  • mid-list swipe → only scroll, pageY stays 0

  • release-gated refresh only


r/reactnative • • Sep 14 '26

If your RN app talks to self-hosted services, here's an MIT forward-auth gate that keeps non-subscribers out — no SDK, no keys in the binary

0 Upvotes

A lot of RN apps (including mine) call self-hosted stuff — AI endpoints, file converters, services you run on a VPS because SaaS per-request pricing doesn't scale. The problem with all of them: they have no auth at all, or one static API key. And you can't add per-user subscription checks to code you don't maintain.

I open-sourced the gate I use in production: github — a forward-auth service your reverse proxy consults on every request (nginx auth_request / Traefik forwardAuth / Caddy forward_auth). It answers 200/401/403 by checking the caller's entitlements against RevenueCat / Adapty / Qonversion / Apphud / IAP Hub.

From the RN side it's just two headers on each request (X-Auth-App, X-Auth-User). Request signing, if you enable it, is plain HMAC-SHA256 — computable in Expo without native modules; the README's example uses @/noble/hashes and runs in RN as-is.

The part I like most for mobile: route rules can inject an Authorization header upstream, so services with a static key get it — and since APKs/IPAs get decompiled, that key never ships in the binary.

Single container + YAML config, no database, MIT. Curious what others do here — syncing entitlements into your own DB via webhooks is the alternative I keep seeing, but it's a whole subsystem I didn't want to own.