Choose a runtime version
Cloud can run your Next.js application on Node.js, Bun, or Deno, and it detects the right runtime from the files in your repository. Apackage-lock.json file selects Node.js, a bun.lock, bun.lockb, or bunfig.toml file selects Bun, and a deno.json or deno.lock file selects Deno.
If you are using Node.js, you may choose your version from the Runtime section of your environment’s General Settings page. After changing it, redeploy your environment so the new version takes effect. Bun and Deno run on a fixed version, so there’s nothing to choose. You can find the supported versions in the Runtimes documentation.
Build your application
Your environment’s build commands run each time you deploy. Typically, they will install your dependencies and compile your application:Start your application
Cloud starts your application by running thestart script defined in your package.json file, which is usually next start. If you are using the Deno runtime, Cloud runs deno task start instead. You may override the start command from your environment’s deployment settings if needed.
Cloud routes traffic to your application on the port set by the PORT environment variable. The next start command reads this variable automatically, so most applications work without any changes. However, if you have replaced next start with a custom server, such as an Express server in a server.js file, make sure that server reads PORT rather than listening on a hardcoded port. Otherwise, your deployment will succeed but won’t receive any traffic. The deployment troubleshooting guide has more details.
Environment variables
You may add your environment variables from your environment’s settings. Cloud sets them directly on your application’s process, so your server code can read them fromprocess.env just like it does locally.
Variables prefixed with NEXT_PUBLIC_ are also available in the browser, while all other variables stay on the server. Keep in mind that Next.js inlines NEXT_PUBLIC_ values into your JavaScript when your application is built. Your build commands receive your environment variables through a .env file, so these values are available during the build, but you will need to redeploy whenever you change one so the new value is compiled into your application.
In addition to your own variables, Cloud automatically sets NODE_ENV=production and NEXT_PUBLIC_SITE_URL, which contains your application’s URL, on every deployment.
Attach a database or cache
When you attach a database or cache from your environment’s infrastructure canvas, Cloud injects aDATABASE_URL or REDIS_URL connection string into your environment. Most database libraries and ORMs, including Prisma and Drizzle, accept these URLs directly. The Node.js deploy guide includes examples for several popular clients.
Your environment’s filesystem is reset each time you deploy, and each replica of your application has its own disk. Because of this, anything your application needs to share or keep, such as sessions or cached data, should live in an attached database or cache rather than on disk.
The same applies to Next.js’s own data cache and incremental static regeneration. By default, Next.js stores these on the local filesystem, so each replica keeps its own copy and the cache is cleared on every deployment. If your application relies on revalidated pages staying consistent across replicas, configure a custom cache handler backed by your cache.
Store files in object storage
For user uploads and any other files your application needs to keep, attach a bucket to your environment as its default disk. Cloud injects theAWS_BUCKET, AWS_ENDPOINT_URL, AWS_REGION, AWS_ACCESS_KEY_ID, and AWS_SECRET_ACCESS_KEY variables. When creating your S3 client with the AWS SDK for JavaScript, be sure to pass the endpoint explicitly:

