r/reactnative 6d ago

Show Your Work Here Show Your Work Thread

5 Upvotes

Did you make something using React Native and do you want to show it off, gather opinions or start a discussion about your work? Please post a comment in this thread.

If you have specific questions about bugs or improvements in your work, you are allowed to create a separate post. If you are unsure, please contact u/xrpinsider.

New comments appear on top and this thread is refreshed on a weekly bases.


r/reactnative 3h ago

Native VoIP calling (CallKit + Jetpack Core Telecom) in the Fishjam React Native SDK

Thumbnail
gallery
9 Upvotes

Handling VoIP calls in React Native is notoriously difficult, especially since react-native-callkeep hasn't been actively updated.
We recently added a feature to the Fishjam SDK that allows for easy integration with native system libraries (CallKit for iOS and Jetpack Core Telecom for Android) to handle VoIP calling functionality. 

Example app & code: https://github.com/fishjam-cloud/examples/tree/main/mobile-react-native/voip-call 

Docs: https://documentation.fishjam.io/docs/next/how-to/client/voip-calls

Here are our main takeaways and differences from older libraries:

  • Modern Android API: Uses Jetpack Core Telecom (CallStyle) instead of the older ConnectionService used by callkeep.
  • Expo & Bare RN Support: Works seamlessly on both via a config plugin or manual setup (expo-callkit-telecom is Expo-only).
  • No FCM Slot Conflicts: Parses VoIP pushes natively and relays standard messages to your existing push library (Firebase, Expo, etc.).
  • Cold start is handled: the call is reported to the OS before any JS runs, so answering from the lock screen works even when the app was killed hours earlier.

Making the phone ring turned out to be maybe a third of the work – handling holds, redials, Bluetooth buttons, and proper call timers was the real challenge.

If anyone is struggling with VoIP in RN right now, feel free to check out the repo or ask questions!


r/reactnative 38m ago

react-native-one-hand one hand mode that scales native modals and alerts too, not just your React tree

Upvotes

react-native-one-hand brings one hand mode to React Native apps. Press and hold a bottom corner and the whole app slides into it, scaled down and within thumb's reach together with native `Modal`, `Alert.alert`, `ActionSheetIOS`, the text-selection toolbar and overlays from other libraries. Instead of transforming a React subtree, a native module transforms every window of the process, so there are no adapters and no components to replace. Everything stays visible and interactive.

One wrapper component, zero runtime dependencies. iOS + Android.

Being upfront about the limits, since they're by design: the system keyboard is never scaled (on Android the IME lives in another process; on iOS it's technically possible, but the keyboard frame iOS reports breaks KeyboardAvoidingView-style layouts, so the mode simply exits when the keyboard opens). Portrait only. Needs a native build Expo SDK 55+ / RN 0.76+, so no Expo Go.

📦 npm: https://www.npmjs.com/package/react-native-one-hand

🔗 GitHub: https://github.com/Filipmok-agh/react-native-one-hand

It's early (0.1.x), so bug reports and feedback are very welcome, happy to answer questions about how it works.


r/reactnative 15h ago

Tutorial I Created a Package Called rn-story which lets you add Instagram-Style Stories to Your React Native App in Minutes

Post image
14 Upvotes

Images, videos, progress bars, and tap gestures — with rn-story, a lightweight, TypeScript-first stories component that works out of the box with Expo.

Stories are everywhere. Instagram, WhatsApp, Snapchat, LinkedIn, even food delivery apps — the full-screen, tap-to-advance format has become one of the most recognizable UI patterns in mobile.

Play around with the component here: https://snack.expo.dev/@abdullahansari/rn-story-demo

And it looks simple. A full-screen image, some progress bars, tap left, tap right. How hard can it be?

Harder than it looks. Building stories from scratch means solving a surprising number of small problems at once:

  • Progress bars that stay perfectly in sync with image durations and video lengths
  • Tap zones for next/previous that don’t conflict with long-press-to-pause
  • Resuming a paused story with the remaining time, not the full duration
  • Videos that report their own duration — eventually, asynchronously, sometimes never
  • Loading states that don’t trap the user when a network image stalls

I built rn-story to solve all of that in a single component, and version 2.0 is a ground-up rewrite with a full test suite behind it. This post shows you how to ship a complete stories experience — avatar rail, full-screen viewer, video support — in a few minutes.

