# Device development and networking

<PageBadges />

The default `form0.config.js` starts Expo on the local network. A physical device must be able to
reach the development computer and port 8081. Host firewalls, isolated Wi-Fi networks, VPNs, and
container networking can prevent that connection.

## Start through form0-cli

Use the application-server integration when working from the form0 CLI:

```bash
form0 serve --app
```

The CLI reads the `devServer` block in `form0.config.js`. Full command behavior belongs to the
[app development server reference](/cli/local-development/app-development-servers).

## Advertise a public development URL

When LAN access is unavailable, set the configured environment variable in `.env.local`:

```text
FORM0_APP_PUBLIC_URL=https://your-development-domain.example
```

Start the tunnel separately, then run `form0 serve --app`. For one run, use
`--public-url https://your-development-domain.example`.

The URL must serve the Expo manifest, bundle, assets, and WebSocket traffic directly. Browser
interstitials and access-challenge pages break Expo clients. Never treat a development tunnel as a
production deployment or place privileged credentials in the mobile bundle.

Use a [development build](https://docs.expo.dev/develop/development-builds/introduction/) for
production-oriented work or custom native code. Expo Go is an optional learning and evaluation
client when a compatible SDK build is available for the target platform.
