Skip to content

v0.21.0

Federated launches span machines, repositories resolve through a committed index, and launchers pin registry sources.

Released on August 3, 2026

Breaking changes

  • Repository entries now resolve through a committed repository index rather than being resolved ad hoc, and every cache entry is pinned to a git commit; generate and commit the index with the new peppy repo index command, whose --check mode verifies the committed index is up to date.
  • Launcher deployment sources are restricted to name:tag registry references that resolve to node pins, and retired source keys are refused with a migration message, so update your launcher files to reference nodes by registry name:tag.

Federation

  • A federated launch now spans multiple machines through cross-machine dispatch.
  • The launcher places and preflights federated core node links across machines.
  • peppy reset rediscovers federated reset targets from the federation instead of from local memory.
  • Cross-daemon pairing peers are stamped with their own core node in display reads.
  • Filesystem-backed repositories cannot participate in federation.

Pairing and dependencies

  • depends_on gains a fourth peer-coupling level, pairing_observers, across the daemon and launcher.
  • The surviving instance of a pair still receives the dissolution notice after its partner has already stopped.

Launcher and launch

  • Launcher files accept per-instance env_vars.
  • The launch summary lists every machine's node log files.
  • A coordinator's next launch takes over its own stale reservation through a lease instead of being blocked by it.
  • The caller's environment stays on the caller's machine, so peer builds no longer inherit it.

Containers

  • Each peer prepares its own container bind mounts, and relative container mount sources are forwarded to Lima as absolute paths.
  • Restarts that would kill running containers are refused, and container bind sources are prepared before a participant slice takeover.
  • Apptainer SIF images are FUSE-mounted instead of extracted, with squashfuse bundled alongside apptainer.

Repositories

  • peppy repo refresh caches its checkout for reuse, prunes orphaned checkouts, applies filesystem exclusions before reading declared items, and skips re-pushing stack entries whose manifest is unchanged.
  • Repository resolution failures are reported and contained instead of guessed, with clearer failure reports.

Messaging and code generation

  • The Rust and Python generators handle $optional scalars and payload-less feedback topics consistently.

Documentation

  • The documentation is aligned with the current commands, outputs, and behavior.
  • Federation coordination guidance and the producer-link example are clarified, with the example showing separate per-node manifests.

View all releases