Deploy
Go, Java, .NET, Ruby, Bun and Deno apps
Run apps on Go, Java, .NET, Ruby, Bun or Deno as managed services behind the web server, with limits sized from the server.
Apps on other runtimes run like Node.js and Python apps: a managed systemd service of the site's user on a local port, with the web server in front for the domain, HTTPS and static files.
1. Install the runtime
In the server's web stack, under Other runtimes, pick the runtime and its versions and Install:
| Runtime | Versions | Where it comes from |
|---|---|---|
| Go | 1.27, 1.26 | go.dev release, checksum pinned |
| Java | 25, 21 (LTS) | Eclipse Temurin JDK, checksum pinned |
| .NET | 10, 8 (LTS) | Microsoft SDK, checksum pinned |
| Ruby | the distribution's | Debian/Ubuntu packages, with Bundler and build tools |
| Bun | 1 | Bun release, checksum pinned |
| Deno | 2 | Deno release, checksum pinned |
Security releases arrive with agent updates, and running apps restart on the new version. Remove a version with its chip (×); that is refused while a site uses it.
2. Add the site
Add site and choose the runtime and version under Type. Zefily assigns a free local port.
3. Deploy the code
Set up a Git deploy on the site's Deploy pane with build commands and a Start command. The start command runs in the live release as the site user and must listen on 127.0.0.1:$PORT. For example:
| Runtime | Build commands | Start command |
|---|---|---|
| Go | go build -o app . |
./app |
| Java | ./mvnw -q package -DskipTests |
java -jar target/app.jar |
| .NET | dotnet publish -c Release -o out |
dotnet out/App.dll |
| Ruby (Rails) | bundle install, bin/rails assets:precompile |
bundle exec puma -b tcp://127.0.0.1:$PORT |
| Bun | bun install --frozen-lockfile |
bun run start |
| Deno | deno install |
deno task start |
The process gets limits sized from its share of the server, so the app fits beside the others: Go GOMAXPROCS and GOMEMLIMIT; Java a heap ceiling (-Xmx) and processor count in JAVA_TOOL_OPTIONS, plus SERVER_PORT; .NET DOTNET_GCHeapHardLimit, DOTNET_PROCESSOR_COUNT and ASPNETCORE_URLS; Ruby RAILS_ENV=production and Bundler's deployment settings; Bun and Deno NODE_ENV=production. WEB_CONCURRENCY (worker processes) is set for every runtime. Builds run without toolchain downloads (GOTOOLCHAIN=local) or telemetry.
The app restarts on every deploy; if it does not answer after a deploy, the site switches back to the previous release. Configuration goes into the site's .env, and the app's output is on the Logs pane under App process.
Updated October 25, 2026 View as Markdown llms.txt