Add and remove named launcher copies on a running stack, with steadier instance health and safer concurrent stack changes.
Released on September 14, 2026
Breaking changes
- Component axes no longer accept
defaultoroptional; add adeploymentsentry{ <axis>: "<option>" }to pick which option runs, and usecardinality: "zero_or_one"in place ofoptional. message_formatno longer accepts the type aliasesfloat,double, andstr; usef32,f64, andstringinstead.
Repeatable copies
- Declare a component axis with
cardinality: "zero_or_more"to run its options as named copies you start, add, and remove independently under one launcher. peppy stack join OPTION -i NAMEadds a copy to a running stack, selecting its axes with--with, its machine with--place, and per-instance overrides with--set-arguments.peppy stack remove NAMEstops one copy and drops it from the stack, leaving every other copy and the stack's own nodes running.peppy stack listandpeppy stack list --jsonreport each copy's option, host, selection, and instances.peppy stack resolvepreviews a copy joined onto a launch with--join,--join-name,--join-with, and--join-set-arguments.peppy stack reset --federatedclears the launch from every machine it reached.- Fragments can declare their own component axes and reference other fragments across directories within a repository.
- Constraint and adjustment
when,requires, andforbidsconditions accept a list of option names per axis, matching any of them.
Instance health and stack safety
- A running instance is flagged
unhealthyonly after three consecutive missed health probes, and returns tohealthyon the first probe it answers. peppy nodeadd, build, run, stop, and remove serialize with stack operations: refused while one holds the stack, and cancelled whenstack resetruns after a cleanup window.- Cancelling a
peppy nodeadd, build, run, stop, or remove now stops the work on the daemon instead of letting it finish unattended.