| If your repo has… | Use |
|---|---|
Just an index.html (no package.json) | Raypacks static pack (this guide) |
A package.json (React, Vite, Astro, etc.) | React guide or Node.js guide |
| A custom nginx config you want to keep | Paketo static path below |
Raypacks static pack
The Raypacks static pack ships your files behind nginx. No config, no build step.What you need
index.htmlat the repo root or underpublic/index.html.- No
package.jsonat the root (that triggers the Node pack instead).
Deploy
What gets served
The entire matching directory (the repo root, orpublic/) is served as-is. CSS files, images, subdirectories — they all work.
Limits
- No control over nginx (rewrites, redirects, cache headers).
- No directory listings.
- No custom 404 page.
Paketo with custom config
For SPAs that need URL rewrites, sites that need cache headers, or anything that requires nginx/Apache config tuning, switch the Frame’s Builder to Paketo in Frame Settings.nginx config
Drop anginx.conf or set BP_WEB_SERVER=nginx via project.toml:
project.toml
BP_WEB_SERVER_ROOT should match the directory containing your index.html. BPE_PORT sets the runtime port (and the PORT env var); use the same value as the Frame’s port.
Apache config
Same shape, but setBP_WEB_SERVER=httpd:
project.toml
Custom configs
If you have your ownnginx.conf or httpd.conf at the repo root, Paketo detects it automatically and uses it instead of the generated default. Just drop the file in.
SPAs (React, Vite, Astro)
If your repo has apackage.json, the Raypacks static pack won’t pick it up. Two options:
- Build locally, ship the output as a static site. Run
npm run build, then commit the output directory underpublic/(rename if needed). Now the repo has nopackage.jsonat the root (move it into a subfolder) and the static pack picks it up. - Let Nubo build and serve. Use the React guide which runs
npm run buildthenserveagainst the output. Keeps git pushes as the deploy mechanism.
