DEV Community

Cristian Iridon
Cristian Iridon

Posted on • Originally published at previewdrop.com

Get a working preview for Expo web in under 2 minutes

Get a working preview for Expo web in under 2 minutes

If you're shipping Expo, you've probably had this conversation:

Designer: "Can I see the new onboarding flow?"

You: "Sure, let me push to Testflight, wait 20 minutes for the build, then…"

Designer: "Never mind, I'll just watch you code."

The web version should be easier. You've got a web build already. But your staging server is shared with three other PRs, or you're spinning up a new Heroku dyno per branch, or you're just… not showing it to anyone before merge.

PreviewDrop changes that. Every PR gets a live Expo web URL in under a minute. Your designer clicks a link. It's live. You update the branch, the link auto-updates. No deploy script. No waiting.

Here's how to set it up in 2 minutes.

1. Install the GitHub App (30 seconds)

Go to previewdrop.dev, hit Sign up, and authorize the GitHub App. Pick the repo with your Expo app.

That's it. The app is now watching for pushes and PRs.

2. Push a branch (0 seconds β€” you're already doing this)

You push a feature branch. GitHub fires a webhook. PreviewDrop sees it.

git checkout -b feature/new-onboarding
# ... make your changes ...
git push origin feature/new-onboarding
Enter fullscreen mode Exit fullscreen mode

Behind the scenes, PreviewDrop is:

  1. Cloning your repo
  2. Detecting the framework (it finds app.json and package.json β€” Expo)
  3. Running npm run web or expo export:web (based on what nixpacks detects)
  4. Starting the static web server
  5. Assigning a preview URL

3. Open a PR, get a comment (60 seconds)

You open the PR on GitHub. Within a minute, a bot comment lands with your preview URL:

πŸš€ Preview ready!
https://prv-abc123.preview.previewdrop.dev

Build time: 47s | Expires in: 4 hours
Enter fullscreen mode Exit fullscreen mode

Click the link. Your Expo web build is live.

The link is shareable. Your designer, your PM, your QA person β€” they all click it. No VPN, no localhost, no sharing your ngrok tunnel. It's a real HTTPS URL.

Why this is better than the alternatives

vs. Testflight (native)

You need a native build, code signing, provisioning profiles, TestFlight review (sometimes). Expo web is ready in under a minute on every push. Use previews for web feedback, release builds for the app store.

vs. shared staging server

One staging server for five engineers means constant conflicts. "Wait, did you test that on staging yet?" "No, someone's building." PreviewDrop gives everyone their own isolated environment, live for 4–8 hours, then auto-expires. No cleanup needed.

vs. Vercel for web only

If you were deploying Expo web to Vercel, you'd get fast previews. But you're also locking into Vercel's framework detection and Next.js-flavored optimizations. PreviewDrop detects your Expo setup automatically and uses nixpacks (the same buildpack system Netlify and Heroku use), so your build is optimized for your actual stack.

vs. ngrok or local sharing

Ngrok is great for demoing localhost. But it requires your laptop to stay online, eats your bandwidth, and every restart changes the URL. PreviewDrop runs on our servers, stays up forever (or until the TTL expires), and the URL never changes for that PR.

The actual workflow

Here's what it looks like day-to-day:

  1. Push branch β†’ GitHub webhook fires
  2. Notification comes in (Slack integration coming soon) β†’ preview is building
  3. PR is open β†’ bot comment lands with the URL
  4. Designer/PM/QA clicks the link β†’ live Expo web build
  5. You push an update β†’ URL auto-updates, no new link needed
  6. PR is merged or closed β†’ preview auto-expires, URL 404s

No GitHub Actions workflow. No custom deploy script. No waiting for your turn on a shared server.

Stack detection: how we know you're using Expo

We check for:

  • app.json with "web" entry point (Expo flag)
  • expo in package.json dependencies
  • Either expo export:web or npm run build (we try both based on what's in package.json scripts)

If you have a custom build command, you can override it in the .previewdrop.json file (optional):

{
  "buildCommand": "npm run build:web",
  "rootDir": "./"
}
Enter fullscreen mode Exit fullscreen mode

That's all. nixpacks handles the rest.

What gets deployed

Every time you push, we deploy:

  • Your latest source code
  • All environment variables you've set in PreviewDrop (secrets, API endpoints, whatever)
  • The built Expo web output from your build command

The preview is read-only β€” we don't run your backend, we don't provision a database. If your Expo web build makes API calls to your production API, those calls will hit production (which is usually fine for testing). If you need isolated backend testing, that's an upgrade story we're thinking about.

Expiry and cleanup

By default, previews live for 4 hours on the Starter plan (1 hour on Free, 8 hours on Pro). After that, the preview URL 404s and the container is cleaned up automatically.

You can set a longer TTL per workspace if you're doing client reviews:

Free: 1 hour max
Starter: up to 4 hours (default)
Pro: up to 8 hours
Enter fullscreen mode Exit fullscreen mode

Sharing with a password (optional)

If you're sharing with a client or external stakeholder, you can password-protect the preview:

  1. In your PreviewDrop dashboard, find the preview
  2. Click the lock icon
  3. Set a password
  4. Share the URL + password

The preview URL becomes https://prv-abc123.preview.previewdrop.dev?password=your-secret-password (or the password prompt appears in-page, depending on how you share).

Next steps: native review environments

One question we get: "Can we preview the native app too?"

Not yet, but it's on the roadmap. Native builds take longer (especially iOS code signing), and they're not immediately shareable like web. But we're thinking about how to do this without the friction of Testflight.

For now: web previews are your fastest feedback loop. Use them for design/UX validation, then do native testing locally or on Testflight when you're ready to ship.

Try it

Sign up free β€” 2 concurrent previews, no credit card. Push a branch from any Expo project, open a PR, and you'll see the preview comment land in under a minute.

Questions? Read our Expo quickstart guide or drop a line to hello@previewdrop.dev.


Originally published at previewdrop.com/blog/expo-web-preview

Push. Preview. Ship. That's the Expo web workflow we built PreviewDrop for.

Top comments (0)