Skip to content

Your Vite build, on a URL in seconds

vite build leaves a complete static site in dist/ — hashed assets, index.html, everything. Showing it to someone shouldn't require a hosting account; it requires one POST request.

Drop your Vite report here — get a live link

free, no account, live for 7 days.

The artifact dead-end

Every Vite app builds to a portable static bundle, but 'just check my branch' still means drag-and-drop hosting pages, platform accounts, or a coworker pulling and building locally. The artifact is done; the sharing is the chore.

And in CI, the build output either gets zipped into artifacts or wired into a hosting provider's Git integration — a lot of machinery to answer 'does the page look right?'.

Two lines to a live link

Build your output like you already do, then hand the folder to the action:

Build the site

npm run build

.github/workflows/ci.yml

- uses: bitgate/ship-page-action@v1
  if: always()
  with:
    path: dist/

Or with plain curl — no account needed

cd dist && zip -qr - . | curl -fsS -X POST https://ship.page/deploy \
  -H "Content-Type: application/zip" \
  --data-binary @- | jq -r .url

path: dist/ deploys exactly what the tool wrote — no detection to configure. The link goes in the job summary — add comment: true and it lands on the pull request too.

What you get

  • Hashed asset URLs resolve exactly as built — every drop mounts at the root of its own subdomain, just like your local preview
  • The free tier needs no account and no key: zip dist/, POST it, get an unguessable URL that's live for 7 days
  • In CI, name: pr-${{ github.event.number }} plus an API key gives every PR a stable preview URL that redeploys in place

Questions

Does the base config need changing?

No — drops mount at the root of their own subdomain, so Vite's default base of / just works. A custom base like /app/ would have to match a path under the drop URL, so leave it default for previews.

Does client-side routing work?

The entry page works everywhere. Drops serve files as-is with no rewrite rules, so history-mode deep links behave like they would on any plain static host — hash routing works fully, and SSR frameworks should prerender real files instead.

How is this different from Netlify Drop?

Same drag-and-drop idea, but scriptable: one curl with no account, and a GitHub Action when you want it in CI. Anonymous drops expire after 7 days.

Try it on your next run

Anonymous deploys need no account and no key — paste the step, get a link. When you want stable URLs that redeploy in place, an API key and a name are all it takes.

Need to share the report with someone outside GitHub? How to share a GitHub Actions artifact without a login.