expo-air

Configuration

All expo-air configuration options

.expo-air.json

The main configuration file, created by expo-air init. Committed to git.

{
  "autoShow": true,
  "ui": {
    "bubbleSize": 60,
    "bubbleColor": "#007AFF"
  }
}
OptionTypeDefaultDescription
autoShowbooleantrueAutomatically show the widget when the app launches (DEBUG only)
ui.bubbleSizenumber60Size of the floating bubble in pixels
ui.bubbleColorstring"#007AFF"Bubble color as a hex string
envFilestringPath to an env file where extra tunnel URLs are written
extraTunnelsExtraTunnelConfig[]Additional local services to tunnel (see Extra Tunnels)

.expo-air.local.json

Auto-generated file containing tunnel URLs for the current dev session. Gitignored — do not edit manually.

{
  "serverUrl": "wss://random-name.trycloudflare.com",
  "widgetMetroUrl": "https://random-name.trycloudflare.com",
  "appMetroUrl": "https://random-name.trycloudflare.com"
}

This file is regenerated every time you run expo-air start or expo-air fly. The config plugin reads these URLs and writes them into Info.plist during prebuild.

Config plugin

Added to your app.json during initialization:

{
  "plugins": ["@10play/expo-air"]
}

The plugin handles:

  • AppDelegate patching — Overrides bundleURL() in DEBUG to load from tunnel URLs
  • HMR reconnect injection — Injects @10play/expo-air/build/hmrReconnect import into your app entry
  • Info.plist configuration — Writes all expo-air settings under an ExpoAir key
  • ATS exceptions — Allows HTTPS connections to trycloudflare.com, loca.lt, and bore.pub

Environment variables

Override config values with environment variables:

VariableDescription
EXPO_AIR_METRO_URLOverride the widget Metro server URL
EXPO_AIR_SERVER_URLOverride the WebSocket server URL