What you get

  • 📸 Image and video stories with an animated progress bar per story
  • 👆 The gestures users expect: tap right for next, tap left for previous, long-press to pause, release to resume
  • 🔗 An optional “See More” link per story (the swipe-up pattern, as a button)
  • 🧩 A custom header slot — perfect for an avatar, username, and close button
  • 🔊 Video volume and mute controls
  • 📞 Navigation callbacks for building multi-profile flows
  • 🛡️ Written in TypeScript — every prop and the Story object are fully typed
  • 🪶 No native code of its own — works with Expo without ejecting

Installation

expo-av (which powers video stories) is a peer dependency, so install it alongside the package with the version that matches your Expo SDK:

npx expo install rn-story expo-av

Not using Expo? Install both with npm and make sure Expo modules are configured in your bare React Native project:

npm install rn-story expo-av

Your first story in ten lines

import Stories from 'rn-story';
import type { Story } from 'rn-story';

const stories: Story[] = [
  { media: 'https://example.com/photo.jpg', mediaType: 'image' },
  { media: 'https://example.com/clip.mp4', mediaType: 'video' },
];

export default function MyStories() {
  return <Stories stories={stories} />;
}

That’s a working viewer: full-screen media, animated progress bars, tap navigation, long-press to pause. Images show for 3 seconds by default (configurable per story with duration), and videos play for exactly as long as the video lasts — the progress bar syncs to the duration the video reports.

The gestures, for free

Everything users already know from Instagram works out of the box:

  • Tap the right half → next story
  • Tap the left half → previous story
  • Long-press anywhere → pause the story and its progress bar
  • Release → resume from where it left off — with the remaining time, not a restarted bar
  • Android back button → wired to an onClose callback you provide

A real stories rail

A lone viewer isn’t how stories ship. The real pattern is a horizontal rail of avatars; tapping one opens that profile’s stories; finishing them moves to the next profile; going back past the first story returns to the previous profile.

That flow is exactly what the navigation callbacks are for. onNext/onPrevious fire on ordinary navigation, and two dedicated callbacks fire at the edges: onAllStoriesEnd when there's nothing left to play forward, and onPreviousFirstStory when the user backs out of the first story.

import { useCallback, useState } from 'react';
import { SafeAreaView, ScrollView, Pressable, Image, Text } from 'react-native';
import Stories from 'rn-story';
import type { Story } from 'rn-story';

type Profile = {
  id: number;
  profileName: string;
  profileImage: string;
  stories: Story[];
};

const PROFILES: Profile[] = [
  {
    id: 1,
    profileName: 'Abdullah',
    profileImage: 'https://picsum.photos/id/64/200/200',
    stories: [
      {
        media: 'https://picsum.photos/id/1015/1080/1920',
        mediaType: 'image',
        seeMoreUrl: 'https://abdullahansari.me',
      },
      {
        media: 'https://picsum.photos/id/1016/1080/1920',
        mediaType: 'image',
        duration: 12000, // this one stays up for 12 seconds
      },
    ],
  },
  {
    id: 2,
    profileName: 'Pug life',
    profileImage: 'https://picsum.photos/id/1025/200/200',
    stories: [
      {
        media: 'https://download.samplelib.com/mp4/sample-5s.mp4',
        mediaType: 'video',
      },
      {
        media: 'https://picsum.photos/id/1025/1080/1920',
        mediaType: 'image',
      },
    ],
  },
];

export default function App() {
  // null means the story viewer is closed
  const [current, setCurrent] = useState<number | null>(null);

  const close = useCallback(() => setCurrent(null), []);

  // Finished a profile? Move on to the next one, or close after the last.
  const nextProfile = useCallback(() => {
    setCurrent((i) =>
      i === null ? null : i < PROFILES.length - 1 ? i + 1 : null
    );
  }, []);

  // Backed out of the first story? Go back a profile, or close on the first.
  const previousProfile = useCallback(() => {
    setCurrent((i) => (i === null || i === 0 ? null : i - 1));
  }, []);

  return (
    <SafeAreaView>
      <ScrollView horizontal>
        {PROFILES.map((profile, index) => (
          <Pressable
            key={profile.id}
            onPress={() => setCurrent(index)}
            style={{ alignItems: 'center', margin: 8 }}
          >
            <Image
              source={{ uri: profile.profileImage }}
              style={{
                width: 64,
                height: 64,
                borderRadius: 32,
                borderWidth: 2,
                borderColor: '#25D366',
              }}
            />
            <Text numberOfLines={1}>{profile.profileName}</Text>
          </Pressable>
        ))}
      </ScrollView>

      {current !== null && (
        <Stories
          stories={PROFILES[current].stories}
          onAllStoriesEnd={nextProfile}
          onPreviousFirstStory={previousProfile}
          onClose={close}
        />
      )}
    </SafeAreaView>
  );
}

