![React Native Directory Logo](./assets/logo.png)
React Native Directory is a website where you can see all the libraries that are compatible with React Native.
- You made a repository on GitHub and you want the world to know it works with React Native.
- You want to submit a pull request to improve React Native Directory or libraries dataset.
- You want to report a bug or make a suggestion.
- Find the entry for the library in
react-native-libraries.json
file. (Not there? Add it the library.) - Update the entry with the new data. Use the library fields description as a guide.
- Submit a PR.
- Add it at the end of
react-native-libraries.json
file (we use the order in that file for "Recently added" sort option). - Use the template as a guide.
- Submit a PR.
Note
Please follow format, fields order and indentation as seen below, skip any of the false
values and do not fill optional fields, unless it's necessary.
You can find the detailed descriptions of the fields below the entry template.
{
"githubUrl": "<GITHUB REPOSITORY URL>",
"npmPkg": "<OPTIONAL NPM PACKAGE NAME>",
"nameOverride": "<OPTIONAL PACKAGE DISPLAY NAME>",
"examples": [
"<THE URL TO REPO>",
"<THE URL TO A SNACK>"
],
"images": ["<PUBLIC URL TO RELATED IMAGE>"],
"ios": false,
"android": false,
"web": false,
"expoGo": false,
"windows": false,
"macos": false,
"tvos": false,
"visionos": false,
"unmaintained": false,
"dev": false,
"template": false,
"newArchitecture": false
}
-
(string) - URL to the package GitHub repository (currently other Git hosts are not supported).
Package also needs to be published to the NPM registry, because it is a source of crucial data for the directory.
-
(string) - npm package name, by default GitHub repository name will be used. Example:
"@expo/react-native-action-sheet"
.Fill only when the GitHub repository name is different from the name of package published to npm, or the package is a part of monorepo.
-
(string) - display name override.
Fill only when it is different from the GitHub repository name and npm package name.
-
(array of strings) - URLs to example projects or Snacks which demonstrates the library.
-
(array of strings) - URLs to static images or GIFs that shows the library functionality.
Please do not add logotypes or other branding material, and please avoid linking multiple resources which shows the same feature.
-
(boolean) - works on Android device.
-
(boolean) - works on iOS device.
-
(boolean) - can be used with
react-native-web
. -
(boolean) - works with Expo Go — an open-source sandbox app, without using dev clients or prebuild.
Note
Any library can be used with Expo, if you use dev clients and prebuild.
Important
Adding out-of-tree platforms support requires an example or link to the app which uses the library on the given platform.
-
(boolean) - can be used with
react-native-windows
. -
(boolean) - can be used with
react-native-macos
. -
(boolean) - can be used with
react-native-tvos
. -
(boolean) - can be used with
react-native-visionos
.
-
(boolean) - signify that a library is no longer maintained. You can provide alternative or replacement libraries with the
alternatives
field, if needed. -
(boolean) - signify that a library is a development tool or is only a part of development process.
-
(boolean) - signify that a library is a new project template.
-
(boolean) - signify that a library supports, or not, the New Architecture. Skipping the field will result in "untested" status, unless automatic support detection returned a result. You can provide additional context with the
newArchitectureNote
field, if needed.Set this tag only when automatic architecture detection fails for your package, despite it supports the New Architecture.
-
(string) - provide a note for the New Architecture support status, if a boolean
"true"
or"false"
is not sufficient to describe the state of New Architecture support. -
(array of strings) - provide a list of alternatives to the library. eg:
["expo-camera", "react-native-vision-camera"]
. This is used to provide a list of alternatives to a library if it is unmaintained or does not support the New Architecture.
Note
If your package is within a monorepo on GitHub, eg: https://github.com/expo/expo/tree/main/packages/expo-web-browser,
then the name, description, homepage, and topics (keywords) will be extracted from package.json
in the package subdirectory.
However, GitHub stats will be based on the monorepo, because there isn't really another option.
- Node LTS
yarn && yarn start
You should be able to visit localhost:3000
in your browser.
- Visit https://github.com/settings/developers to get your keys (don't worry about the callback URL, put whatever you want).
- Load the
GITHUB_TOKEN
environment variable into your shell.
This command creates site data in ./assets/data.json
GITHUB_TOKEN=<*> yarn data:update
Get a commit on main
and it will be automatically deployed.
Sure, go for it!
https://reactnative.directory/api/libraries
- Returns a list of all libraries in
JSON
format.
https://reactnative.directory/api/libraries?search=webgl
- Returns a list of all libraries in
JSON
format that have the keywordwebgl
.
https://reactnative.directory/api/libraries?search=webgl&expoGo=true
- Returns a list of all libraries in
JSON
format that have the keywordwebgl
and work with Expo Go app.
https://reactnative.directory/api/libraries?search=webgl&expoGo=true&android=true
- Returns a list of all libraries in
JSON
format that have the keywordwebgl
, work with Expo Go app and Android.
https://reactnative.directory/api/libraries?search=webgl&expoGo=true&android=true&isPopular=true
- Returns a list of all libraries in
JSON
format that have the keywordwebgl
, work with Expo Go app, Android and are popular based on the scoring criterion.
All the possible query parameters represents Query
type.
- Submit a PR with changes to
scripts/calculate-score.js
. - You have all the power! Tell us what you want.
- Site is hosted on Vercel, and this is the easiest way to do it.
- You can deploy your own with your own Vercel account
- You will need to provide
GITHUB_TOKEN
environment variable in your Vercel configuration.
# once environment variables are configured, install Vercel and deploy
npm i -g vercel
vercel