Skip to content

Static sites

A directory with no package.json is deployed as a static site: no install, no build. Every file is served at its path.

When a project is static

A directory without a package.json: a hand-written site, the output of another generator, or a dist/ folder you built yourself.

A directory with a package.json and none of Rasengan.js, Hono, Futon or Vite fails to build instead: deploying it as it is would publish your source code. Deploy its build output instead (see below).

What is never published

These files stay out of a static site, even when they're in the directory:

  • anywhere: .git, node_modules, .env and .env.*;
  • at the root: package.json, lockfiles, pnpm-workspace.yaml, src/ and .hiraiship/.

Symbolic links are not published either.

How files are served

  • / serves index.html.
  • /about.html serves about.html.
  • Clean URLs work: /about finds about.html or about/index.html.
  • A path with no matching file depends on what's at the root:
Your output hasA path with no file gets
a 404.html404.html, with a 404 status
an index.html, and no 404.htmlindex.html, with a 200 status: single-page apps work
neithera plain 404

A multi-page site should ship a 404.html: without one, a mistyped URL shows the home page.

Deploying a folder you built locally

To deploy the output of a build you ran yourself, deploy that folder:

Terminal
hiraiship deploy ./dist

The link to your project is then saved in dist/.hiraiship/. If your build deletes dist/, pass --project <slug> each time.

Ignore files are read from the folder you deploy, so your project's own .gitignore doesn't apply to ./dist. See Ignoring files.

Static means no build

A static project is never built: its build command and output directory are ignored, and the whole directory is published. To build with a tool Hiraiship doesn't detect, run the build yourself and deploy its output.