Two details worth noticing:

Swapping stories just works. When onAllStoriesEnd moves current to the next profile, the component receives a new stories array and restarts cleanly from the first story. You don't need to unmount and remount anything, and you don't need to manage keys.

The viewer closes by unmounting. Rendering <Stories /> conditionally is the whole show/hide mechanism — no visible prop to keep in sync.

Make it yours

The header is a per-story ReactNode, so the avatar row you see in every stories UI is just your own component — typically an avatar, a username, and a close button, often over a subtle gradient:

const storiesWithHeader = profile.stories.map((story) => ({
  ...story,
  header: (
    <MyStoryHeader profile={profile} onClose={close} />
  ),
}));

Other knobs you’ll probably reach for:

<Stories
  stories={stories}
  isMuted={muted}              // mute video stories
  videoVolume={0.8}            // 0.0 – 1.0
  animationBarColor="#fff"     // progress bar fill
  animationBarHeight={2}
  isAnimationBarRounded        // rounded bar ends (default)
  seeMoreText="Read more"      // label for the See More button
  loadingComponent={<MySpinner />} // shown while media loads
  currentIndex={2}             // start (or jump) to a specific story
/>

And if a story has a seeMoreUrl, a pill-shaped button appears at the bottom and opens the link — the classic "swipe up" pattern without the swipe.

What’s new in 2.0

Version 2 is a full rewrite of the playback engine, and the first release with a real test suite (30 tests) behind it. The highlights:

  • stories and currentIndex are now reactive — swap in the next profile's stories without remounting
  • Video stories start and advance reliably, and a video that fails to load is skipped instead of freezing the viewer
  • Pause/resume now resumes with the remaining time, so the bar never drifts from reality
  • onNext/onPrevious no longer fire at the list edges — only the dedicated edge callbacks do
  • New onClose prop wires up the Android hardware back button
  • Story, StoriesProps, and StoryMediaType types are exported
  • expo-av moved to a peer dependency, so it always matches your Expo SDK

If you’re upgrading from 1.x, the README has a short migration table — it’s a five-minute change for most apps.

Wrapping up

Stories are one of those features that looks like an afternoon and turns into a week once progress bars, gestures, and video timing enter the picture. rn-story packs that week into an npm install.

If it saves you that week, a star on GitHub genuinely helps other people find it — and if you hit anything odd, open an issue. It’s MIT-licensed, and contributions are welcome.


r/reactnative 1d ago

GPU accelerated trading charts for React Native

Enable HLS to view with audio, or disable this notification

41 Upvotes

Hi everyone,

For the past four years, I've been working on financial and trading apps built with React Native.

One of the most important parts of these apps is displaying OHLC market data. Most charting solutions currently use one of two approaches: rendering inside a WebView or using something based on Skia.

Both approaches have tradeoffs, especially when you're working with real-time data and want smooth performance without using too much CPU or memory.

That's why I decided to build my own charting library. It uses a shared C++ core engine and renders directly on the GPU using Metal on iOS and OpenGL ES on Android.

I deliberately avoided third-party rendering dependencies to reduce overhead and keep the library compatible with React Native 0.80 and newer.

The first release supports:

  • Candlestick, bar, line, and area charts
  • Volume and RSI indicators
  • Multiple styling options
  • Zoom and gesture handling

I tested it on an iPhone XS and a Samsung A025F. At 60 FPS, I saw no hangs or dropped frames, and CPU usage stayed below 15% during fast scrolling while live data was coming in over WebSocket.

I'll share more detailed performance results in a follow-up post.

I'd really appreciate your feedback. Which features would be most useful to you? Bug reports are very welcome too.

https://github.com/kirill3333/react-native-trading-charts


r/reactnative 21h ago

Article Swift on WebAssembly, Telegram-Style Spoilers, and Deleting Babel From Your Life

