[v1.124.0] - 2026-10-27
New Features
- Extended template rendering to more process fields:
entrypoint,shutdown.command,ready_log_line,env_file,log_configuration.rotation.directoryandfilename, the exec probeworking_dir, and HTTP probeheaders. A template that fails to render now names the process and the field it came from.is_template_disablednow coversentrypointandshutdown.commandalong withcommand, so a shutdown command or entrypoint with literal Go template syntax (e.g.docker inspect -f '{{.State.Running}}') needs escaping or that flag. - Added
PC_CLIENT_LOG_FILEto set the log file of client commands. Client commands no longer share the server'sPC_LOG_FILEpath (truncating the server's log on every call): they now log to a-clientsibling of it, e.g.pc.logbecomespc-client.log.
Bug Fixes
- Fixed processes with a
schedulethat were added or changed by a project update or reload running once immediately and never being scheduled. They are now registered as they are at startup (a disabled one stays paused), a schedule change alone triggers the update, and a removed or replaced process no longer leaves its old schedule behind, addresses issue #561, by @jihtsan. - Fixed a
process_healthydependent being skipped when it started while its still-running dependency was temporarily not ready after a nonfatal readiness probe failure, which also stamped the dependency withexit_code=1. The dependent now waits for the dependency to become ready again, addresses issue #544. - Fixed the first
project updateafter a server start restarting every process even when its configuration had not changed. - Fixed replicas of a scaled process sharing one copy of their probes and log rotation settings, so every replica used the values rendered for the first one: the documented readiness probe with
port: "404{{.PC_REPLICA_NUM}}"probed replica 0's port from every replica. - Fixed several log streaming issues: in
attachmode a process whose log was not being followed showed an empty log pane, log backlogs larger than 256 lines sent over the API were mostly dropped, a log request for several processes ended all of them when the first one finished, and a line written while a viewer subscribed could be shown twice or not at all, addresses issue #539. - Fixed
process-compose process logswithout--followprinting a spuriouswrite close: ... broken pipeerror on stderr after a successful run, by @emeka. - Fixed CJK and other wide characters being garbled in the terminal view of interactive processes, where each character overwrote the right half of the wide character before it, addresses issue #535.
- Fixed the TUI process table reshuffling stopped processes on every refresh when sorted by CPU or memory, and the selection jumping to a different process when a refresh reordered the rows. Ties now sort by name, and the column chosen with
--sortis marked in the header from the start, addresses issue #547. - Client commands no longer check GitHub for a newer release, since scripts running them in a loop could exhaust the machine's unauthenticated GitHub API rate limit. The remaining update checks identify themselves with a
process-compose/<version>User-Agent, addresses issue #552. - Fixed
environmententries whose value contains=(e.g.DSN=host=db user=app) being dropped when merging configuration files or usingextends, by @bensynapse. - Fixed the Swagger UI always targeting
localhost:8080when the API server runs on a different address or port, by @icyleaf. - Fixed the REST API returning a process
namespaceas a plain string when it holds a single namespace, while the OpenAPI spec declares an array of strings, which broke clients generated from the spec.namespaceis now always an array in JSON output (REST responses, the process state WebSocket, andprocess list,process getandprocess monitorwith-o json). Requests and YAML configs still accept a plain string. Anything that expects a string needs updating, including scripts that comparenamespaceto a string and process-compose client binaries older than v1.122.0, addresses issue #538.