Updated Oct 6, 2026

## How do I deploy a Vite or React build without a server?

To deploy a Vite or React build, run npm run build, zip the output folder (dist/, build/, or out/), and drop it in the uploader above. We unpack it, find your index.html, and serve every file with the right content type at a clean URL, hashed assets cached hard, client-side routes resolving, custom domain and SSL on Pro, no CI and no deploy config.

### Your build is already a static site

A modern front-end build is a folder of static files by design. Vite, Create React App, Vue CLI, SvelteKit's static adapter, and Astro all emit an index.html plus fingerprinted bundles. Zipping that folder and dropping it here is the shortest path from npm run build to a public URL, no CI and nothing to install.

[Host a static website](https://linkinseconds.com/host-static-website)

### Client-side routing that resolves

Single-page apps route in the browser: /dashboard and /settings are handled by React Router or Vue Router, not by separate HTML files. Turn on single-page-app mode and unknown paths fall back to index.html with a 200, so deep links and refreshes work instead of 404-ing.

### Hashed assets cached hard, HTML never stale

Content-hashed bundles are served with a one-year immutable cache, so repeat visits are instant, while your index.html is served no-cache so a re-upload shows immediately. Ship a new build by dropping a new ZIP; the URL stays the same and visitors get the new version on their next load.

[Publish an HTML ZIP](https://linkinseconds.com/publish-html-zip)

### On your own domain, with SSL

A build on a random URL is fine for a preview, but a real app wants a real address. On Pro, connect your domain or subdomain and we provision HTTPS automatically, no certificate setup and no renewals. That makes this a legitimate home for a small production front-end: an internal tool, a marketing site, a docs app, a client deliverable.

[HTML hosting](https://linkinseconds.com/html-hosting)

### What deploying a build here does not do

No server, no API routes, no database. This serves your built static files and nothing else, so anything that needs a running server at request time is out of scope.

No per-request server rendering. Next.js server components rendered per request, SvelteKit endpoints, and server secrets need a platform that runs that server; export a fully static build instead.

No build step on our side. Upload the built output, not your raw source; a project with no build won't render, and we'll tell you if we can't find an index.html. Your ZIP can be up to 250 MB on a free sign-in and 500 MB on Pro.

## How it works

- 1 ### Build your app Run your production build, npm run build for Vite/React/Vue/Svelte, or the equivalent for your tool. It writes a folder of static files: an index.html, hashed JavaScript and CSS in an assets/ folder, and your images and fonts. That folder is a complete static site.

- 2 ### Zip the output and upload it Compress the build output, dist/ for Vite, build/ for Create React App, or out/ for a static export, into a .zip and drag it onto the card. We unpack it, find your index.html, and serve every file with the right content type, so you don't have to be precise about the folder.

- 3 ### Turn on SPA mode and add your domain If your app uses client-side routing, enable single-page-app mode so deep links resolve to your index.html instead of 404-ing. On Pro, connect your own domain with automatic SSL. Re-upload after your next build to ship an update to the same URL.

## Your build is already a static site

A modern front-end build is, by design, a folder of static files, that's the whole point of the build step. Vite, Create React App, Vue CLI, SvelteKit's static adapter, and Astro all emit an index.html plus fingerprinted JS/CSS bundles and your assets. There's no server required to serve them; you just need somewhere to put the files. Zipping that folder and dropping it here is the shortest path from npm run build to a public URL, with no CI, no deploy config, and nothing to install.

## Zip dist/ (or build/, or out/), we find it

Different tools name the output folder differently: Vite writes dist/, Create React App writes build/, a static Next or Nuxt export writes out/, Jekyll and 11ty write _site/ and public/. You don't have to remember which, if your ZIP contains one of those folders (or a single wrapper folder from compressing on your desktop), we detect the real web root and serve from it. Zip the built output rather than your source; uploading a raw project with no build won't render, and we'll tell you if we can't find an index.html.

## Client-side routing that actually resolves

Single-page apps route in the browser: /dashboard and /settings are handled by React Router or Vue Router, not by separate HTML files. That means a visitor who opens a deep link directly, or refreshes on an inner page, needs the server to hand back index.html so your router can take over. Turn on single-page-app mode and that's exactly what happens: unknown paths fall back to index.html with a 200, so refreshes and shared deep links work instead of 404-ing. Leave it off for a plain multi-page site and unknown paths return a real 404 (or your own 404.html).

## Hashed assets cached hard, HTML never stale

Good build tools fingerprint your bundles, app.4f3a9c2b.js, precisely so they can be cached forever. We honor that: content-hashed assets are served with a one-year immutable cache, so repeat visits are instant, while your index.html is served no-cache so a re-upload shows immediately. You get the performance of aggressive caching without the classic trap of a stale HTML file pointing at bundles that no longer exist. Ship a new build by dropping a new ZIP; the URL stays the same and visitors get the new version on their next load.

## On your own domain, with SSL

A build parked on a random URL is fine for a preview, but a real app wants a real address. On Pro, connect your domain or subdomain and we provision HTTPS automatically, no certificate setup, no renewals. That makes this a legitimate home for a small production front-end: an internal tool, a marketing site, a docs app, a client deliverable. Everything the browser needs to run your app is served correctly; there's just no backend, which is the honest boundary of static hosting.

## Static only, where a backend is needed, this isn't it

This serves your built static files and nothing else: no server-side rendering at request time, no API routes, no database. If your app calls an external API from the browser over HTTPS, that keeps working. If it depends on server code, Next.js server components rendered per request, SvelteKit endpoints, environment secrets read on the server, you need a platform that runs that server, and you should export a fully static build or host elsewhere. Said plainly: bring your built output, get a fast static host; bring a server-dependent app and static hosting is the wrong tool.

index.htmlHTML

dist.zipZIP

app.4f3a9c.jsHTML

dashboard-routeHTML

build.zipZIP

index.htmlHTML

dist.zipZIP

app.4f3a9c.jsHTML

dashboard-routeHTML

build.zipZIP

index.htmlHTML

dist.zipZIP

app.4f3a9c.jsHTML

dashboard-routeHTML

build.zipZIP

index.htmlHTML

dist.zipZIP

app.4f3a9c.jsHTML

dashboard-routeHTML

build.zipZIP

landing-pageHTML

settings-routeHTML

out.zipZIP

docs-appHTML

styles.a1b2.cssHTML

landing-pageHTML

settings-routeHTML

out.zipZIP

docs-appHTML

styles.a1b2.cssHTML

landing-pageHTML

settings-routeHTML

out.zipZIP

docs-appHTML

styles.a1b2.cssHTML

landing-pageHTML

settings-routeHTML

out.zipZIP

docs-appHTML

styles.a1b2.cssHTML

2,300+

people sharing files

4,400+

links shared

15,300+

times opened

Keep reading

[Host a static website](https://linkinseconds.com/host-static-website)[Publish an HTML ZIP](https://linkinseconds.com/publish-html-zip)[HTML hosting](https://linkinseconds.com/html-hosting)[Tiiny Host alternative](https://linkinseconds.com/tiiny-host-alternative)

Source: https://linkinseconds.com/deploy-vite-react-build
