How to Contribute Code
Thank you for your interest in contributing to React Native! From commenting on and triaging issues, to reviewing and sending PRs, all contributions are welcome. In this document, we'll cover the steps to contributing code to React Native.
If you are eager to start contributing code right away, we have a list of good first issues
that contain bugs which have a relatively limited scope.
Issues labeled help wanted
are good issues to submit a PR for.
Prerequisitesβ
Please refer to the Environment Setup guide to setup required tools and the development environment based on the platform us use and platform which you want to develop for.
Development Workflowβ
After cloning React Native, open the directory and run yarn
to install its dependencies.
Now you are set up to run several commands:
yarn start
starts the Metro packager server.yarn lint
checks the code style.yarn format
automatically formats your code.yarn test
runs the Jest-based JavaScript test suite.yarn test --watch
runs an interactive JavaScript test watcher.yarn test <pattern>
runs JavaScript tests with matching filenames.
yarn flow
runs the Flow typechecks.yarn flow-check-android
does a full Flow check over*.android.js
files.yarn flow-check-ios
does a full Flow check over*.ios.js
files.
yarn test-typescript
runs the TypeScript typechecks.yarn test-ios
runs the iOS test suite (macOS required).
Testing your Changesβ
Tests help us prevent regressions from being introduced to the codebase. We recommend running yarn test
or the platform-specific scripts above to make sure you don't introduce any regressions as you work on your change.
The GitHub repository is continuously tested using CircleCI, the results of which are available through the Checks functionality on commits and pull requests.
You can learn more about running and writing tests on the How to Run and Write Tests page.
Coding Styleβ
We use Prettier to format our JavaScript code. This saves you time and energy as you can let Prettier fix up any formatting issues automatically through its editor integrations, or by manually running yarn run prettier
. We also use a linter to catch styling issues that may exist in your code. You can check the status of your code styling by running yarn run lint
.
However, there are still some styles that the linter cannot pick up, notably in Java or Objective-C code.
Objective-Cβ
- Space after
@property
declarations - Brackets on every
if
, on the same line - method
,@interface
, and@implementation
brackets on the following line- Try to keep it around 80 characters line length (sometimes it's not possible...)
*
operator goes with the variable name (e.g.NSObject *variableName;
)
Javaβ
- If a method call spans multiple lines closing bracket is on the same line as the last argument.
- If a method header doesn't fit on one line each argument goes on a separate line.
- 100 character line length
Sending a Pull Requestβ
Code-level contributions to React Native generally come in the form of a pull request. The process of proposing a change to React Native can be summarized as follows:
- Fork the React Native repository and create your branch from
main
. - If you've added code that should be tested, add tests.
- If you've changed APIs, update the documentation.
- Ensure the test suite passes, either locally or on CI once you opened a pull request.
- Make sure your code lints (for example via
yarn lint --fix
). - Push the changes to your fork.
- Create a pull request to the React Native repository.
- Review and address comments on your pull request.
- A bot may comment with suggestions. Generally we ask you to resolve these first before a maintainer will review your code.
- If you haven't already, submit the Contributor License Agreement ("CLA").
If all goes well, your pull request will be merged. If it is not merged, maintainers will do their best to explain their reasoning.
If this is your first time sending a pull request, we have created a step-by-step guide to help you get started. For more detailed information on how pull requests are handled, see the Managing Pull Requests page.
Contributor License Agreementβ
In order to accept your pull request, we need you to submit a Contributor License Agreement (CLA). You only need to do this once to work on any of Meta's open source projects. It only takes a minute, so you can do it while you wait for your dependencies to install.
Licenseβ
By contributing to React Native, you agree that your contributions will be licensed under the LICENSE file in the root directory of the React Native repository.