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

# Test on device

> Preview your Expo app on a real phone using Expo Go, QR codes, and tunnel mode.

The in-browser preview is the fastest way to iterate, but a real device reveals things the browser can't—native API behavior, real hardware performance, and touch feel. This page covers your options for getting your Openv2 project onto a physical phone.

## In-browser preview

The **Preview** tab in the Workbench runs the Expo web target inside a device frame. Use it for:

* Layout and spacing work
* Navigation flows
* Most UI and state logic

This is your tightest feedback loop because it runs directly inside the WebContainer session. For anything that doesn't require a native runtime, start here.

## Expo Go with a QR code

Expo Go lets your phone load the development build directly from the running dev server.

<Steps>
  <Step title="Install Expo Go">
    Download **Expo Go** from the iOS App Store or Google Play Store on your phone.
  </Step>

  <Step title="Start the dev server">
    Make sure your app is running in Openv2. Check the **terminal** tab in the Workbench—you should see the Expo dev server output and a QR code.
  </Step>

  <Step title="Scan the QR code">
    Scan the QR code from the Openv2 **Preview panel** or directly from the terminal output. Your phone opens the app through Expo Go.

    <Note>
      On iOS, use the native Camera app to scan. On Android, use the Expo Go app's built-in scanner.
    </Note>
  </Step>
</Steps>

**If the scan fails, check:**

* Your phone and the dev server can reach each other (same network, or tunnel enabled—see below)
* No firewall or VPN is blocking the connection
* The dev server is actually running (watch for errors in the terminal tab)

## Tunnel preview

If your phone can't reach the dev server directly — for example, when you're on a different network — Openv2 offers a **tunnel** option that makes your session reachable from any network without requiring the same LAN.

Use the **QR / tunnel** controls in the Preview panel to enable it.

<Warning>
  Tunnel availability and stability depend on network conditions. If the tunnel is unavailable, fall back to Expo Go on the same network, or continue with the in-browser preview.
</Warning>

## Dev builds

For apps that require custom native code beyond what Expo Go supports, you'll need a **dev build**—a custom app binary with your specific native dependencies included. See [Builds](/builds-mobile) for how to generate one.

## What to check on device vs browser

Some things only show up on real hardware:

| Check              | Why device matters                                                                                      |
| ------------------ | ------------------------------------------------------------------------------------------------------- |
| **Native APIs**    | Camera, push notifications, and deep links don't run in the web preview                                 |
| **Performance**    | Slow lists, large images, and animation jank appear on real hardware even when the browser feels smooth |
| **Touch targets**  | Tap accuracy and gesture feel are only meaningful on an actual touchscreen                              |
| **Font rendering** | System fonts and text scaling look different on iOS and Android                                         |

<Tip>
  When you spot a performance issue on device—like a laggy list—describe what you see and ask the assistant to optimize. Paste specific component names or file paths for faster fixes.
</Tip>

***

When you're ready to distribute your app, see [Builds](/builds-mobile) for generating APK/AAB and IPA files, or go straight to [Play Store](/play-store) or [App Store](/app-store) publishing.
