Plug-in React Native compatibility bindings for Replicache.
CleanShot.2023-02-18.at.19.59.27.mov
- 1.0.0 : replicache <= 14.2.2
- 1.3.0 : replicache >= 15
Replicache enables us to build applications that are performant, offline-capable and collaborative. By default, it uses IndexedDB for client-side persistance. Unfortunately, this technology is not available in React Native and is only supported in web-browsers.
Thankfully, Replicache allows us to provide our own transactional data-store via kvStore
. The goal of this project is to provide some implementations of such a store, along with some guidance in getting up and running with Replicache in React Native.
React Native has relatively good support for SQLite - which provides the strict serializable transactions that we require.
In particular, we provide the choice between three SQLite bindings:
@react-native-replicache/react-native-expo-sqlite
- Backed by
expo-sqlite
- Supported in Expo Go.
- Backed by
@react-native-replicache/react-native-op-sqlite
- Backed by
react-native-op-sqlite
- Better performance.
- Backed by
Some configuration is required to receive poke events from the server. In our example, seen here, we use a polyfill for Server Sent Events. These aren't built into React Native, but are really handy for a demo.
You most likely want to use web-sockets for this. This is relatively trivial with Pusher/Ably etc and similar to the web-app so we won't discuss that further here.
- Install the following in your React Native project:
yarn add expo-crypto
- Decide which SQLite binding is for you and install one of the following:
yarn add @op-engineering/op-sqlite @react-native-replicache/react-native-op-sqlite
yarn add expo-sqlite @react-native-replicache/expo-sqlite
- Ensure that you've polyfilled
crypto.getRandomValues
on the global namespace.- See here for an example.
- Pass in your chosen SQLite binding's React Native Replicache binding into Replicache's
kvStore
option.- This will be one of the following, depending on the binding you chose:
createReplicacheOPSQLiteKVStore
createReplicacheExpoSQLiteKVStore
- See here for an example.
- This will be one of the following, depending on the binding you chose:
- Environment capable of developing iOS/Android applications (iOS is likely preferred).
- See How to install React Native on Mac
- Note: Installing Xcode from the Mac App Store tends to be unusually slow and buggy.
- Try download it from the Apple website instead.
- Clone the repository:
git clone https://github.com/braden1996/react-native-replicache.git
- Install yarn dependencies from repo root:
yarn install
- Perform an initial build:
yarn build
- Install the example iOS app onto a simulator/emulator or connected physical device, e.g:
yarn workspace @react-native-replicache/example-mobile-react-native ios
- Once the above has installed onto your device, you can cancel the now running Metro bundler and simply start dev for all workspaces:
yarn run dev
.
- Flipper has been configured for use with the example app.
- Download it to browser network requests etc