PreviewDrop for Expo

Expo web previews on every PR. No CI config.

Push a branch, get a live HTTPS URL with your Expo web build running. No EAS Build waits, no CI workflow files, no manual deploy to Vercel or Netlify. PreviewDrop auto-detects Expo, builds npx expo export:web, and serves the result behind a TLS-terminated subdomain — all from your existing repo.

TL;DR
Drop the Dockerfile above into your Expo repo, connect to PreviewDrop, set your env vars in the Variables tab. Push a branch. 5 minutes to a live Expo web preview — no EAS Build queue, no CI configuration, no static hosting deploy step.

How PreviewDrop compares for Expo

FeaturePreviewDropEAS Build + VercelManual deploy
Setup time5 min — connect repo1–2 hours — configure eas.json + Vercel projectPer-branch manual steps
CI config neededNoneeas.json + GitHub Actions or EAS webhookn/a — manual
Expo web build Expo web buildExpo web buildExpo web build
HTTPS URLYesYesDepends on hosting
Auto-deploy on pushYesYesNo — manual
PR comment with URLYesIf you wire up GitHub ActionNo
Password protectionYesIf you build authNo
Auto-expiring TTLYesManual cleanupManual
Cost$19/mo flatEAS free tier + Vercel Hobby (limits apply)Your time

When to pick each

PreviewDrop — You want Expo web previews on every PR with zero CI config and a flat $19/mo price. You don't want to maintain eas.json web profiles, GitHub Actions workflows, and Vercel project configs just to see what a branch looks like in browser.

EAS Build + Vercel — You're already deep in the Expo ecosystem, using EAS for native builds, and want a single platform for everything. The added configuration cost is worth the unified tooling for your team.

Manual deploy — You deploy Expo web once per release cycle, not per branch. The overhead of per-PR previews doesn't justify any tool investment.

What Expo devs deal with today

EAS Build queue for a web preview
Running npx eas build --platform web queues a build on Expo's servers just to produce static files. For a quick preview to share with a designer, the wait feels disproportionate to the task.
The eas.json branching problem
Different branches need different env vars for the web build (API URLs, feature flags). Managing this in eas.json profiles per branch is fragile — a single misconfigured profile breaks previews silently.
Expo web ≠ Next.js
Expo web uses react-native-web, not Next.js. Vercel's Expo support is nonexistent — it doesn't recognise Expo projects and won't auto-detect the build. You have to manually configure the output directory and build command, which breaks when Expo's export format changes.
No one sees the web build until it's merged
Without per-branch previews, the web build only gets reviewed after merge — on staging or production. Bugs in the web layer (responsive breakpoints, navigation, deep links) are found too late.

Dockerfile

Drop this at the root of your Expo repo. It installs dependencies, runs npx expo export:web, and serves the resulting static files. PreviewDrop picks it up automatically on the next push.

Dockerfile
FROM node:20-slim WORKDIR /app COPY package.json package-lock.json* yarn.lock* pnpm-lock.yaml* ./ RUN if [ -f yarn.lock ]; then yarn install --frozen-lockfile; \ elif [ -f pnpm-lock.yaml ]; then npm install -g pnpm && pnpm install --frozen-lockfile; \ else npm ci; fi COPY . . RUN npx expo export:web EXPOSE 3000 CMD ["npx", "serve", "dist", "-l", "3000"]

How it works

1
Add the Dockerfile
Drop the Dockerfile above at the root of your Expo repo. It uses npx expo export:web — the same command you already run locally.
2
Connect your repo
Authorize PreviewDrop on GitHub. Set any env vars your Expo app needs (API_BASE_URL, feature flags) in the Variables tab.
3
Push and share
Every branch gets a live HTTPS URL posted to the PR. Designers, PMs, and QA open the link — no EAS Build wait, no manual deploy.

$19/mo flat. Unlimited Expo web previews.

No per-build charges, no EAS queue, no CI minutes counting down. Preview the web layer of every branch without thinking about cost.

Start free with GitHub

See your Expo web build before it merges

Connect a repo, push a branch, get a URL. No credit card, no EAS Build, no CI config.

Start free
Framework guidesDjangoRailsLaravel