> ## Documentation Index
> Fetch the complete documentation index at: https://docs.revyl.com/llms.txt
> Use this file to discover all available pages before exploring further.

# revyl dev

> Start and manage a hot-reload dev loop on a cloud device.

Starts a dev loop. It detects your project type (Expo, React Native, Swift, Android),
starts hot reload, provisions a cloud device, installs the selected branch's dev build,
and opens a live viewer. For a walkthrough, see [Run your app on a cloud device](/dev-loop).

```bash
revyl dev [flags]
revyl dev <command> [flags]
```

## Commands

| Command | Does |
|---|---|
| `revyl dev start` | Start a hot reload device loop |
| `revyl dev rebuild` | Trigger a rebuild in a running dev session |
| `revyl dev status` | Check dev session state. Always prints JSON. |
| `revyl dev attach` | Attach a device session to a dev context |
| `revyl dev list` | List dev contexts in the current worktree |
| `revyl dev use` | Set the current dev context |
| `revyl dev stop` | Stop a dev context |
| `revyl dev logs` | Stream logs from the running dev session |
| `revyl dev auth refresh` | Re-fire the auth bypass deep link from session boot values |

## Flags

### Device and session

| Flag | Default | Description |
|---|---|---|
| `--platform <ios\|android>` | | Device platform to start |
| `--timeout <seconds>` | `300` | Device idle timeout |
| `--device-runner <id>` | | Target a specific device runner |
| `--open`, `--no-open` | open | Open the live device viewer in the browser |
| `--detach` | | Run in the background and return once the device session is ready |
| `--json` | | With `--detach`, print a machine-readable handshake once the session is ready |
| `--context <name>` | worktree default | Target a specific named dev context |

### Build selection

| Flag | Default | Description |
|---|---|---|
| `--profile <name>` | | Named build profile to use |
| `--app-id <id>` | | App to resolve the initial build from |
| `--branch <name>` | | Revyl branch for the initial build and every rebuild |
| `--build-selection <mode>` | `inherit` | `inherit` (the branch's default build), `latest`, or pinned with `--build-version-id` |
| `--build-version-id <id>` | | Specific build version to use |
| `--build` | | Force build and upload before starting |
| `--no-build` | | Never run build commands; require an existing build |
| `--remote` | | Build native iOS changes on a remote Revyl build runner |
| `--seed-latest` | | With `--remote`, install the branch's latest build immediately, then hot-swap the fresh build when it lands |

### Dev server

| Flag | Default | Description |
|---|---|---|
| `--port <n>` | `8081` | Port for the local dev server |
| `--ready-timeout <seconds>` | `60` | Wait for the dev-server relay to become reachable (env `REVYL_READY_TIMEOUT`) |
| `--prewarm-timeout <seconds>` | `300` | Wait for a cold Expo bundle prewarm (env `REVYL_PREWARM_TIMEOUT`) |
| `--tunnel <url>` | | Use an external Expo tunnel URL or dev-client deep link instead of the Revyl relay |
| `--force-hot-reload` | | Diagnostic: launch after Expo relay transport even if manifest readiness can't be proven |

### Launch configuration

| Flag | Description |
|---|---|
| `--launch-var <key-or-id>` | Org launch variable to apply when the session starts (repeatable) |
| `--launch-arg <token>` | Inline non-secret iOS app argument (repeatable, order preserved) |
| `--launch-arg-set <name-or-id>` | Stored iOS argument set to apply (repeatable) |
| `--no-inherited-launch-vars` | Ignore `REVYL_INHERITED_LAUNCH_ENV_VAR_IDS`; explicit launch variables still apply |

Global flags: `-C, --chdir <dir>`, `--debug`, `-q, --quiet`.

## Subcommand flags

| Command | Flag | Default | Description |
|---|---|---|---|
| `rebuild` | `--wait` | | Block until the rebuild completes |
| `rebuild` | `--json` | | Output the result as JSON (implies `--wait`) |
| `rebuild` | `--timeout <seconds>` | `120` | Timeout with `--wait` |
| `status` | `--wait-ready` | | Block until the dev loop has a live device session |
| `status` | `--timeout <seconds>` | `300` | Timeout with `--wait-ready` |
| `logs` | `--build` | | Stream remote build runner logs for the latest build |
| `logs` | `--follow` | | Keep streaming until the build completes |
| `logs` | `--timeout <seconds>` | `300` | Wait for a remote build job to register, with `--follow` |
| `stop` | `--all` | | Stop every dev context in the current worktree |
| `stop` | `--json` | | Output the result as JSON |

## Examples

```bash
revyl dev
revyl dev --platform ios
revyl dev --platform android --no-open
revyl dev --context ios-main --platform ios
revyl dev attach active
revyl dev list
```
