Project runtimes

Select Native Node.js, Native Bun, or a deliberately limited trusted Compose project.

Runtime detection is a suggestion

Detect App reads only selected repository metadata in a shallow checkout. It suggests Docker Compose when it finds a supported Compose file, Bun from Bun metadata, or Node.js from package metadata. The scan never runs project code and the owner remains responsible for reviewing or overriding the result. A Dockerfile without a Compose file does not make a project eligible for the Compose runtime.

Node.js and Bun

Native projects run under systemd with an assigned PORT, a project-specific Unix user, a generated environment file, and a restricted filesystem view. Node uses the pinned host npm executable; Bun uses /usr/local/bin/bun. Build and start fields accept only package-script names such as build, start, or api:serve—not shell commands.

Skip Build

Select Skip Build only when the project is ready to start without compilation. It stores an empty build script. Portal still installs dependencies, validates the start script, starts the candidate, and applies selected health checks.

Bun-specific notes

Bun candidates prefer bun install --frozen-lockfile and use bun run <script>. The installer supplies Bun 1.3.13. The helper uses a systemd runtime bind path for Bun so its hardened service can read the active release safely.

Docker Compose

Choose a repository-relative Compose YAML file and a web-service name. The selected service must publish the project’s assigned port. The helper rejects privileged containers, host network/PID/IPC modes, and host bind mounts; use named volumes instead. Portal runs docker compose config before activation and controls Compose under a project-specific name.

Compose supports trusted owner repositories with special dependencies. It is not an isolation boundary for untrusted source code.

Last audited: 2026-08-25
Portal source of truth