Host a single page app with working routes.

Zip your build and drop it here. Every route your app handles, like /about or /orders/1042, loads the app instead of a 404, and the site lives at its own address.

  • 25MBa file on the free plan
  • 10 linkslive at once, free
  • No capon visitors, on any plan
For people
Drop your app's ZIP here
React buildVue buildZIPUp to 25MB free

What they see

Deep links open the right screen.

Send a link straight to a screen inside your app and it opens there. Refreshing the page keeps the person where they were. The site lives at its own nudgehost.site address, and a site uploaded without an account carries a small NudgeHost bar along the bottom until you claim it with a free account.

  • Deep links and refreshes load the app
  • Its own nudgehost.site address
  • A missing file still returns a 404

How routing works

One HTML page, many screens.

A single page app loads one index.html, then its router swaps screens and updates the address bar without asking the server for a new page. The catch comes when someone opens a deep link or refreshes. The browser asks the server for /orders/1042, and a plain static host has no file there, so it answers with a 404. NudgeHost sends the app instead.

The browser asks forNudgeHost sendsWhy
/index.htmlThe front page of the app
/assets/index.jsThat fileIt's in the build
/helphelp.htmlA real page file wins over the app
/orders/1042index.htmlNo file and no extension, so the app loads and its router shows order 1042
/images/old-logo.pngA 404It has an extension and isn't in the build

Nothing to configure. There's no rewrite rule to write and no 404.html trick to copy into the build.

Before you upload

Zip the folder your build writes.

Upload the build output, not the project source. Zip the folder itself or what's inside it, and the site comes out the same.

npm run build

A Vite app in React, Vue or Svelte

Vite writes the build to dist. Zip that folder. Its asset paths start from the root of the address, which is where a nudgehost.site site serves from.

npm run build

A Create React App project

Create React App writes the build to a folder called build. Zip it and drop it in, and React Router's routes load the app at any depth.

Page files win

An app with a few real pages

When the build includes a page file, such as help.html or help/index.html, that path serves the file. Only paths with no file of their own fall back to the app.

How it works

From build to live app in three steps.

  1. Build the app

    Run your build the usual way. It writes an index.html and the files it loads into one output folder.

  2. Zip the output and drop it

    Zip dist for Vite or build for Create React App, and drag the ZIP onto the uploader. Signed out, it can be up to 25MB, and you can keep 3 links live at a time.

  3. Share any route

    The app goes live at its own address. Send the front page, or add a route to the end and send someone straight to that screen.

After you ship it

New builds go to the same address.

Updating works on every account plan. Your own domain comes with Pro and Studio.

Every account plan

Upload the next build over the last

Zip the new build and upload it from your dashboard. The address, the view count and any password or end date stay the same, and every deep link you've sent keeps working.

Pro and Studio

Put it on your own domain

Pro attaches one domain you own and Studio five, on a subdomain such as app.yourcompany.com. Routes fall back to the app there too, except addresses starting /api/, which return a 404.

Free plan and up

Publish from your build script

The API and the MCP server work on the free plan, so a script or an AI assistant can upload each build and hand back the address.

Plans

What your app gets on each plan.

Without an accountFreeProStudio
Largest ZIP served as a site25MB25MB100MB100MB
Largest site once unpacked25MB25MB250MB1GB
Links live at once310UnlimitedUnlimited
How long a link lasts7 daysUntil you delete itUntil you delete itUntil you delete it
Open trackingNot includedOpen countsTime and country of each open, CSV exportSame as Pro
Password protectionNot includedNot includedYesYes
Custom domainsNot includedNot included15
Price$0$0$12 a month$29 a month

QR codes, end dates and replacing a site work on every account plan. A site uploaded without an account shows a small NudgeHost bar until you claim it with a free account.

Compared

NudgeHost and Tiiny.host, for an app build.

The differences that matter when a built app has to reach the people testing it.

NudgeHostTiiny.host
Free plan25MB a file, 10 live links3MB a file, 1 project
Publishing without an accountYes, up to 25MBAccount needed first
REST APIFree plan and upSolo and above
Banner on a free siteNone on a free accountTiiny Host banner
Visits a monthNo cap5,000
Keeping the site onlineNothing to doSign in at least once every three months

Figures last verified 9 October 2026, from each service’s published plans.

Read the full comparison

Apps and hosting

Why a single page app needs the right host.

A single page app is a static site with one twist. Its addresses don't match files. A host that only serves files breaks every link past the front page, which is why so many guides end with a rewrite rule or a copied 404.html. NudgeHost checks for a real file first and sends the app for every other address without a file extension, so the router gets the address it expects.

The steps are the same whether you're shipping a React build or a Vue build, and the upload works like any other zipped site.

For a site made of separate pages instead of one app, free hosting for static sites covers it the same way. The free plan keeps 10 links live with no end date.

Frequently asked questions

  • What is a single page app?

    A website that loads one HTML page and then draws every screen with JavaScript. Its router changes the address bar as you move around, without loading a new page from the server. Most React, Vue and Svelte apps work this way.

  • Will refreshing a page in my app work?

    Yes. When someone refreshes /orders/1042, the browser asks for that address, NudgeHost finds no file there and sends index.html, and your router shows the same screen again.

  • Do I need hash routing?

    No. Ordinary routes like /settings work, because any path with no file and no extension loads the app. Hash routes like /#/settings work too, if your app already uses them.

  • What happens to a missing image or script?

    It returns a 404. Only paths with no file extension fall back to the app, so a broken asset link shows up as an error instead of loading your app where an image should be.

  • What about a route with a dot in it?

    A path whose last part contains a dot, such as /users/jane.doe, is treated as a file, so it returns a 404 when no file matches. Keep dots out of the last part of a route, or use a hash route for those screens.

  • What if a route has its own page file?

    That file wins. A path that matches a file in the build, such as help.html or help/index.html, serves that file, and only paths with nothing of their own load the app.

  • Do I need to set a base path?

    No, as long as the build expects to sit at the root of its address, which is the default for Vite and Create React App. A nudgehost.site site serves from the root, so asset paths like /assets/index.js resolve where the build expects them.

  • Which folder do I zip?

    The one your build writes, usually dist for Vite and build for Create React App. Zip the folder itself or the files inside it. NudgeHost strips a single wrapper folder, so both give the same site.

  • Can I use my own 404 page?

    A 404.html in the ZIP isn't used. Any path with no file extension loads your app, so your router can show its own not-found screen. A path with an extension and no file returns a plain 404.

  • Does server-side rendering work?

    No. NudgeHost serves the files in your ZIP and runs no code on the server, so API routes and server-side rendering need a different host. A framework's static export, such as a Next.js app built with output set to 'export', works.

  • How do I ship a new build?

    Zip the new build and upload it over the old one from your dashboard, on any account plan. The address, the view count and any password or end date stay the same.

  • Can I upload it without making an account?

    Yes. The app goes live straight away and lasts 7 days, and you can hold 3 links at once. Until you sign up and claim it, every page shows a small NudgeHost bar along the bottom.

  • Will search engines index my app?

    Not at its nudgehost.site address. Those addresses ask search engines not to list them, so the app is for the people you send it to. Connect your own domain on Pro or Studio and the app on that domain can be indexed like any other website.

  • How big can the build be?

    On the free plan, the ZIP and the unpacked site both have to fit in 25MB. On Pro and Studio the ZIP can be up to 100MB, and the site it unpacks into can grow to 250MB on Pro or 1GB on Studio.

Get file-sharing tips that actually help.

One email a month. No spam, no fluff.

Ready to share your file?

Free forever, no credit card needed. The whole thing takes a few seconds.

Get started free