# Demo module — tiny alpine container used to validate panel end-to-end # without pulling multi-GB game server images. The container just sleeps, # so the runtime exercises pull / create / start / stop / logs / wait without # needing RCON or any real game behaviour. id: demo name: "Demo (alpine sleeper)" version: 0.1.0 authors: - panel contributors supported_modes: - docker runtime: docker: image: alpine:3.21 # Host networking -- container shares the host net namespace, so # any port the game/mod binds is directly on the LAN. AMP-like # model. Multi-instance safety comes from env-driven per-instance # ports (panel allocator + env: mapping on each ports entry). network_mode: host command: - sh - -c - | echo "demo instance starting"; i=0; while true; do echo "tick $i $(date -Iseconds)"; i=$((i+1)); sleep 2; done ports: - { name: dummy, proto: tcp, default: 14000 } resources: min_ram_mb: 32 recommended_ram_mb: 64 update_providers: # Exercise the Direct provider with a small, stable URL. Running the # update places the GPL-3.0 text at /data-ish/license.txt. - id: gpl kind: direct url: "https://www.gnu.org/licenses/gpl-3.0.txt" target_path: "license.txt" # GitHub provider: grabs the latest `buf` CLI release note as a demo # (asset_regex matches any tar.gz). - id: buf-latest kind: github repo: "bufbuild/buf" asset_regex: "buf-Linux-x86_64.tar.gz" target_path: "downloads/buf.tar.gz" # --- Manifest-driven UI metadata (WI-07) -------------------------- # Consumed by the CONTROLLER/dashboard only (the controller loads its # own ./modules copy at startup); the agent ignores these at runtime. appearance: emoji: "🧪" grad: "linear-gradient(135deg,#4b5563,#9ca3af)"