
Nitro Modules are highly efficient native modules with a statically compiled binding layer to JSI, and typesafe JS bindings. It consists of two parts:
- react-native-nitro-modules: The core C++ library powering all nitro modules
- nitrogen: A code-generator for nitro module library authors
Example
Declaration (TypeScript):
export interface Math extends HybridObject {
add(a: number, b: number): number
}
Implementation (C++, Swift or Kotlin):
class HybridMath: public HybridMathSpec {
public:
double add(double a, double b) override {
return a + b;
}
}
Usage (TypeScript):
const math = NitroModules.createHybridObject<Math>('Math')
const result = math.add(5, 3)
Installation
Install react-native-nitro-modules from npm:
npm i react-native-nitro-modules
cd ios && pod install
Documentation
- Nitro docs 📚
- Community Discord 💬
- nitrogen/README.md
- react-native-nitro-modules/README.md
- react-native-nitro-test example module
TestObject.nitro.ts
example playground
Supported Platforms
Cross-platform
Cross-platform native modules can be built with C++. Any custom C++ types can be used and bridged to JS with minimal overhead.
JS <-> C++ type converters are statically generated ahead of time - no more dynamic lookups or runtime parser errors! 🥳
iOS
iOS native modules and view components can be written either in pure C++, or pure Swift. Thanks to Swift 5.9, Swift Nitro Modules bridge directly to C++ instead of going through Objective-C message sends. Woohoo, no more Objective-C, and zero overhead C++ -> Swift calls! 🥳
Android
Android native modules and view components can be written either in pure C++, or pure Kotlin/Java. Thanks to fbjni, even complex types can be effortlessly bridged to Kotlin/Java with minimal overhead! 🔥
Margelo
Nitro is built with ❤️ by Margelo. We build fast and beautiful apps. Contact us at margelo.com for consultancy services.
Contributing
See the contributing guide to learn how to contribute to the repository and the development workflow.
License
MIT