Programs

NODE-MNGR

Spinning up a Node.js project is as easy as pasting the Git URL, picking a Node.js version, and hitting deploy. React, Next.js, Vite and plain Node.js — all supervised from the KillTheHost panel with live logs and one-click restarts.

Overview

NODE-MNGR detects the framework of any Node.js project you point it at, installs dependencies with the right package manager (npm, pnpm, yarn or bun), builds it, and supervises the process so you don't have to. Live logs stream into the panel and restarts are a single click.

The fastest path from nothing to a running app is the Deploy from Git flow: paste a repo URL, select a Node.js version, click deploy.

Deploy from a Git URL

  1. Open the Node apps tab and click Deploy from Git.
  2. Paste your repository URL — any public HTTPS Git remote works (GitHub, GitLab, Bitbucket, Codeberg, self-hosted Gitea). For private repos, add a deploy token in Settings → Git credentials first.
  3. Pick the Node.js version to run the app on (see the next section for what's available).
  4. Click Deploy. NODE-MNGR clones the repo, detects the framework, installs dependencies, runs the build and starts the app — streaming every line of output into the panel as it goes.
bash
# Everything the UI does is also available from the CLI.
$./launch.sh node deploy https://github.com/you/my-next-app --node 20 --name my-next-app
→ cloning https://github.com/you/my-next-app ...
→ node version: 20.12.2 (lts/iron)
→ detected framework: next.js (14.2.28)
→ package manager: pnpm
→ running: pnpm install && pnpm build && pnpm start
✓ my-next-app is live on port 8101

Pick a Node.js version

NODE-MNGR manages its own Node.js toolchain via fnm. The first time you pick a new version it is downloaded and cached; subsequent deploys reuse the cache. Available versions on every install:

VersionRelease lineSupport until
22.xJod (current LTS)April 2027
20.xIron (LTS)April 2026
18.xHydrogen (maintenance)April 2025
customany fnm-installable versionyou pick

Import a local app

Already have the code on disk? Skip the Git clone and import the directory directly.

  1. Drop your project under data/node-apps/<name>/, or point NODE-MNGR at an existing path.
  2. Open the Node apps tab and click Import.
  3. NODE-MNGR reads package.json, detects the framework, and proposes a start command. Accept or override it.
bash
$cp -r $HOME/code/my-next-app data/node-apps/my-next-app
$./launch.sh node import my-next-app
→ detected framework: next.js (14.2.28)
→ package manager: pnpm
→ start command: pnpm build && pnpm start

Supported frameworks

NODE-MNGR recognises the following project types out of the box. Anything else falls back to a generic node dist/index.js runner you can customise.

FrameworkDetected viaDefault run mode
Next.jsnext in depsbuild + next start
Vitevite.configbuild + vite preview
Create React Appreact-scriptsbuild + static serve
Remix@remix-run/*build + remix-serve
Astroastro in depsbuild + astro preview
SvelteKit@sveltejs/kitbuild + node adapter
NestJS@nestjs/corebuild + node dist/main.js
Express / Fastifyentry scriptnode <entry>

App lifecycle

From the panel or via CLI:

bash
$./launch.sh node start my-next-app
$./launch.sh node stop my-next-app
$./launch.sh node restart my-next-app
$./launch.sh node rebuild my-next-app --clean

Env vars & ports

Each app gets its own .env managed from the panel, and a dedicated port allocated from the 8100–8199private range. Port collisions are detected at start time.

data/node-apps/my-next-app/.killthehost.yml
app: my-next-app
framework: next.js
package_manager: pnpm
port: 8101
build_command: pnpm build
start_command: pnpm start
env:
NODE_ENV: production
DATABASE_URL: postgres://kth:kth@localhost:5432/my_next_app

Expose an app

Click Expose on any running app and NODE-MNGR coordinates with the Cloudflare Tunnel and Domain Sync so a public hostname and DNS record are created atomically. No router config, no port forwarding.

Live logs

stdout and stderr are multiplexed into a ring buffer per app (last 5,000 lines by default) and streamed to the panel in real time. Follow, search and tail work exactly like you'd expect:

bash
$./launch.sh node logs my-next-app --follow
$./launch.sh node logs my-next-app --grep error
$./launch.sh node logs my-next-app --tail 200