The multi-line env release: PEM keys and JSON documents arrive intact (r465) — the largest remaining user-facing limitation, closed with a one-service compose bridge that changes nothing for anything else.
Fixed
- Multi-line environment values no longer arrive as a literal
\n(r465). docker's--env-fileparser treats every line asKEY=VALUE, so a PEM private key or a JSON service credential reached the container with two characters where the line break belonged — apps failed on their own secrets, and the only workarounds were base64-encoding or switching to a compose service. When any resolved env value spans lines, the docker builder now starts the container through a generated one-service compose file: compose's dotenv parser decodes the quoted\nescapes into REAL newlines (the same byte-verified format the compose and remote-compose builders have always used), and the file carries the exactdocker runline — same container name (the blue-green candidate), samend-svc-<slug>bridge joined as an external network, same volumes (data mount and attachments, declared external, ensured with an idempotent create to match-vauto-create semantics), same CPU/memory limits, same restart policy, same template command, same published port for the primary (replicas stay portless, each in its own compose project). Everything downstream of "container exists" — health probes, Traefik routing, stop/rollback, replica naming — keys on the container name and is untouched. Services without multi-line values keep the byte-identicaldocker runinvocation they have always had. The env editor's "base64-encode it" heads-up is retired into an upgrade note for older panels.