Skip to content

Native bindings to LevelDB for React Native, exposed as leveldown-compatible interface

License

Notifications You must be signed in to change notification settings

picnic-ventures/react-native-leveldown

 
 

Repository files navigation

react-native-leveldown

This library implements an abstract-leveldown compatible interface to LevelDB for React Native. The implementation is a thin Native Module binding directly to the original C++ implementation of LevelDB.

The native bindings are implemented for iOS and Android. The iOS bindings will also run on macOS via Catalyst.

My thanks to Giacomo Randazzo (@RAN3000) for contributing the Android bindings to this package.

Usage

Install via yarn add react-native-leveldown. Make sure to cd ios; pod install to build the native module for iOS.

This module implements the interface defined in abstract-leveldown, so you can either use it directly as documented there or somewhat more conveniently using the levelup wrapper.

Typical usage:

import RNLeveldown from "react-native-leveldown";
import LevelUp from "levelup";

const db = LevelUp(new RNLeveldown("myDatabaseName"));
await db.put("hello", "world");
await db.get("hello") // # => "world"
await db.close();

Note that databases are stored in the app container's Documents directory on iOS and the app's persistent files directory on Android. In the future, the constructor API should probably be extended to add an option to store it instead in some semi-durable cache location, or an ephemeral temporary directory.

Testing

This library passes the abstract-leveldown test suite. To run the tests:

# Setup:
cd testapp
yarn install

# To run the tests on iOS:
(cd ios; pod install)
yarn ios

# To run the tests on Android:
yarn android

Alternatives

If you're looking for an implementation with no native code, you may be interested in asyncstorage-down, which implements abstract-leveldown using React Native's built-in AsyncStorage. Note that this approach will be much slower than native LevelDB bindings, particularly on iOS, where AsyncStorage is basically a serialized JSON blob.

About

Native bindings to LevelDB for React Native, exposed as leveldown-compatible interface

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 40.1%
  • Objective-C++ 26.6%
  • TypeScript 10.2%
  • Ruby 10.0%
  • Objective-C 7.4%
  • JavaScript 4.7%
  • Starlark 1.0%