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
- Open the Node apps tab and click Deploy from Git.
- 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.
- Pick the Node.js version to run the app on (see the next section for what's available).
- 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.
# 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 8101Pick 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:
| Version | Release line | Support until |
|---|---|---|
| 22.x | Jod (current LTS) | April 2027 |
| 20.x | Iron (LTS) | April 2026 |
| 18.x | Hydrogen (maintenance) | April 2025 |
| custom | any fnm-installable version | you pick |
Import a local app
Already have the code on disk? Skip the Git clone and import the directory directly.
- Drop your project under
data/node-apps/<name>/, or point NODE-MNGR at an existing path. - Open the Node apps tab and click Import.
- NODE-MNGR reads
package.json, detects the framework, and proposes a start command. Accept or override it.
$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 startSupported 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.
| Framework | Detected via | Default run mode |
|---|---|---|
| Next.js | next in deps | build + next start |
| Vite | vite.config | build + vite preview |
| Create React App | react-scripts | build + static serve |
| Remix | @remix-run/* | build + remix-serve |
| Astro | astro in deps | build + astro preview |
| SvelteKit | @sveltejs/kit | build + node adapter |
| NestJS | @nestjs/core | build + node dist/main.js |
| Express / Fastify | entry script | node <entry> |
App lifecycle
From the panel or via CLI:
$./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 --cleanEnv 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.
app: my-next-appframework: next.jspackage_manager: pnpmport: 8101build_command: pnpm buildstart_command: pnpm startenv: NODE_ENV: production DATABASE_URL: postgres://kth:kth@localhost:5432/my_next_appExpose 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:
$./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