This document describes the server-side JSON API exposed by the React Native Directory.
GET /api/libraries- list and search libraries (paginated, sorted, filterable)POST /api/libraries/check- return metadata for a list of npm package namesGET /api/libraries/statistic- aggregated statistics about the directory datasetGET /api/library- lookup one or more libraries by npm package name (optionallycheckexistence only)GET /api/proxy/npm-stat- proxy to https://npm-stat.com download counts API
Return a list of libraries from the dataset. Supports sorting, full-text search, pagination and many filters.
- Method: GET
- Path:
/api/libraries - Query parameters, all optional. The possible query parameters represents
Querytype:order- sort key (available sorting keys:updated,added,quality,popularity,downloads,issues,stars,relevance,size,dependencies,released).direction-ascendingordescending(default:descending).search- full-text search string (relevancesorting is used automatically when searching).owner- filter by owner name.topic- filter by topic or tag.- Platform support filters (booleans):
ios,android,web,windows,macos,expoGo,fireos,horizon,tvos,visionos,vegaos. - Feature filters (booleans):
hasExample,hasImage,hasTypes,hasNativeCode,configPlugin. - Quality filters (booleans):
isMaintained,isPopular,wasRecentlyUpdated. - Architecture filters (booleans):
newArchitecture,expoModule,nitroModule,turboModule. - Skip categories (booleans):
skipLibs,skipTools,skipTemplates. - Numeric filters:
minPopularity,minMonthlyDownloads. nightlyProgram- boolean flag for Nightly Program participation.bookmarks- when set, the server reads browser cookie bookmarks and returns only bookmarked libraries (see Notes below).- Pagination:
offset(number, default0),limit(number, default20).
- If
searchis provided andorderis missing or equal torelevance, libraries are re-ranked by relevance. - If
bookmarksis set, the server uses the cookie stored bookmarks (fromreq.headers.cookie) to filter. Responses withbookmarksset are not cached publicly.
-
GET
/api/libraries?search=image&order=downloads&direction=descending&limit=1Response:
{ "libraries": [ { "githubUrl": "https://github.com/expo/expo/tree/main/packages/expo-image", "examples": ["https://docs.expo.dev/versions/latest/sdk/image/#usage"], "ios": true, "android": true, "web": true, "tvos": true, "expoGo": true, "fireos": true, "vegaos": "@amazon-devices/expo-image", "newArchitecture": true, "github": { "urls": { "repo": "https://github.com/expo/expo", "homepage": "https://docs.expo.dev/versions/latest/sdk/image/" }, "stats": { "hasIssues": true, "hasWiki": true, "hasSponsorships": false, "hasDiscussions": true, "hasProjects": false, "hasVulnerabilityAlerts": true, "hasTopics": false, "updatedAt": "2026-01-27T20:02:58Z", "createdAt": "2016-08-15T17:14:25Z", "pushedAt": "2026-01-27T20:02:58Z", "forks": 10924, "issues": 335, "subscribers": 351, "stars": 47312, "dependencies": 1 }, "name": "expo-image", "fullName": "expo/expo", "isPrivate": false, "description": "A cross-platform, performant image component for React Native and Expo with Web support", "topics": [], "license": { "name": "MIT License", "url": "http://choosealicense.com/licenses/mit/", "id": "MDc6TGljZW5zZTEz", "key": "mit", "spdxId": "MIT" }, "hasTypes": true, "newArchitecture": false, "isArchived": false, "hasReadme": true, "hasNativeCode": true, "configPlugin": true, "moduleType": "expo" }, "npmPkg": "expo-image", "npm": { "downloads": 5883973, "weekDownloads": 1011061, "size": 839777, "versionsCount": 226, "latestRelease": "3.0.11", "latestReleaseDate": "2025-12-05T06:50:48.709Z", "hasReadme": true }, "score": 90, "matchingScoreModifiers": [ "Very popular", "Popular", "Known", "Recently updated", "Has a README file", "Has a description", "Has vulnerability alerts enabled", "Lots of open issues" ], "popularity": 0.146, "topicSearchString": "", "matchScore": 425 } ], "total": 142 }
Return compatibility metadata for a list of npm package names. This endpoint accepts a JSON body with an array of package names and responds with metadata for each package.
- Method: POST
- Path:
/api/libraries/check - Body parameters:
packages- array of npm package names (required).
- The request body must be a valid JSON object with a
packagesfield. - The response includes metadata for each requested package, such as version, description, and repository URL.
-
POST
/api/libraries/checkwith body{ "packages": ["react-native-reanimated"] }Response:
{ "react-native-reanimated": { "newArchitecture": "supported" } }
Return aggregated statistics about the library dataset, such as total counts of libraries, downloads, and other metrics.
- Method: GET
- Path:
/api/libraries/statistic
-
GET
/api/libraries/statisticResponse:
{ "total": 2326, "newArchitecture": 1570, "downloads": 7380762848, "weekDownloads": 1391864468, "unmaintained": 797, "withTypes": 1626, "withNativeCode": 1123, "withConfigPlugin": 243, "ios": 2199, "android": 2188, "web": 506, "expoGo": 972, "windows": 67, "macos": 44, "fireos": 216, "horizon": 3, "tvos": 100, "visionos": 32, "vegaos": 55 }
Lookup one or more libraries by npm package name. Endpoint can optionally perform a quick check to return existence flag only.
- Method: GET
- Path:
/api/library - Query parameters:
name- npm package name (required).check- boolean flag to return existence information only, without full library data.
- If
checkistrue, the response includes only information about existence for the specified package(s). - If
checkisfalseor not provided, the response includes full library data.
-
GET
/api/library?name=uniwindResponse:
{ "uniwind": { "githubUrl": "https://github.com/uni-stack/uniwind/tree/main/packages/uniwind", "examples": [ "https://github.com/uni-stack/uniwind/tree/main/apps/expo-router", "https://github.com/uni-stack/uniwind/tree/main/apps/expo-example", "https://github.com/uni-stack/uniwind/tree/main/apps/bare" ], "ios": true, "android": true, "web": true, "expoGo": true, "newArchitecture": true, "github": { "urls": { "repo": "https://github.com/uni-stack/uniwind", "homepage": "https://uniwind.dev" }, "stats": { "hasIssues": true, "hasWiki": false, "hasSponsorships": false, "hasDiscussions": true, "hasProjects": true, "hasVulnerabilityAlerts": true, "hasTopics": true, "updatedAt": "2026-02-16T06:41:45Z", "createdAt": "2025-07-29T08:10:42Z", "pushedAt": "2026-02-16T06:41:45Z", "forks": 25, "issues": 2, "subscribers": 6, "stars": 1323, "dependencies": 4 }, "name": "uniwind", "fullName": "uni-stack/uniwind", "isPrivate": false, "description": "The fastest Tailwind bindings for React Native", "topics": ["unistyles", "tailwind", "tailwindcss", "theme", "style"], "license": { "name": "MIT License", "url": "http://choosealicense.com/licenses/mit/", "id": "MDc6TGljZW5zZTEz", "key": "mit", "spdxId": "MIT" }, "hasTypes": false, "newArchitecture": false, "isArchived": false, "hasReadme": true, "hasNativeCode": false, "configPlugin": false }, "npmPkg": "uniwind", "npm": { "downloads": 196697, "weekDownloads": 28489, "size": 635831, "versionsCount": 42, "latestRelease": "1.3.1", "latestReleaseDate": "2026-02-13T10:35:54.904Z", "hasReadme": true }, "score": 60, "matchingScoreModifiers": [ "Popular", "Known", "Recently updated", "Has a README file", "Has a description", "Has vulnerability alerts enabled" ], "popularity": 0.123, "topicSearchString": "unistyles tailwind tailwindcss theme style" } } -
GET
/api/library?name=react&check=trueResponse:
{ "uniwind": true }
Proxy to npm-stat.com to fetch download counts for the last month. This endpoint is a simple proxy and does not perform any data processing.
- Method: GET
- Path:
/api/proxy/npm-stat - Query parameters:
name- npm package name (required).
- It is subject to the same CORS and rate limiting policies as the original npm-stat.com.
-
GET
/api/proxy/npm-stat?name=reactResponse:
{ "react-native": { "2026-01-18": 319495, "2026-01-19": 693157, "2026-01-20": 810833, "2026-01-21": 837204, "2026-01-22": 845437, "2026-01-23": 777158, "2026-01-24": 378434, "2026-01-25": 339869, "2026-01-26": 813923, "2026-01-27": 888545, "2026-01-28": 877008, "2026-01-29": 880932, "2026-01-30": 855686, "2026-01-31": 390039, "2026-02-01": 380828, "2026-02-02": 853673, "2026-02-03": 898431, "2026-02-04": 911421, "2026-02-05": 935844, "2026-02-06": 879993, "2026-02-07": 417938, "2026-02-08": 403069, "2026-02-09": 891276, "2026-02-10": 969193, "2026-02-11": 942355, "2026-02-12": 939358, "2026-02-13": 834084, "2026-02-14": 390313, "2026-02-15": 403198, "2026-02-16": 771778 } }