Start here
Getting started
Install the rndl CLI, print your app's deep-link route table, and validate your domain's universal-link files in a few minutes.
Install
Add the CLI to your app as a dev dependency:
npm install --save-dev react-native-deeplink-devtoolsOr run it without installing:
npx react-native-deeplink-devtools routesOnce installed, the binary is rndl, so commands read rndl routes, rndl validate, and so on.
Requirements
- Node >= 22 for the CLI.
- React Native >= 0.76 on the New Architecture (bridgeless) for the in-app reporter.
- Expo Router, or React Navigation 7+ with a linking configuration.
Print your route table
From your app's directory:
rndl routesFor Expo Router, rndl auto-detects the app/ or src/app/ directory (override with
--app-dir). For React Navigation, point --config at your linking module:
rndl routes --config src/navigation/linking.ts # default or `linking` export
rndl routes --config src/navigation/linking.ts#myExport # a specific named exportYou get an aligned table of every deep-linkable route with its URL pattern and params. Add
--json for machine-readable output (routes, API routes, layouts, and diagnostics).
See rndl routes for what each router adapter understands.
Validate your domain
rndl validate --domain example.comThis fetches your apple-app-site-association and assetlinks.json files and runs the checks
Apple and Google actually enforce: HTTPS, no redirects, the 128KB AASA cap, JSON schema, appIDs,
package names, and fingerprints. Run it from your app's directory and it also cross-checks the
files against your route table. Errors exit 1, so the same command works as a CI gate.
See rndl validate for every check and flag.
Where next
- rndl open: fire a link on a simulator or device.
- rndl interactive: pick a route, fire it, and watch what your app matched, live.
- Runtime reporter: the in-app hook that powers the live match view.
- rndl typegen: generate typed, compile-time-checked deep-link helpers.
- GitHub Action: the same checks on every pull request.