Static SPA
static-spa-v4Railpack-built static sites served by the platform Caddy v4 runtime.
- Runtime mode
- static
- Framework signatures
- react + vite, svelte + vite, vite + vue
- Components
- static
- Build
- railpack
- Build contracts
railpack-static-npm-v4(npm): npm ci; npm run buildrailpack-static-bun-v4(bun): bun install --frozen-lockfile; bun run buildrailpack-static-pnpm-v4(pnpm): pnpm add -g [email protected]; pnpm install --frozen-lockfile --prefer-offline; pnpm run build- Source normalization
docker-spa-v4: detect Dockerfile or Compose build service, then build with railpack and run on railpack-caddy-2.11.4-spa-v4. Source filtering uses railpack-dockerignore-v1. Public build arguments are supported.- Environment phases
- build
Exact repository requirements
- Build contract is railpack-static-npm-v4.
- Build strategy is railpack with provider node.
- Package manager is npm.
- Required root files: package.json.
- Required root lockfile: package-lock.json.
- Install command is npm ci.
- Build command is npm run build.
- Start command is caddy run --config /Caddyfile --adapter caddyfile 2>&1.
- Output contract is dist.
- Runtime contract is railpack-runtime-mise-2026.7.11.
- Caddy contract is railpack-caddy-2.11.4-spa-v4.
- Railpack plan contract is railpack-v0.33-vite-npm-dist-v4.
- Railpack plan digest is sha256:6f4e258583dea7dd267e90cade6050e0b326d05bad883d5d9b81bc7456183428.
- Build contract is railpack-static-bun-v4.
- Package manager is bun.
- Required root lockfile: bun.lock.
- Install command is bun install --frozen-lockfile.
- Build command is bun run build.
- Railpack plan contract is railpack-v0.33-vite-bun-1.3.14-dist-v4.
- Railpack plan digest is sha256:fbe03f56c1f16f4aade28ae8e529f345bef501f7616fb3dc152cc2629dd35502.
- Build contract is railpack-static-pnpm-v4.
- Package manager is pnpm.
- Required root lockfile: pnpm-lock.yaml.
- Pre-install command is pnpm add -g [email protected].
- Install command is pnpm install --frozen-lockfile --prefer-offline.
- Build command is pnpm run build.
- Railpack plan contract is railpack-v0.33-vite-pnpm-9.15.9-dist-v4.
- Railpack plan digest is sha256:62cf86798b420aba0ec5c676d165c333a8c0971bdefd3b27f5c80b875ea58e61.
- Source normalization contract is docker-spa-v4.
- Recognized source infrastructure: Dockerfile, Compose build service.
- Normalized build strategy is railpack.
- Normalized runtime contract is railpack-caddy-2.11.4-spa-v4.
- Source filter contract is railpack-dockerignore-v1.
- Only Vite React, Vue, and Svelte projects matching a published npm, Bun, or pnpm build contract with the default dist output are supported.
- A Vite start script that masks static detection receives one pinned dist prepare retry before admission.
- Prepare-v5 may select npm through a private source shadow when package-lock.json conflicts with only legacy bun.lockb, or when the reviewed root npm Docker SPA contract conflicts with both Bun locks. Explicit npm@..., pnpm@..., and bun@... declarations remain authoritative; mixed or ambiguous evidence is rejected.
- Custom Caddyfile, Caddyfile.template, railpack.json, custom start commands, and custom Vite output directories are unsupported.
- Dockerfile and Compose web-server stages are normalized to the platform Caddy runtime; repository nginx, Caddy, Apache, and other final server images are not executed.
- Public VITE_* variables are accepted only for the build phase, must be declared non-secret, and are bound write-only into the build execution and its cache identity.
- SvelteKit, SSR, and server adapters are unsupported by this static deployment profile.
- Crawler metadata and sensitive hidden paths return real 404 responses when absent; arbitrary dotted client routes retain the SPA fallback.
- Railpack 0.33.0, Node 22.23.2, pnpm 9.15.9, Caddy 2.11.4, the mise-2026.7.11 builder and runtime, and Bun 1.3.14 are pinned by the build contract.