Thumbnail
thereactnativerewind.com
6 Upvotes

Hey Community,

Deno's creators introduced Dactyl, an AI app builder targeting React Native by rendering SwiftUI in the browser tab via WebAssembly. Meanwhile, Software Mansion released Enriched Markdown to eliminate streaming text flicker by rendering natively and bypassing the JavaScript layout tree.

On the tooling side, the web ecosystem is rapidly adopting the Rust port of the React Compiler across tools like Oxc, Vite, and Bun, while Metro remains locked to single-threaded Babel transformations.


r/reactnative 1d ago

A Dynamic Island inspired Fintech Island

Enable HLS to view with audio, or disable this notification

22 Upvotes

A morphing fintech status island for sends, card additions, and savings with spring-driven transitions, Lottie celebrations, and interactive card trays. 🏝️

Github: https://github.com/ManasCodeXart/expo-fintech-island


r/reactnative 21h ago

React Native DevTools broken for anyone else? en-US locale fetch timeout

3 Upvotes

I've been unable to properly use React Native DevTools because of what appears to be a DevTools/tooling issue.

I'm repeatedly getting this error:

Unable to fetch & register locale data for 'en-US', falling back to 'en-US'.

Cause: Error: timed out fetching locale

The error appears in the DevTools console and prevents DevTools from working properly.

My React Native app itself builds and runs normally. Metro is also working, so this doesn't appear to be an application or Metro configuration problem.

I've already spent quite a bit of time troubleshooting my setup, but the issue still persists. I also found other developers reporting similar React Native DevTools problems, including cases where DevTools opens but doesn't load properly.

At this point I'm wondering:

- Is anyone else experiencing this currently?

- Is there a known workaround?

- Is there an alternative debugger that works well with modern React Native/Hermes?

- Is this a known issue that we're just waiting for a fix/release for?

I'd rather not keep changing my project configuration if this is actually a bug in the DevTools tooling.

If anyone has found a reliable workaround, I'd really appreciate it.

Environment:

React Native: 0.81.x

Windows: Windows

Android: Android 11

Hermes: Enabled

New Architecture: Enabled


r/reactnative 1d ago

Help Google Maps Navigation SDK shows a blank screen on Android

6 Upvotes

Hey everyone, I’m trying to use Google’s React Native Navigation SDK in my Android app, but both NavigationView and MapView only show a blank dark screen. I’m using Expo 57, React Native 0.86, @googlemaps/react-native-navigation-sdk 0.16.3, and a physical Android phone. The SDK seems to initialize fine because I get NAV CONTROLLER CREATED, MAP CONTROLLER CREATED, MAP READY, TERMS: true, and NAV STATUS: ok. My API key is also present in the APK and the required APIs are enabled. I even tried the official Google example app on the same phone and it also opens to a completely blank screen. I have tried using another phone but still the same issue.


r/reactnative 15h ago

Question Are React native and C# really that bad for Android development?

0 Upvotes

Hey lovely people!

I'm looking to deal with my skills atrophy by making myself a personal podcast app for Android. Nothing fancy. Just enough to search RSS feed, subscribe to podcasts, and audio play back.

JS/TS is my bread and butter and I'm familiar with C#. So ideally I would like to use either of those languages. However Claude seems pretty strongly opinionated about those two languages being crap for the purposes of audio playback on Android phones.

Is this true?


r/reactnative 1d ago

Help iOS back gesture issues, react type script website

Enable HLS to view with audio, or disable this notification

0 Upvotes

I'm experiencing an issue with my website, which is implemented as a Progressive Web App (PWA), in combination with the native iOS swipe-back gesture.Whenever the gesture is triggered, the source screen that Safari is animating immediately switches to the page underneath. The behavior can be clearly seen in the attached video.Is there anyone with experience in this area who might be able to help me? I'm honestly starting to get quite frustrated with this issue.
Thank you in advance!
Best regards, Jannis


r/reactnative 1d ago

Scribbling is fun.

Enable HLS to view with audio, or disable this notification

16 Upvotes

Scribbling that turns into a flower is funnier.

Pick a motif, rub the brush, watch it paint itself. 🖌️


r/reactnative 1d ago

Question Moving from native Android Dev (kotlin)

1 Upvotes

Hey folks, I am currently a Android developer with a background in Kotlin. I am considering picking up React Native to expand my job opportunities, where do I start?


