Bring what you made.
An HTML file, a ZIP, or a static folder. No build settings to untangle.
FREE HTML HOSTING. NO SIGNUP.
Upload an HTML file up to 10 MB, a ZIP up to 25 MB or a whole folder and get a live link in seconds.
No account, no credit card.
Your static site, one link away.
A SHORTER PATH TO PUBLISHED
Finished a prototype? Exported a report?
Get it off your computer and into the conversation.
An HTML file, a ZIP, or a static folder. No build settings to untangle.
Upload in your browser or send one API request. Your own URL comes back.
Send the preview, share the report, move the project forward.
BUILT FOR YOUR WORKFLOW
POST HTML or a ZIP from your terminal, script, or AI tool. Get a live URL back.
API documentation Follow the quickstart/deployNo API key neededcurl https://ship.page/deploy \
-H "Content-Type: text/html" \
--data-binary @index.htmlurl https://your-drop.shipped.run/SMALL PRICE. OPEN POSSIBILITIES.
Deploys are anonymous on every plan — pay only when you want drops that stick around.
$0forever
For drive-by deploys
$4/ month
For drops that stick around
$19/ month
Your name on every preview
For drive-by deploys
For drops that stick around
Your name on every preview
Prices charged via Stripe — cancel anytime in the billing portal.
Features
No dashboards required. Read the ten things below, then never think about hosting again.
One endpoint, three body formats: raw HTML, JSON multi-file (binaries as base64), or a zip — with the root directory auto-stripped so dist/ archives just work.
Every drop mounts at the root of its own subdomain. Absolute paths like /app.js and /styles.css just work — no base-path rewrites, ever.
Sharing IS the access control: ~47 bits of entropy per URL. Anyone with the link can view — no login — and nobody without it will find it.
Choose a lifetime with ?ttl= — minimum 60 seconds. Anonymous drops cap at 30 days, free accounts at 90; subscribers go unlimited.
POST /deploy?ttl=3600 Deploy with ?name=pr-42 and every redeploy replaces the content while the URL stays put — instant preview channels.
POST /deploy?name=pr-42Your team's name on every preview your CI throws.
acme--pr-42.shipped.runTwo lines of YAML and every CI run ships a live preview.
- uses: bitgate/ship-page-action@v1
with: { path: dist/ }Deploy now, add files later — grow a single drop to 10,000 files without re-uploading what's already there.
Drops are served from edge caches around the planet — first paint is fast from anywhere.
Your viewers are nobody's product: no cookies, no fingerprinting, no analytics injected into your pages.
The killer use case
Coverage reports, Playwright traces, Storybook builds, bundle-analyzer output — publish them as live pages your team can actually click from the PR.
.github/workflows/ci.yml
- uses: bitgate/ship-page-action@v1
with: { path: playwright-report/ }curl
No Action? One line of curl drops the link straight into your job summary:
$ curl -sX POST https://ship.page/deploy -H 'Content-Type: text/html' --data-binary @report.html >> "$GITHUB_STEP_SUMMARY"FAQ
Anyone with the link — and nobody without it: every URL carries ~47 bits of entropy, so guessing one is a one-in-120-trillion shot.
Anonymous drops live 30 days — 90 with a free account — or shorter if you pass ?ttl=; paid drops live forever — or exactly as long as any TTL you choose.
Subscribers can redeploy a named drop (?name=…) and the URL keeps serving the new content. Anonymous drops can't be edited in place, but every anonymous deploy returns a one-time claim token — save it and you can attach the drop to your account from the dashboard later.
Nothing illegal or harmful — no malware, phishing or scams; report anything bad with the report form, or email abuse@bitgate.com for legal notices.
Yes — curl IS the product: everything on this page is a flag on POST /deploy, and there's a GitHub Action for CI. See the API docs and the GitHub Action.
Existing drops keep serving exactly as they are; paid features simply stop applying to new deploys.