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
.zip, folder, or single .html — 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 .urlpath: 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.