Skip to content

CLI commands

rndl open

Open a deep link on an iOS simulator or Android device, from a full URL or built from a route in your app's route table.

rndl open fires a deep link on a running simulator or device. Pass a full URL, or a route name/pattern that rndl fills in from your route table and app scheme.

rndl open exampleexporouter://users/42                      # a full URL, wherever a device runs
rndl open '/users/:id' --app-dir src/app --params id=42     # build the URL from an Expo Router route
rndl open HomeTabs/Feed/Article --config src/navigation/linking.ts --params slug=hi
rndl open https://example.com/users/42 --platform ios --device "iPhone 17 Pro"

URL mode vs route mode

If the target contains :// it is treated as a full URL and fired as-is. Anything else is looked up in your route table (auto-detected like rndl routes), and the URL is built from the route pattern and your --params. A missing required param errors before any device is touched.

The scheme for route mode is resolved in order: --scheme, then your React Navigation prefixes, then your app.json scheme.

Platform semantics

With no --platform, open fires on every platform that has a device: a booted iOS simulator (via xcrun simctl) and any adb device or emulator. It exits 0 if at least one platform opened the link; a platform with no device is a note, not a failure.

Naming --platform ios, --platform android, or --platform both makes that platform required: no device there is now an error.

Flags

FlagDescription
--params <k=v...>Route params for route mode, e.g. --params id=42 tab=home.
--platform <ios|android|both>Require a specific platform instead of firing wherever a device runs.
--device <id>Simulator UDID/name or adb serial. Requires an explicit --platform.
--scheme <scheme>URL scheme or prefix for route mode.
--app-dir <dir>Expo Router app directory for the route lookup.
--config <module[#export]>React Navigation linking module for the route lookup.
--package <name>Android package that should receive the intent.

Errors are actionable: no booted simulator, an unknown scheme, or an app that does not handle the URL each tell you what to do next, not just what broke.