Node.js
Your Node app, deployed as it is
homeport reads your package.json and lockfile, runs your build, and starts the app the way your start script does. SvelteKit, Next.js, Nuxt, Astro, React Router and TanStack Start are recognised, so are NestJS, Express, Hono and Fastify, and anything else with a start script runs too.
Frameworks
SvelteKit
The official adapter-bun runs it on Bun, or compiles it to one binary. adapter-node runs it on Node, adapter-static is served as files. Configured in vite.config or svelte.config.js.
Next.js
Its standalone output, set for you. next-bun-compile makes one binary. output: export is served as files.
Nuxt
Nitro’s .output, on Node or Bun. Or compile it to one binary with Bun, with Nitro’s serveStatic: 'inline'.
Astro
@astrojs/node in standalone mode runs its server. Without an adapter, dist/ is served as files.
React Router
Framework mode and Remix, started with react-router-serve as your start script says.
TanStack Start
Through Nitro’s Vite plugin, nitro() from nitro/vite: on Node, or on Bun with nitro({ preset: 'bun' }).
What homeport reads
- package-lock.json, pnpm-lock.yaml, yarn.lock or bun.lock
- Installs exactly what the lockfile says, with the package manager it belongs to.
- engines, .nvmrc or .node-version
- The Node version to run: 22, 24 or 26. With none, the current LTS.
- Your framework
- Ships only what it needs: Next.js’s standalone output, Nuxt’s .output, or your app with its production dependencies.
What you get
- No Dockerfile: the build is worked out from the repo, and you see the plan first
- Static exports (Next.js, Astro, SvelteKit, Vite) served as files, with nothing running
- Asleep when idle, awake again in about a tenth of a second, or always on at least 1 copy
- Cron jobs that run a script without waking your web app
- Postgres and storage in one click, their variables set for you
- HTTPS on a homeport.run address, and your own domain on paid plans
Start from nextjs-app
A Next.js app that deploys as it is. express-api is there too.