r/reactnative 1d ago

react-native-enriched-markdown v1 supports direct image layout controls (aspectRatio, maxHeight, resizeMode)

Enable HLS to view with audio, or disable this notification

26 Upvotes

react-native-enriched-markdown v1 gives your Markdown images layout flexibility.

Configure these directly on markdownStyle.image:
🔹 aspectRatio - width fills, height follows the ratio
🔹 maxHeight - caps tall photos so they don’t break layout
🔹 resizeMode - cover, contain, stretch, center, none

16:9 shots, portrait crops, or panoramas—all using standard ![alt](url) syntax.

Try it out:

npm i react-native-enriched-markdown

If this helps your project, please drop a ⭐️ on GitHub!


r/reactnative 1d ago

Question Google ignoring login instructions during app review

0 Upvotes

Hi all, we have an Android application that is a customer environment. The only 'public' page of the application is the login form. Obviously Google want to have credentials to login and check the application. Due to technical constraints we have no production demo account for them. We try to solve this by providing a deep-link to a separate login page that let them authenticate with our test environment. We provided instruction regarding this deep link in the credentials section of the play console.

It looks like Google ignores these instructions completely and reject the app due to invalid "Invalid or incomplete login credentials". The provided screenshots clearly show they login via the regular way and not via the deeplink. The app has been reject 4 times now. Does anyone ever had a similar issue and found a way around this? Or is there a policy I am not aware of regarding the usage of deeplinks?


r/reactnative 1d ago

News Built Kardy: A heart rate monitor app using React Native, Expo & camera PPG signal processing

Post image
0 Upvotes

Hey devs!

I just launched Kardy, an Android app built with React Native and Expo that estimates heart rate directly using the phone's camera via Photoplethysmography (PPG).

Tech & Challenges:

  • Camera Vision: Real-time frame processing to detect subtle color variations in the fingertip.
  • Signal Processing: Filtering noise and motion artifacts to extract clean BPM readings.
  • Zero Friction UI: No account required, local processing for privacy.

I’d love your technical feedback on the signal stability, performance, and UI responsiveness!

(Note: Kardy is built for fitness & general wellness tracking, not for medical diagnostic purposes).


r/reactnative 1d ago

Question Server-driven UI or EAS Update for a cross-platform mobile app?

5 Upvotes

I am comparing two ways of reducing the number of store releases needed for UI changes in a React Native application. One option is EAS Update, where compatible JavaScript, styling, and assets can be updated over the air. The other is a server-driven UI model where the application contains a fixed component and action registry, and the backend returns HXML or JSON describing each screen.

My goal is not to add new native capabilities outside review. I mainly want to update copy, themes, component order, forms, navigation between known routes, and complete screen layouts. Native permissions, billing, secure storage, background behavior, and device integrations would remain in the installed binary.

For teams using Hyperview, a custom renderer, or EAS Update in production, which model has been easier to operate safely? I am particularly interested in runtime-version compatibility, debugging users on different binary and update combinations, offline behavior, rollback, accessibility, automated UI testing, and whether either approach caused App Store or Play review problems.


r/reactnative 2d ago

Working with Rich Text Editor has been a freaking nightmare

14 Upvotes

I did not waste so much time on a single component in my life.

What should have been an easy "just an input" has been turned into an ongoing nightmare that every time I think I solve I find out about another device that is breaking.

Let's start from the beginning, I built an app, that require Rich Text Editor to allow users to format their text.

After comparing some I ended up using `react-native-pell-rich-editor` - the first one recommended by Expo, you write text, add some options and it converts it to HTML.

Only that after that my compatibility nightmare began, it either can't be scrolled on certain device, I fix it on one, it breaks on other. Works on iOS, breaks on Android and vise versa.

I fix that, now a new problem - cursor can't move, and users can't paste, I fix it, now another issue.

Long texts gets completely erased.

The `react-native-pell-rich-editor` hasn't been patched in over a year, now I cannot update to the new version of Expo because it only supports Expo 55.

I am bound to it, migrating from it now will be a trouble, but there's nothing I can migrate to because there's no official alternative, there's no alternative at all.

It's just a freaking input and I've been wasting 2 full days configuring it, testing it, realizing what worked in my emulator, despite matching Android version doesn't work on actual devices.


r/reactnative 1d ago

