Contributing
If you encounter issues with Nitro, want to fix a bug, or reproduce a bug in the example app, you'd need to clone the repo and get it running first.
The nitro repo is a Bun monorepo, and is set up like this:
example/
: A react-native app that usesreact-native-nitro-modules
andreact-native-nitro-image
.packages/
/nitrogen/
: The Node app that generates Nitro bindings. On npm, it is callednitro-codegen
./react-native-nitro-modules/
: The core Nitro Modules library which contains mostly C++ code./react-native-nitro-image/
: An example Nitro Module library that contains a lot of test code./template/
: A template for a Nitro Module library.
Run Nitro Example
1. Set up your development environment
You need:
2. Clone the repo
Clone mrousavy/nitro using git, and navigate into the nitro
folder using Terminal.
3. Install dependencies
Using Bun, install all required dependencies:
bun install
bun run build
3.1. (Optional) Install iOS dependencies
If you want to work on the iOS codebase, you also need to install the Pods:
cd example
bundle install
bun pods
4. Run the app
After installing all dependencies, you can run the React Native app in example/
:
- iOS
- Android
- Open
example/ios/NitroExample.xcworkspace
in Xcode - Select your target (iPhone Simulator)
- Click Run
- Open
example/android
in Android Studio - Click Gradle Sync
- Click Run
Reproduce something in the Nitro Example app
With most issue reports, it is required to reproduce the issue in the Nitro example app (example/
).
Whether it's a build error, a nitrogen error, or a runtime error, there needs to be a way to reproduce it here.
Usually, you can reproduce issues like this:
- Fork the repository
- Change the code to reproduce the issue
- Create a PR to the nitro repository which demonstrates the issue
Reproduce a build error
If you encounter a build error, compare your setup to the setup in example/
.
For example, if you have a different setting in your Podfile
, try changing it here in Nitro example/
as well to see if it builds here. Submit a PR with the change required to make it fail, and see if the CI fails to build.
Reproduce a nitrogen bug
The Nitro example/
app uses a Nitro Module (packages/react-native-nitro-image/
) which acts as an example contains a lot of test code, like src/specs/TestObject.nitro.ts
(link). If you change something in TestObject.nitro.ts
, make sure to run nitrogen:
bun image specs
Reproduce a runtime error
Submit a PR to the nitro repository that demonstrates this runtime error or crash in the Nitro example/
app.
Run Nitro Docs
The Nitro docs (nitro.margelo.com) are built with Docusaurus.
To run the Nitro docs, follow these steps:
1. Install dependencies
Navigate into the docs/
folder, and install all dependencies:
cd docs
bun install
2. Run docs (dev)
Then, just run the docs development server using the docusaurus command:
bun start
Linting
We value code quality and consistent styling.
For JS/TS, we use ESLint and Prettier:
bun lint
For C++, we use clang-format:
bun lint-cpp
Make sure to lint your files everytime before creating a PR. This is also enforced in the CI, but linting beforehand also applies auto-fixes.