Panel setup & startup
Everything on this page is generated from the real egg JSON -41 variables, the multi-language docker image and the launcher startup command. No invented defaults.
Import into your panel
The egg is a single PTDL_v2 JSON file that imports into every Wings-family panel (Pterodactyl, Pelican, Jexactyl, Wisp, Emerald) plus Feather Panel and PufferPanel template flows.
- Download
egg-programming-multi.jsonfrom themasterbranch. - In your panel admin area open Nests / Templates → Import Egg and select the file.
- Create a server on the egg. The docker image
ghcr.io/potenfyr-studios/prog-language-eggs:latestis selected automatically. - Start the server. The startup command
bash /usr/local/bin/run.shlaunches the launcher, which auto-detects your code or pulls it from Git.
Self-updating egg
The egg ships with EGG_UPDATE_URL pointing at this repository's raw JSON (https://raw.githubusercontent.com/PotenFYR-Studios/Prog-Language-Eggs/master/egg-programming-multi.json). With AUTO_UPDATE_EGG=1 (default) the launcher checks it on every boot and refreshes its scripts when the upstream egg changes, you import once and stay current.
Version selection
RUNTIME_VERSION controls the primary runtime version. Values are validated and resolved from live upstream feeds at boot, exact versions (22, 22.1, 22.1.4) or the keyword channels below.
| Variable | Default | Editable | Description |
|---|---|---|---|
RUNTIME_VERSION | latest | yes | Version of the primary runtime: 22 | 22.1 | 22.1.4 or keywords latest, stable, lts, alpha, beta, rc, preview, nightly. Validated & resolved from live upstream feeds. 'latest' resolves once, then pins to the exact version; set to 'auto-detect' to re-resolve. |
LANGUAGE_VERSION | - | yes | DB_VERSION-style alias: pinned version (e.g. 22.1, 3.12, 21) or keywords latest/stable/lts/nightly. Acts as RUNTIME_VERSION fallback. |
Version channels
| Channel | Resolves to |
|---|---|
| latest | Newest stable GA release, resolves once, then pins |
| stable | Production stable branch |
| lts | Long-Term Support release line |
| beta / rc / alpha / preview | Pre-release channels where the vendor publishes them |
| nightly | Canary/nightly builds (Node, Rust, Zig master, Bun canary) |
| 22 · 22.1 · 22.1.4 | Highest release matching the exact version prefix |
RUNTIME_VERSION=lts # or 22, 3.12, nightly, stable
LANGUAGE_VERSION= # optional DB_VERSION-style alias fallback
EXTRA_RUNTIMES=python@3.12,bun@latest,java@21 # companion toolchainsFirst-boot pinning
To protect production containers from upstream major bumps, auto and latest resolve once: the concrete version (e.g. v22.14.0) is pinned into .multi-prog.conf and reused on every cold start. Set the variable to auto-detect in the Startup tab to clear the pin and re-resolve.
Custom runtime URL
Need a fork or an internal build? CUSTOM_RUNTIME_URL downloads a .tar.gz, .zip or standalone binary into the container on boot and uses it as the runtime.
Startup command customization
The panel startup command stays fixed at bash /usr/local/bin/run.sh, the launcher is the stable interface. You customize what runs through variables, which the panel exposes in the Startup tab:
| Variable | Default | Editable | Description |
|---|---|---|---|
CUSTOM_COMMAND | - | yes | Custom command to override the default runner entirely. |
RUNNER | auto | yes | Runner or engine to use (e.g. auto, node, bun, tsx, uvicorn, cargo, go). 'auto' resolves to the effective engine on first boot and is pinned; set to 'auto-detect' to re-arm. |
MAIN_FILE | auto | yes | The main script or file to execute (leave 'auto' for smart detection). 'auto' resolves to the concrete entry point on first boot and is pinned; set to 'auto-detect' to re-arm. |
PACKAGE_MANAGER | auto | yes | Package manager for dependency resolution (e.g. auto, npm, pnpm, yarn, bun, pip, cargo). |
Override the runner entirely with CUSTOM_COMMAND, or nudge the detection: RUNNER=uvicorn forces the FastAPI path, MAIN_FILE picks the entry point, PACKAGE_MANAGER pins pnpm/uv/poetry/… The launcher announces the resolved command line in the console before exec.
Build & lifecycle hooks
| Variable | Default | Editable | Description |
|---|---|---|---|
BUILD_COMMAND | - | yes | Optional build or compilation command (e.g. 'npm run build', 'cargo build --release'). |
PRE_RUN_COMMAND | - | yes | Command to execute before starting the main process (e.g. database migrations). |
POST_RUN_COMMAND | - | yes | Command to execute when application stops or shuts down. |
EXTRA_ARGS | - | yes | Extra CLI arguments passed to the runner or executable. |
DEV_MODE | 0 | yes | Enable watch and hot-reload mode during development (1 = Enabled, 0 = Disabled). |
Deploy from Git
Set GIT_REPO and the installer clones your repository on the install pass, then re-syncs it on every boot - fetching over a non-empty workspace instead of wiping, and printing the installed commit so latest-vs-old is verifiable in the console.
| Variable | Default | Editable | Description |
|---|---|---|---|
GIT_REPO | - | yes | Git repository URL to clone and sync on startup. |
GIT_BRANCH | main | yes | Target branch to clone or track from the Git repository. |
GIT_AUTH_TOKEN | - | yes | Personal Access Token for private Git repositories. |
Token safety
GIT_AUTH_TOKEN is injected into the fetch URL server-side and redacted from console output and logs. Reinstall semantics: only committed, pushed files survive, a reinstall re-clones the branch.
Variable reference
All 41 startup variables from egg-programming-multi.json, grouped by role. “Editable = panel” rows are managed by the panel (port allocation) and not user-editable.
Core language selection
| Variable | Default | Editable | Description |
|---|---|---|---|
LANGUAGE | auto | yes | Target language or 'auto' for intelligent file auto-detection. After the first boot the detected value is pinned; set to 'auto-detect' to clear the pin and re-run detection. |
RUNNER | auto | yes | Runner or engine to use (e.g. auto, node, bun, tsx, uvicorn, cargo, go). 'auto' resolves to the effective engine on first boot and is pinned; set to 'auto-detect' to re-arm. |
MAIN_FILE | auto | yes | The main script or file to execute (leave 'auto' for smart detection). 'auto' resolves to the concrete entry point on first boot and is pinned; set to 'auto-detect' to re-arm. |
PACKAGE_MANAGER | auto | yes | Package manager for dependency resolution (e.g. auto, npm, pnpm, yarn, bun, pip, cargo). |
RUNTIME_VERSION | latest | yes | Version of the primary runtime: 22 | 22.1 | 22.1.4 or keywords latest, stable, lts, alpha, beta, rc, preview, nightly. Validated & resolved from live upstream feeds. 'latest' resolves once, then pins to the exact version; set to 'auto-detect' to re-resolve. |
LANGUAGE_VERSION | - | yes | DB_VERSION-style alias: pinned version (e.g. 22.1, 3.12, 21) or keywords latest/stable/lts/nightly. Acts as RUNTIME_VERSION fallback. |
CUSTOM_COMMAND | - | yes | Custom command to override the default runner entirely. |
CUSTOM_INSTALL_COMMAND | - | yes | Custom dependency install command that replaces the automatic one (e.g. 'bun install', 'pnpm install --no-frozen-lockfile'). Leave empty for auto-detection. |
BUILD_COMMAND | - | yes | Optional build or compilation command (e.g. 'npm run build', 'cargo build --release'). |
EXTRA_ARGS | - | yes | Extra CLI arguments passed to the runner or executable. |
Runtimes & companions
| Variable | Default | Editable | Description |
|---|---|---|---|
EXTRA_RUNTIMES | auto | yes | Comma-separated extra toolchains to enable (e.g. 'python,java,go' or 'none'). |
SKIP_RUNTIMES | none | yes | Comma-separated runtimes to skip/disable (e.g. 'python,java' or 'none'). |
NODE_GYP_SUPPORT | 1 | yes | Install Python 3 + build tools for native node addon compilation (1 = Enabled, 0 = Disabled). |
SKIP_PYTHON | 0 | yes | Prevent the Python companion toolchain from being installed (1 = Skip, 0 = Allow). |
AUTO_INSTALL_DEPS | 1 | yes | Automatically install missing dependencies on container boot (1 = Enabled, 0 = Disabled). |
STARTER_TEMPLATE | empty | yes | Starter project template if workspace is empty (e.g. nodejs, bun, python, golang, rust). |
Process supervision & lifecycle
| Variable | Default | Editable | Description |
|---|---|---|---|
SUPERVISOR | auto | yes | Multi-process mode: auto (Procfile when present + language auto), procfile (force), single (never). Powers multi-layer apps in one container. |
PROCFILE_RESTART | 1 | yes | Restart crashed Procfile processes with linear backoff (1 = Enabled, 0 = Disabled). Gives up after 5 attempts per process. |
PROCFILE_LOGS | 0 | yes | Mirror each supervised process stream to .logs/processes/<name>.log (1 = Enabled, 0 = Console only). |
AUTO_RESTART | 0 | yes | Automatically restart process on unexpected crash (1 = Enabled, 0 = Disabled). |
RESTART_DELAY | 3 | yes | Delay in seconds before attempting to auto-restart. |
DEV_MODE | 0 | yes | Enable watch and hot-reload mode during development (1 = Enabled, 0 = Disabled). |
PRE_RUN_COMMAND | - | yes | Command to execute before starting the main process (e.g. database migrations). |
POST_RUN_COMMAND | - | yes | Command to execute when application stops or shuts down. |
CLEAN_BUILD_CACHE | 1 | yes | Purge compiler caches after build to save disk space (1 = Enabled, 0 = Disabled). |
MEMORY_AUTO_TUNE | 1 | yes | Auto-tune GC & memory limits to prevent container OOM (1 = Enabled, 0 = Disabled). |
Git & networking
| Variable | Default | Editable | Description |
|---|---|---|---|
SERVER_PORT | {{server.build.default.port}} | panel | Primary network port allocated by the panel. |
AUTO_ENV_INJECT | 1 | yes | Ensure .env has correct PORT and HOST=0.0.0.0 bindings (1 = Enabled, 0 = Disabled). |
GIT_REPO | - | yes | Git repository URL to clone and sync on startup. |
GIT_BRANCH | main | yes | Target branch to clone or track from the Git repository. |
GIT_AUTH_TOKEN | - | yes | Personal Access Token for private Git repositories. |
EXTRA_URLS | - | yes | Additional files or archives to download on boot (URL or dest|URL). |
Health checks & console
| Variable | Default | Editable | Description |
|---|---|---|---|
HEALTH_CHECK_PATH | - | yes | HTTP path probed after boot (e.g. /healthz). Empty = disabled. Probe targets http://127.0.0.1:$SERVER_PORT<path>. |
HEALTH_STRICT | 0 | yes | Exit the server non-zero when the health check fails (1 = Strict, 0 = Warn only). |
PANEL_STOP_WATCHER | auto | yes | Watch console input for the panel stop command (^C, stop, kill...) so Stop works on Wings/Feather-style daemons that send stop as console text (auto = enabled except when stdin must stay with the app; 0 = disabled, 1 = forced on). |
CLI_THEME | prog | yes | Console output theme for the launcher (prog = Prog-Language Eggs agent theme, classic = legacy PotenFYR theme). |
CLI_BANNER_GRADIENT | auto | yes | Console banner color gradient: auto (random each boot), citrus, aurora, sunset, ocean, candy, spectrum, or none. |
DEBUG | 0 | yes | Enable verbose script debug output (1 = Enabled, 0 = Disabled). |
EGG_UPDATE_URL | https://raw.githubusercontent.com/PotenFYR-Studios/Prog-Language-Eggs/master/egg-programming-multi.json | yes | URL checked on every startup for egg/launcher self-updates. Points at the PotenFYR egg JSON by default; when it changes, the launcher scripts are refreshed automatically. Can also point at a raw .sh URL to update the launcher directly. |
AUTO_UPDATE_EGG | 1 | yes | Check EGG_UPDATE_URL on startup and self-update the launcher when the upstream egg changed (1 = enabled, 0 = disabled). |
CUSTOM_RUNTIME_URL | - | yes | Direct URL to a custom runtime (.tar.gz, .zip or standalone binary) downloaded into the container on boot. |