Nuxt
Deploy a Nuxt 3 app on Ruust: built with Nitro, server-side rendered, and served on HTTPS from an always-on Egg.
Ruust detects a Nuxt app from the nuxt dependency in your package.json. It runs nuxt build, which uses Nitro to emit a self-contained Node server under .output, and starts it with node .output/server/index.mjs. Server-side rendering works out of the box, because your Egg is a real long-running server rather than a set of functions.
Deploy it
- Push your app to a Git repo.
- In the dashboard, choose New Egg and connect the repo.
- Pick a size and a region, then lay the Egg. Ruust builds and hatches it on HTTPS.
The port
Nitro reads two environment variables at start-up: PORT and HOST. Ruust sets PORT, but Nitro defaults HOST to localhost, so you must set HOST=0.0.0.0 on the Egg. Binding to localhost is the top reason an Egg builds but never hatches, because Ruust cannot reach a server that only listens on the loopback interface.
HOST=0.0.0.0Start command
On the Nixpacks path, the Nixpacks build runs node .output/server/index.mjs by default after nuxt build (this is the Nixpacks preset, not a Ruust-side command). To pin it yourself, add a Procfile at the repo root with a web: line.
web: node .output/server/index.mjsEnvironment variables
Set server-side variables (database URLs, API keys) on the Egg; they are available at build and run time, encrypted at rest, and never printed in logs. Changing a run-time env var takes effect automatically: Ruust bumps an env hash in desired state and rolls the container on the next reconcile, so no manual redeploy is needed. Anything the browser needs must be prefixed NUXT_PUBLIC_ so Nuxt exposes it through the runtime config, and it is baked in at build time. A build-baked NUXT_PUBLIC_ var needs a fresh build to change (a new commit or deploy that actually rebuilds the image), which a plain redeploy does not do because a redeploy reuses the existing image.
Custom domains
Every Egg gets a ruust.run URL immediately, in the form <name>.<region>.ruust.run. To serve your own domain, add it under the Egg and point the DNS record we show you; Ruust issues and renews TLS automatically. See Custom domains.