hstd
For single-page apps with client-side routing

Your build folder is the whole deploy.

Run the build, zip dist, drop it. Refreshing /dashboard still renders, assets get long cache headers, and old URLs can redirect. One small file in the folder says how.

Free for 3 sites on hstd.app. No card needed.

Sound familiar?

  • Refreshing a client-side route gives a 404 on most static hosts.
  • Hosting dashboards where "SPA mode" is a hidden toggle three menus deep.
  • A 200 KB bundle that no chat window or tool call can carry.

hstd is the opposite of all three. Files in, live URL out, you keep the publish button.

How it works here

  1. 01

    Build as usual

    npm run build with Vite, Create React App, Nuxt generate, SvelteKit static or Angular. Anything that outputs a folder.

  2. 02

    Add _config.json

    One file in the build: "spa": true, plus redirects and cache headers if you want them.

  3. 03

    Zip and drop, or post it

    Drop the zip on hstd, or post it to /uploads from a script and import it over MCP. Publish when the preview looks right.

What you get

Everything on this page is on the free plan unless it says Pro. Prices and limits are on the pricing page .

Works with
React Vite Vue Svelte Angular Astro Nuxt generate SvelteKit static
Client-side routing that works
With spa on, every unknown path serves index.html with a 200. Deep links and refreshes just work.
Cache headers per path
Give hashed assets a year and index.html no-cache from the same file. Later rules win.
Redirects with wildcards
"/old/*" to "/new/:splat", or to another site entirely. Status 301, 302, 307 or 308.
Big bundles welcome
Up to 25 MB per upload on Free, 100 MB on Pro, 250 MB on Studio. Post from CI with one curl.

Questions people ask

How do I make client-side routing work?

Put a _config.json at the root of your build folder with {"spa": true}. Unknown paths then serve index.html with a 200 and your router takes over. The docs page has the full file.

Can I set cache headers on my hashed assets?

Yes. In _config.json add a headers rule for "/assets/*" with Cache-Control public, max-age 31536000, immutable. The allowed headers are caching, CSP, frame, referrer, permissions and CORS.

Does my app need a server for API calls?

hstd serves files only. Call your API from the browser as you do in development, and use the headers rule for CORS if the API is on another origin.

Can I deploy from CI or from my AI?

Yes. Post the zip to https://hstd.app/uploads and import it with the import-upload MCP tool, or let Claude or Cursor do both. Publishing stays a separate step.

Ready when you are.

Your first site can be live before the kettle boils.