Documentation
react-native-deeplink-devtools
Deep-link tooling for React Native: inspect your app's route table, validate universal links and Android App Links, open links on simulators and devices, debug matches live, and generate TypeScript types for your deep links.
Deep linking is one of the most error-prone parts of a React Native app, and the failures are
silent: a universal link that opens Safari instead of your app, an AASA file behind a redirect, an
assetlinks.json with the wrong fingerprint, a route that no applinks component covers. None of
that shows up until a user taps a link in production.
rndl turns those footguns into a check you run locally and in CI, so you never ship a broken
link again.
rndl routes # aligned table of every deep-linkable route
rndl validate --domain example.com # check AASA + assetlinks.json, exit 1 on errors
rndl open '/users/:id' --params id=42 # build the URL and open it on a running device
rndl interactive # pick a route, fire it, watch the live match
rndl typegen --out src/deeplinks.gen.ts # generate typed, tsc-checked deep-link helpersEvery command works with both Expo Router (auto-detected app/ or src/app/ directory) and React
Navigation (point --config at your linking module). Start with
Getting started, or jump straight to a
command from the sidebar.
What is in the box
| Package | Purpose |
|---|---|
react-native-deeplink-devtools | The rndl CLI: routes, validate, open, interactive, typegen |
@deeplink-devtools/core | Route-table model, matchers, validators (pure TS, no RN deps) |
@deeplink-devtools/adapter-expo-router | Builds a route table from an Expo Router app/ directory |
@deeplink-devtools/adapter-react-navigation | Builds a route table from a React Navigation linking config |
@deeplink-devtools/runtime | Tiny in-app reporter for live deep-link debugging (dev-only) |
@deeplink-devtools/typegen | Generates typed route helpers from your route table |
There is also a GitHub Action that wraps
rndl validate and rndl routes in CI, annotates pull requests inline, and uploads SARIF to code
scanning. It is distributed from the repo rather than npm.
Compared to the alternatives
| Task | rndl | npx uri-scheme | Manual (curl + editor) | Attribution SDKs (Branch, Adjust) |
|---|---|---|---|---|
| Print the app's deep-link route table | yes | no | no | no |
| Validate AASA / assetlinks.json in CI | yes | no | partial (by hand) | no |
| Cross-check routes against AASA | yes | no | no | no |
| Open a link on a device | yes | yes | yes (xcrun/adb) | no |
| Live match debugging (fired vs matched) | yes | no | no | no |
Typed deep links (tsc-checked) | yes | no | no | no |
| Attribution / marketing links | no | no | no | yes |
rndl is developer tooling for testing and validating the links your app already declares. It is
not an attribution platform, and it does not modify your linking configuration.
Compatibility
| Area | Supported |
|---|---|
| React Native | >= 0.76, New Architecture (bridgeless) only |
| Platforms | iOS (simulator via simctl) and Android (device/emulator via adb) |
| Routers | Expo Router and React Navigation 7+ |
| Expo | Expo-compatible; example apps are Expo dev-client apps |
| Node (CLI) | >= 22 |
Out of scope
Attribution and marketing links (Branch/Adjust territory), push-notification deep links, and modifying your app's linking configuration. The toolkit inspects and validates; it does not rewrite your app.
The source lives at github.com/deeplink-devtools/react-native-deeplink-devtools under the MIT license.