Node.js
Se detecta por package.json. npm, yarn, pnpm o bun según el lockfile.
Guías de despliegue paso a paso: Node.js, Next.js, Nuxt, SvelteKit, Astro.
Consulta Buildpackspara ver cómo funcionan la detección y la política de versiones. Un repo que además parece un frontend estático se compila aquí y después lo sirve el buildpack static.
Detección
package.json en el directorio base.
Versiones
La versión por defecto es Node.js 24. Ramas publicadas a septiembre de 2026: 22, 24, 25, 26. Recibes el último parche de la versión minor solicitada.
Para fijar la versión, por este orden:
.node-version.nvmrcengines.nodeenpackage.json(un rango como^22elige la versión publicada más alta que encaje)
Se elimina una v inicial.
Instalación y build
El lockfile decide el gestor de paquetes: primero bun.lock o bun.lockb (o "packageManager": "bun@…" en package.json), después pnpm-lock.yaml, después yarn.lock y, si no hay ninguno, npm. El lockfile es obligatorio (npm ci o una instalación frozen). Sin él, la build falla.
Si package.json tiene un script build, se ejecuta (bun run build con Bun, npm run build en los demás casos). Después se ejecuta el script heroku-postbuild, si existe. Las dependencias de desarrollo se eliminan de la imagen de runtime, salvo en las apps Next.js que arrancan con un next.config.* en TypeScript (esas conservan typescript al arrancar).
Yarn y pnpm pasan por Corepack. Bun se instala desde el mirror de binarios de Nodion (no desde bun.sh durante la build de la app) y se queda en el PATH al arrancar, así que un script de inicio que llame a bun funciona. El proceso por defecto sigue siendo el script de inicio o node; no se reescribe para Bun. Al arrancar se define NODE_ENV=production y se añade node_modules/.bin al PATH.
Comando de inicio
Gana la primera coincidencia:
- El script
startdepackage.json - El comando por defecto de un framework SSR conocido (ver abajo)
node server.js,index.jsoapp.js, si ese archivo existenode .
Puedes sobrescribirlo con un Procfile. Tu app debe escuchar en PORT.
Frameworks
- Next.js:
next start, salvo conoutput: 'export', que genera un sitio estático (out/). - Nuxt:
node .output/server/index.mjs - SvelteKit: estático con
adapter-static(build/), onode buildconadapter-node - Remix / React Router:
npx remix-serve ./build/server/index.js - Astro:
dist/estático, onode ./dist/server/entry.mjscuando el output esserverohybrid - Angular, Gatsby, Create React App, Eleventy, Vite: se tratan como salida estática
PHP + Node (Laravel con Vite) y Ruby + Node (Rails con JS) son grupos de buildpacks para varios lenguajes. Consulta PHPy Ruby.