• Stars
    star
    140
  • Rank 261,473 (Top 6 %)
  • Language
    C++
  • License
    MIT License
  • Created about 3 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A contacts library for React Native using JSI

react-native-jsi-contacts

The current react-native-contacts library uses the React Native Bridge to convert the native Java/Objective-C types to JavaScript values. This is asynchronous, batched, and serializes the huge contacts list in the native world (write into WritableArray/WritableMap, then let the Bridge convert to JSON), then deserializes it on the JavaScript side using JSON. It is therefore slow.

react-native-jsi-contacts uses JSI to be way faster.

  • Direct invocation (no batching!)
  • No JSON serialization happening
  • Directly convert object into JSI Types
  • Lazily get individual Contact fields (jsi::HostObject lazy-get)

⚠️ react-native-jsi-contacts only works on Android. If you want me to implement iOS support, consider funding the project.

Performance

The library uses almost the same native "getContacts()" function as react-native-contacts (minor tweaks to not use the Bridge types WritableArray/WritableMap), so the only difference is the conversion speed.

For 25 contacts, I have measured an average speed increase of ~35%, this greatly scales with the amount of contacts you have though.

 LOG  JSI: Contacts Permission: granted
 LOG  JSI: Got: 25 contacts in 55.14947900176048ms.
 LOG  Bridge: Contacts Permission: granted
 LOG  Bridge: Got: 25 contacts in 74.15260401368141ms.

For 25 contacts, the conversion between the native Java Contacts list and the JavaScript Contacts list takes only ~3 milliseconds!

Installation

  1. Install using npm/yarn

    npm install react-native-jsi-contacts
  2. Add this code:

    JsiContactsModule.install(reactApplicationContext);

    to your JSIModulePackage's getJSIModules method. See the react-native-mmkv installation guide on how to create a JSIModulePackage.

Sponsors

This project is sponsored by Galaxycard.

Usage

Get a list of all contacts:

import { getContactsAsync } from "react-native-jsi-contacts";

const contacts = await getContactsAsync();

Get a hashsum to compare for any changes in the contact book:

import { getHashAsync } from "react-native-jsi-contacts";
import { MMKV } from "react-native-mmkv";

const storage = new MMKV();

const hash = await getHashAsync();
const previousHash = storage.getString("contactsHash")
if (previousHash !== hash) {
  // get all contacts and reload hash now.
}

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT

Thanks

  • Thanks to GalaxyCard for sponsoring this project
  • Thanks to react-native-contacts for the native "getContacts()" implementation

More Repositories

1

react-native-vision-camera

📸 A powerful, high-performance React Native Camera library.
Swift
7,239
star
2

react-native-mmkv

⚡️ The fastest key/value storage for React Native. ~30x faster than AsyncStorage!
C++
5,727
star
3

react-native-blurhash

🖼️ A library to show colorful blurry placeholders while your content loads.
Kotlin
1,568
star
4

react-native-multithreading

🧵 Fast and easy multithreading for React Native using JSI
C++
1,049
star
5

Colorwaver

🎨 An app to detect color palettes in the real world - powered by VisionCamera
TypeScript
548
star
6

react-native-jsi-image

🖼️ A writeable in-memory Image JSI Host Object
C++
267
star
7

react-native-tracking-transparency

🕵️ A React Native Library for interacting with the tracking API from iOS 14.
Java
208
star
8

react-native-google-nearby-messages

📲 Communicate with nearby devices using Bluetooth, BLE, WiFi and near-ultrasonic audio. Broadcast and receive small payloads (like strings) using the easy-to-use React Native API!
Kotlin
173
star
9

react-native-blob-jsi-helper

A React Native library for accessing an ArrayBuffer of a Blob instance.
C++
129
star
10

AnimatedGif

📼 A high performance .NET library for reading and creating animated GIFs
C#
127
star
11

react-native-jsi-library-template

Template for React Native JSI Libraries Ă  la Marc
C++
110
star
12

clean-rn

A simple CLI tool to clean all React Native caches in your project.
JavaScript
109
star
13

vision-camera-image-labeler

VisionCamera Frame Processor Plugin to label images using MLKit Vision
Java
97
star
14

ImgurSniper

📷 A quick and easy Image, Screenshot and Screen recording sharing tool
C#
85
star
15

react-native-style-utilities

Fully typed hooks and utility functions for the React Native StyleSheet API
JavaScript
78
star
16

Hotkeys

🔤 A small C# (.NET) Library which allows binding of global HotKeys to any Application's Windows (including Windows Apps such as explorer.exe), even in Background. (using P/Invokes)
C#
71
star
17

react-native-notification-badge

🔴 A notification badge count manager for React Native
Swift
47
star
18

react-native-pressable-opacity

A <PressableOpacity> and a supercharged <NativePressableOpacity> components for React Native
TypeScript
46
star
19

DiscordMusicBot

A Discord Bot for playing YouTube music.
C#
43
star
20

GenericProtocol

⚡️ A fast TCP event based buffered server/client protocol for transferring data over the (inter)net in .NET 🌐
C#
42
star
21

react-native-pressable-scale

A <PressableScale> and a supercharged <NativePressableScale> components for React Native
TypeScript
39
star
22

StorageBenchmark

Benchmark App to compare different storage libraries (MMKV, AsyncStorage, WatermelonDB, RealmDB, SQLite)
Java
29
star
23

react-native-screen-corner-radius

📱 A React Native library to get the Device's Screen's corner radius
Java
27
star
24

BrabeNetz

🧠 A fast and clean supervised neural network in C++, capable of effectively using multiple cores
C++
26
star
25

Toast

🍞 The rounded and animated Android Toast for .NET WPF/XAML
C#
26
star
26

Fiddle

📜 A lightweight code editor for editing, compiling and running code snippets/scripts supporting multiple languages and rich GUI
C
23
star
27

Jellyfish

🐟 An incredibly lightweight and type safe MVVM library for .NET WPF, Silverlight, Xamarin and UWP
C#
20
star
28

PostShot

📷 An easy to use, lightning fast and modern screenshot and screen-recording tool powered by C++ and Qt
C++
17
star
29

vision-camera-resize-plugin

A VisionCamera Frame Processor plugin for fast buffer resizing
Objective-C
17
star
30

WebUntisSharp

⏰ A Wrapper of the WebUntis JSON API for .NET
C#
14
star
31

pipestate

🏦 A minimal state management library for React.
TypeScript
13
star
32

gimp-rpc

A GIMP plugin to display Discord Rich Presence made with C
C
11
star
33

react-native-sectioned-slider

An iOS 11 Control Center inspired Slider for React Native
Ruby
10
star
34

ClipboardMonitor

A small C# Library for Monitoring Clipboard with P/Invokes (e.g.: Clipboard Content Changed event)
C#
9
star
35

GameFinder

🎮 An application for finding games to play you and your friends have on Steam
C#
8
star
36

QHotkeys

🔠 A small and lightweight cross platform C++ library implementing a system-wide hotkey system for Qt
C++
7
star
37

Keepr

A Tinder-like swipe view to keep or remove pictures from a photoshoot with extra comparison features
TypeScript
7
star
38

BmpPwd

🔐 BmpPwd is a .NET Class Library for overloadable en/decrypting strings or binary data to a System.Drawing.Image
C#
7
star
39

MaterialDesignWindowsDialogs

A new Theme (Android Material Design) for Windows Message Boxes (by hooking)
C#
7
star
40

shared-registry

Shared-Registry allows you to share objects between instances without introducing memory leaks.
TypeScript
6
star
41

dotfiles

My personal minimalistic dotfiles (.vimrc, .zshrc, .oh-my.zsh, custom scripts, ..)
Shell
6
star
42

mrousavy

✨ it's lit ✨
6
star
43

MetaLog

📝 Simple, yet effective, logging with Metadata CallerInfo for creating beautiful Log files in C#/VB .NET
C#
5
star
44

SchoolTool

📓 An App to watch your timetable and get notified of changes.
C#
3
star
45

HankHill

A discord bot for pixelating and jpegifying images
C#
3
star
46

maconvert

Easily convert .svg files to .png files
JavaScript
3
star
47

TinyRocket

A 2D Endless Unity Game; Fly up high and beat highscores with your customizable and upgradeable Rocket!
C#
3
star
48

Cirilla

🤖 Cirilla - The swiss army knife discord bot supporting many commands and systems
C#
3
star
49

Morph

🛠 A fast .NET Standard Class Library for parsing results from an SQL query to .NET objects to eliminate risky column-index hardcoding
C#
2
star
50

QPastebin

A quick Pastebin-uploader shell script using curl and the Pastebin REST API
Shell
2
star
51

QuantumSnippets

Snippets, Examples or Test code for Quantum Computers written in the Microsoft Quantum Computer Programming Language Q#
C#
1
star
52

discord-cli

CLI for discord bots
JavaScript
1
star
53

ModellbaumesseRoboter

Roboter fĂźr Modellbaumesse 2016 (TGM 3DHIT)
C++
1
star
54

Vertaler

📖 A pop-up tray application to instantly translate something from your clipboard using Google Translate
C#
1
star
55

pokecord-guesser

Guesser for Pokecord using Discord API and reverse image lookup
HTML
1
star
56

ModWnd

👺 A daemon to move any Window from within it's body (child area) while holding a modifier key (Windows/Alt)
C++
1
star
57

VisionCameraDemo

Demo for using VisionCamera + zooming
TypeScript
1
star