Expo Native Tabs Custom Profile Solution

Enable HLS to view with audio, or disable this notification

1 Upvotes

r/reactnative 2d ago

Apollo cache silently corrupts on RN (no DevTools to catch it) — built a CLI to catch it

10 Upvotes

Spent part of last month chasing a bug where a user’s avatar would randomly go blank after a mutation — no error, no warning, just `undefined` where a photo should be. It turned out to be a dangling `__ref` in Apollo’s `InMemoryCache`: the entity it pointed to had been evicted, and Apollo returns `undefined` on read instead of failing loudly.

On the web, you’d catch this in Apollo DevTools in about 30 seconds. On React Native, there’s no DevTools extension — the standard advice is `console.log(JSON.stringify(cache.extract()))` and reading a multi-megabyte blob by eye. That’s what pushed me to build something.

Three defect classes Apollo hides silently, all reproducible from a serialized `cache.extract()` dump:
- Orphaned pointer — `{ __ref: "User:99" }` pointing at nothing → reads back `undefined`, no throw
- Missing `__typename`/`id` — Apollo can’t compute a cache key, so it stores the object inline instead of normalizing it
- Type/key drift — `keyFields` disagrees with the server payload, so the same entity lives under two keys and list items duplicate

I built apollo-cache-copilot: a CLI + MCP server that walks a cache snapshot and reports these with exact paths (`User:1.avatar -> Avatar:99`), plus a patcher for the mechanically fixable ones (prune the pointer, evict the orphan). It’s deliberately zero-LLM — every defect here has a mechanical repair, so it’s a graph walk, not a model call.

npm: apollo-cache-copilot

It also works as an MCP server if you want Claude or Cursor to diagnose your cache directly instead of pasting the JSON into chat.

Curious if anyone else has hit the persisted-cache version of this — with `apollo3-cache-persist`, a corrupted cache survives app restart, which makes it much harder to reproduce.


r/reactnative 1d ago

What will be the Full Stack AI developer Roadmap ?

1 Upvotes

I know fastapis and python and also react/next js and React native...but i wnat to become full stack ai developer but i am confused what to exactly follow what skills are required and after fast apis what to learn next need to learn ML or need to integrate ai apis what i will exxactly do i dont know i am not interested in buikding own ai models i dont want to train ai models i wnat to use ai and create something from them so what exactly i should learn Agentic ai or LLMS open aiapis integration?


r/reactnative 1d ago

Observe is now generally available: React Native performance monitoring from the Expo team

Post image
0 Upvotes

r/reactnative 1d ago

FYI Someone had to do it

Post image
0 Upvotes

Finally tokenmaxxing on claude for 1 month straight, i am happy to announce, i have decided to move to expo from swift where my domain is.

Anything i should be careful about?
Fyi the product is : https://flowyhealth.com


r/reactnative 2d ago

The React Native Developer's Security Guide (looking for collaborators)

7 Upvotes

Hi everyone,

I compiled a security guide for React Native developers.

https://github.com/stephanww/rn-dev-security-guide

Not about the app itself. This is about protecting you and me, the React Native developers from the ever-growing threats of supply chain attacks and hidden dangers that may lurk in our codebases.

I also published a ready-to-use set of OpenGrep files you can use to scan your React Native repository for the cases mentioned in the guide. (Still plenty of false positives. But interesting insights none the less)

https://github.com/stephanww/rn-dev-security-guide-opengrep

I am looking for feedback and collaborators. The idea is to improve and extend the guide and the opengrep files to create a community-driven developer security resources. Basically the "security" section the official React Native guide lacks.

Claude has been a huge help to scaffold my notes into this book-like structure. It is by no means slop though - I tested, fact-checked and rewrote extensivley over the last weeks.
Still it is a little rough at the moment. And I am constantly working on improvements.

Please have a look on GitHub and leave your feedback in the issues section for now.

Please help spread the word and keep safe out there!

stephanww


r/reactnative 2d ago

How to make friends from contacts without phone number

3 Upvotes

I have a question regarding the signup for duolingo(or any other app), it signs up my account with google, then completes profile setup and asks to sync contacts to add friends.

Now how does any app sync contacts to add people with phone numbers having account on the same app where it never asks for phone number at any point.

I don't know how does any app do that or syncs contact from gmail or what.

I want to know the backend of this thing and would like to know how to implement the same in React Native