website/contributing/how-to-contribute-code.md
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.
:::info 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. :::
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).yarn build builds all configured packages — in general, this command only needs to be run by CI ahead of publishing.
yarn build-types generates TypeScript types for the public API and updates the snapshot.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.
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.
@property declarationsif, on the same line- method, @interface, and @implementation brackets on the following line* operator goes with the variable name (e.g. NSObject *variableName;)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:
main.yarn lint --fix).yarn build-types --validate. If so, regenerate the snapshot using yarn build-types.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.
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.
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.