A high-performance React Native TurboModule bridge for integrating Rust code with heavy computation logic. This package provides a seamless way to offload CPU-intensive tasks to Rust while maintaining the React Native developer experience.
- π High Performance: Leverage Rust's zero-cost abstractions for heavy computations
- π Async/Await Support: Non-blocking operations with proper React Native threading
- π― Type Safety: Automatic TypeScript type generation from Rust structs
- π± Cross-Platform: Seamless iOS and Android support
- π Easy Integration: Simple command-based API
- π§ Production Ready: Robust error handling and panic recovery
- π¦ TurboModule: Built on React Native's new architecture (backwards compatible)
npm install react-native-rs
# or
yarn add react-native-rs
cd ios && pod install
No additional setup required - auto-linking handles everything!
# Install Rust prerequisites (first time only)
yarn setup-rust
# Build Rust libraries for all platforms
yarn build-rust
import { RustBridge } from 'react-native-rs';
// Execute heavy computation in Rust
const result = await RustBridge.execute({
cmd: 'fibonacci',
params: { n: 40 }
});
console.log('Fibonacci result:', result);
import { RustBridge } from 'react-native-rs';
// Image processing example
const processedImage = await RustBridge.execute({
cmd: 'image_filter',
params: {
data: base64ImageData,
filter: 'gaussian_blur',
radius: 5.0
}
});
// Cryptographic operations
const signature = await RustBridge.execute({
cmd: 'sign_data',
params: {
data: 'message to sign',
private_key: privateKeyHex
}
});
All operations use a command-based architecture:
#[derive(Serialize, Deserialize, TS)]
#[ts(export)]
pub enum Command {
Fibonacci(FibonacciInput),
ImageFilter(ImageFilterInput),
SignData(SignDataInput),
// Add your custom commands here
}
Types are automatically generated from Rust to TypeScript:
#[derive(Serialize, Deserialize, TS)]
#[ts(export)]
pub struct FibonacciInput {
pub n: u32,
}
#[derive(Serialize, Deserialize, TS)]
#[ts(export)]
pub struct FibonacciResult {
pub value: u64,
pub computation_time_ms: u64,
}
Robust error handling with panic recovery:
try {
const result = await RustBridge.execute(command);
// Handle success
} catch (error) {
// Handle Rust panics and errors gracefully
console.error('Rust execution failed:', error);
}
- Define Rust types:
// rust/src/fibonacci.rs
#[derive(Serialize, Deserialize, TS)]
#[ts(export)]
pub struct FibonacciInput {
pub n: u32,
}
pub async fn fibonacci(input: &FibonacciInput) -> Result<u64, eyre::Error> {
// Your implementation here
}
- Add to command enum:
// rust/src/cmd.rs
#[derive(Serialize, Deserialize, TS)]
#[ts(export)]
pub enum Command {
Fibonacci(FibonacciInput),
// ... other commands
}
- Generate TypeScript types:
yarn generate-types
- Use in React Native:
const result = await RustBridge.execute({
cmd: 'fibonacci',
params: { n: 40 }
});
# Build everything
yarn build-all
# Build only Rust
yarn build-rust
# Build only TypeScript
yarn build
# Run TypeScript tests
yarn test
# Check type synchronization
yarn check-types
Check out the example/
directory for a complete React Native app showcasing various use cases:
- Fibonacci computation
- Image processing
- Cryptographic operations
- Real-time data processing
yarn example:ios
# or
yarn example:android
- Uses
cargo-pod
for seamless CocoaPods integration - Builds universal frameworks for device and simulator
- Supports both old and new React Native architectures
- Uses
cargo-ndk
for Android NDK integration - Supports multiple architectures (arm64-v8a, x86_64)
- CMake integration for native library linking
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
- Clone the repository
- Install dependencies:
yarn install
- Set up Rust:
yarn setup-rust
- Build everything:
yarn build-all
- Run example:
yarn example:ios
MIT License - see LICENSE for details.
Inspired by production React Native + Rust integrations and the need for high-performance mobile computing.