Changelog
All notable changes to Peppy will be documented on this page.
Subscribe to the Atom feed for updates.
v0.17.0 (Alpha): Dependency slots gain explicit cardinality, letting a slot bind to multiple producers through a uniform consumer API.
Dependency-slot cardinality
- Dependency slots now support explicit cardinality, letting a slot bind to one or more producers instead of exactly one.
- Bindings can target multiple producers, and consumers read them through a uniform
bound_producers()API regardless of cardinality. - Generated producer accessors reflect each slot's cardinality: single-producer slots expose
bound_producer()while multi-producer slots exposebound_producers(). - Bindings can now specify explicit service and action targets.
- Slots declared
one_or_moremust be non-empty, and this check now applies to programmatically suppliedFlagsvalues as well as arrays.
v0.16.0 (Alpha): Renames interfaces to contracts, tightens `depends_on` slot validation, and fixes macOS container builds.
Breaking changes
- The
conforms_tomanifest field has been renamed toimplementsas part of a broader rename of "interfaces" to "contracts"; renameconforms_totoimplementsin yourpeppy.json5and update any "interface" wording to "contract". - Dependency slots (
depends_on) now require a single producer each, replacing the previousfrom_anybinding model, and peppy now fails validation whenever adepends_onslot is left unfulfilled; update your bindings so every slot names exactly one producer.
Container builds and runs (macOS)
- macOS container builds no longer silently default to
$HOMEand now use the current working directory. - The peppy data root is now mounted into the Lima VM so container builds and runs can access it.
- Fixed a hang where restarting the Lima VM blocked the async runtime while registering a host mount for the first time.
- Container Python bindings no longer ship stale native extensions after shared-crate changes.
Validation and output
- Contract (
implements) validation failures now report per-slot coverage mismatches instead of a single combined string. - The CLI info output formatting has been simplified.
Documentation
- The advanced guides now include Python examples alongside the existing Rust examples.
- The Python async examples now wrap
select!in a loop and hold references to asyncio tasks so they are not cleaned up or garbage-collected prematurely.
v0.15.1 (Alpha): Adds remote core node targeting and collision detection, renames the serve command and the shared-directory variable.
Breaking changes
- The
PEPPYOS_SHARED_DIRenvironment variable has been renamed toPEPPY_SHARED_DIR; update your environment so the shared directory stays configured.
Core node targeting
- The
--core-nodeflag can now target a remote core node and is accepted bynode add,node sync, andrepo add. - The
--core-nodeflag is now validated as the command is parsed, so invalid values are reported immediately. - peppy now detects core node name collisions.
Serve reliability
peppy service servenow shuts down cleanly when an error occurs during startup.
v0.15.0 (Alpha): Nodes can now declare, establish, and dissolve pairings with one another, and serve restarts and shutdowns are more reliable.
Node pairing
- Nodes can now declare, establish, and dissolve pairings (peer links) with one another at runtime.
- Each paired node exposes a
LINK_IDand apairingsview in its generated module so node code can identify and work with its active links. peppy stack listnow shows an "Instance pairings" section listing the active pairings between running instances.- Malformed pairing targets are now rejected, and pairing delivery is protected against a link being dissolved concurrently.
Serve reliability
peppy serveno longer drops shutdown signals or races when restarting, so restarts and shutdowns now behave reliably.
v0.14.0 (Alpha): Logging in now connects your daemon to a per-user TLS-verified cloud router, and topics move to a new Subscription API.
Breaking changes
- Topic subscriptions no longer use the per-call
on_next_message_receivedmethod; subscribing now returns aSubscriptionthat you hold and read messages from, so update your node code to use it.
Authentication and cloud routers
- Logging in now fetches and caches your per-user cloud (zenoh) router configuration and federates your daemon to it live.
- peppy verifies the router's TLS certificate when you log in.
- Logging in or out now takes effect immediately, regenerating and restarting the daemon and propagating your organization namespace through it.
- Fixed a cross-identity organization cache leak, added a daemon restart when the namespace drifts at startup, and hardened login and logout edge cases.
- The restart warning is now skipped when your daemon stack has no user nodes.
Releasing
- Added a
--skip-prod-cert-checkflag to bypass the production-router certificate gate when running a release.
Topics
- Tightened how subscriptions behave once they are closed, across generated node code and the docs.
Reliability
- peppy now retries transient
ETXTBSYandENOENTexec errors when extracting the ruff binary during parallel binary extraction.
Documentation
- Clarified that
reconnect_after_secsandrepull_afterare cache-freshness hints rather than keepalive deadlines.
v0.14.1 (Alpha): Bundle downloads retry transient failures, AppArmor profiles are per-install, and node run drops the legacy --link-id flag.
Breaking changes
- The legacy
--link-idflag has been removed fromnode run; remove it from any commands or scripts that still pass it.
Node downloads and runtime
- Transient HTTP failures when downloading node bundles are now retried automatically with bounded backoff, making node setup more resilient to flaky networks.
- Empty environment variable path overrides are now treated as unset, so an empty value falls back to the default instead of being used as a literal path.
AppArmor
- AppArmor profiles are now namespaced per Apptainer installation path, so multiple Apptainer installations no longer collide.
- The AppArmor fix script now shell-escapes the starter path correctly, so installation paths containing special characters work.
v0.13.0 (Alpha): Adds OAuth device-flow sign-in through the new peppy auth commands and moves schema identifiers to a slash-separated form.
Breaking changes
- Schema identifiers now use a slash separator (
node/v1,interface/v1,launcher/v1); update the schema references in yourpeppy.json5to the new slash-separated form.
Authentication
- Added
peppy auth login,peppy auth logout, andpeppy auth whoamito sign in, sign out, and check your current identity using the OAuth device flow.
v0.12.1 (Alpha): Adds signal handling and bind-mount safety.
Container lifecycle
- Lima liveness checks now share a bounded wait helper and enforce per-probe timeouts.
- Native containers now fall back to a host SIGTERM when the in-guest signal is unavailable.
- In-VM container processes on macOS now receive a cooperative SIGTERM phase before being force-killed.
Stack
- All container bind mounts are now pre-flighted before any instance is started.
v0.12.0 (Alpha): Remove emit topics API that could cause deadlocks on large payloads
What's Changed
Full Changelog: v0.11.1...v0.12.0
v0.11.1 (Alpha): Fix a bunch of deadlocks on node stop
What's Changed
- Optimize config-internal by @godardt in #252
- Optimize core-node-api by @godardt in #253
- Optimize core-node-internal by @godardt in #254
- Optimize generator-internal by @godardt in #255
- Optimize containers-internal by @godardt in #256
- Optimize latency-report by @godardt in #257
- Optimize the peppy crate by @godardt in #259
- Optimize node-stack-internal by @godardt in #258
- refactor(pmi): harden public API, purify session-config builder, forbid unsafe by @godardt in #260
- Refactor peppylib and peppylib-py by @godardt in #261
- Fix stop clock and heartbeat publishers before closing the messaging session by @godardt in #262
- Fix nodes termination unhealthy when nodes are tasks that exit by @godardt in #263
- Release v0.11.1 by @godardt in #264
Full Changelog: v0.11.0...v0.11.1
v0.11.0 (Alpha): Add many fixes to the public APIs, especially with actions
What's Changed
- Deploy peppylib as a standalone installable project in Python nodes by @godardt in #240
- Fix producer death block by @godardt in #242
- Add on_shutdown hook phase with grace-bounded LIFO execution across all node stop paths by @godardt in #243
- Add
stack benchmarkimprovements by @godardt in #244 - fix: Replace half-address producer refs with fully-qualified ProducerRef by @godardt in #246
- Fix force node stop on
node buildby @godardt in #245 - Fix
node stoptargeting wildcard core nodes by @godardt in #247 - fix: isolate peppy data root per CI run to prevent cross-run collisions by @godardt in #249
- Return full producer identity (core_node + instance_id) from consumed topic callbacks by @godardt in #248
- docs: sync with PR #250 by @godardt in #251
- Release v0.11.0 by @godardt in #250
Full Changelog: v0.10.5...v0.11.0
v0.10.5 (Alpha): Fix `node stop` and daemon kill graceful shutdowns
What's Changed
- Switch to Zenoh peer sessions for direct peer-to-peer data paths by @godardt in #236
- docs: sync with PR #234 by @godardt in #235
- Fix zombie processes of nodes in the node stack by @godardt in #237
- Refactor build helpers by @godardt in #238
- Release v0.10.5 by @godardt in #239
Full Changelog: v0.10.4...v0.10.5
v0.10.3 (Alpha): Add support for shared datastore
What's Changed
- Remove deferred binding support by @godardt in #229
- Add from_any bidirectional guide with robot arm snippets by @godardt in #230
- Add memory store by @godardt in #228
- Extract router feature flag and split zenohd submodules by @godardt in #232
- Release v0.10.3 by @godardt in #231
Full Changelog: v0.10.2...v0.10.3
v0.10.2 (Alpha): Fix bidirectional communication design
What's Changed
- docs: sync with PR #221 by @godardt in #222
- Remove external consumed topics, all consumed topics now require a link_id by @godardt in #223
- Rework bidirectional comm by @godardt in #224
- Add bidirectional communication via interfaces by @godardt in #225
- Release v0.10.2 by @godardt in #226
Full Changelog: v0.10.1...v0.10.2
v0.10.1 (Alpha): Fix stack list display as well as --force flag on node build
What's Changed
- fix: release gate slot before completing goal to eliminate "action already in progress" race by @godardt in #217
- Fix zenohd stdout/stderr to file to prevent pipe buffer deadlock by @godardt in #218
- Improve the output of the
stack listcommand by @godardt in #219 - Fix zombie processes by @godardt in #220
- Release v0.10.1 by @godardt in #221
Full Changelog: v0.10.0...v0.10.1
v0.10.0 (Alpha): Add interface conformance along with fixes to action
What's Changed
- Improve install script by @godardt in #192
- Variants removal by @godardt in #191
- Release v0.9.3 by @godardt in #196
- Interfaces conformances 1 by @godardt in #197
- Interfaces conformances: standard structures by @godardt in #198
- Replace semver tags with non-dotted tags by @godardt in #199
- Refactor pmi-internal by @godardt in #201
- Implement the
conforms_tobusiness logic for interface conformance by @godardt in #200 - Fix interfaces & nodes on the wire by @godardt in #202
- Add depends.on.interfaces business logic by @godardt in #203
- Add launcher bindings business logic by @godardt in #204
- Throw warnings on missing
link_idduringpeppy runby @godardt in #205 - Fix launcher and
node runbindings by @godardt in #206 - Add instance_ids fetch by node name + node tag by @godardt in #207
- docs: sync with PR #209 by @godardt in #210
- Fix action communication by goal ID by @godardt in #214
- Replace raw cancel/result payloads with typed ResultStatus and CancelState by @godardt in #215
- Revision release v0.10.0 by @godardt in #211
- Release v0.10.0 by @godardt in #216
Full Changelog: v0.9.3...v0.10.0
v0.9.3 (Alpha): Fix peppy actions misalignment
What's Changed
- feat: bundle gocryptfs alongside apptainer for encrypted overlay support by @godardt in #193
- Fix action communication misalignment by @godardt in #195
Full Changelog: v0.9.2...v0.9.3
v0.9.2 (Alpha): Add documentation for actions with optional fields
What's Changed
Full Changelog: v0.9.1...v0.9.2
v0.9.1 (Alpha): Fix cancel token during action feedback when the action ends
What's Changed
- docs: sync with PR #184 by @godardt in #185
- Fix Action feedback deadlock by @godardt in #187
- Release v0.9.1 by @godardt in #188
Full Changelog: v0.9.0...v0.9.1
v0.9.0 (Alpha): Add support for launchers repositories
Main changes
schema_versionis nowpeppy_schema: "node_v1"orpeppy_schema: "launcher_v1"depending if it's a node or a launcherpeppy stack launch <launcher_filename>now works with remote launchers. The https://github.com/Peppy-bot/launchers_hub repository is added by default. Runningpeppy stack launch ./<launcher_filename>defaults to a local path, whilepeppy stack launch <launcher_filename>defaults to a launcher in the repositories
What's Changed
Full Changelog: v0.8.5...v0.9.0
v0.8.5 (Alpha): Add ability to use `peppy node sync -r` to use repositories
What's Changed
- Add
node sync -rto synchronize with repositories by @godardt in #181 - Release v0.8.5 by @godardt in #182
Full Changelog: v0.8.4...v0.8.5
v0.8.3 (Alpha): Add wall & sim clock support
What's Changed
- Feature clock sync by @godardt in #176
- Add sim-clock mode with per-instance framework overrides by @godardt in #177
- Release v0.8.3 by @godardt in #178
Full Changelog: v0.8.2...v0.8.3
v0.8.2 (Alpha): Add core node information available to peppylib
What's Changed
- Extract capnp encoding types into new core-node-api crate by @godardt in #172
- Peppylib stack list command implementation by @godardt in #173
- docs: sync with PR #174 by @godardt in #175
- Release v0.8.2 by @godardt in #174
Full Changelog: v0.8.1...v0.8.2
v0.8.0 (Alpha): Add support for repositories
What's Changed
✨ Highlight: Repositories. This release introduces first-class repositories, a new way to tell peppy where to discover nodes. Register local directories, git repositories (with optional branch/tag pinning via --ref), or HTTP endpoints with peppy repo add, then run peppy repo refresh to build a cached index of every available node. Once indexed, nodes can be added by their short name:tag form (e.g. peppy node add uvc_camera:0.1.0) and launched in the node stack without pointing at a path or URL.
- Add repositories feature by @godardt in #161
- Automatically test for docs drift by @godardt in #163
node addcommand now works with node name + tag from repositories by @godardt in #162- Add ability to use
stack launchwith nodes from repositories by @godardt in #164 - docs: sync with PR #165 by @godardt in #166
- docs: sync with PR #165 by @godardt in #167
- docs: sync with PR #165 by @godardt in #168
- Release v0.8.0 by @godardt in #165
Full Changelog: v0.7.0...v0.8.0
v0.7.0 (Alpha): Separate `node add/start` into `node add/build/run`
What's Changed
- Add
node buildstep to workflow by @godardt in #153 - Separate
node addfromnode buildcommands by @godardt in #155 - refactor: rename
start_cmdtorun_cmdby @godardt in #156 - Fix standalone integration by @godardt in #157
- Change
node infoto look up nodes by name:tag by @godardt in #158 - Add
nodecommand shorthands by @godardt in #159 - Release v0.7.0 by @godardt in #160
Full Changelog: v0.6.2...v0.7.0
v0.6.2 (Alpha): Add code and command optimizations
What's Changed
- Code cleanup & optimization by @godardt in #149
- Node sync path by @godardt in #150
- Core node name is now fixed across reboot/reinstallation by @godardt in #151
- Release v0.6.2 by @godardt in #152
Full Changelog: v0.6.1...v0.6.2
v0.6.1 (Alpha): Add support for arrays of objects in message format schemas
What's Changed
- Support arrays of objects in message format schemas by @godardt in #147
- Release v0.6.1 by @godardt in #148
Full Changelog: v0.6.0...v0.6.1
v0.6.0 (Alpha): Add support for node variants
What's Changed
- Create a dedicated
runtimesection to holdlanguage,container,parametersandadd_cmd/start_cmdby @godardt in #136 - Node variants by @godardt in #137
- Docker base images by @godardt in #143
- Fix variants by @godardt in #142
- Add more meaningful output to the
node addoperation by @godardt in #144 - Add variant launchers support by @godardt in #145
- Release v0.6.0 by @godardt in #146
Full Changelog: v0.5.10...v0.6.0
v0.5.10 (Alpha): Add support for installation in containers
What's Changed
Full Changelog: v0.5.9...v0.5.10
v0.5.8 (Alpha): Fix architecture mismatch in Apptainer binary
What's Changed
Full Changelog: v0.5.7...v0.5.8
v0.5.7 (Alpha): Official support for more Linux distros
What's Changed
Full Changelog: v0.5.6...v0.5.7
v0.5.6 (Alpha): Add support for mounted devices in containers
What's Changed
- refactor: simplify PR 128 by @claude[bot] in #131
- Add extra args support for apptainer build/run and lima shell by @godardt in #128
- Add documentation for llms by @godardt in #132
- v0.5.6 by @godardt in #133
Full Changelog: v0.5.5...v0.5.6
v0.5.5 (Alpha): Fix issues with installation script on some systems
What's Changed
- Improve install scripts by @godardt in #126
- Containers mounts with runtime vars by @godardt in #125
- fix: switch container images to standard registries by @godardt in #129
- v0.5.5 by @godardt in #130
Full Changelog: v0.5.4...v0.5.5
v0.5.0 (Alpha): Bidirectional communication support
What's Changed
- Rework peppy structure by @godardt in #102
- Separate DAG from communication by @godardt in #104
- Fix/actions revamp by @godardt in #106
- Add bidirectional communication by @godardt in #107
- Fix node add with existing instances by @godardt in #109
- Improvement launch files by @godardt in #112
- Fix yanked file by @godardt in #114
- Optimize modules by @godardt in #113
- Release 0.5.0 by @godardt in #115
Full Changelog: v0.4.0...v0.5.0
v0.5.1 (Alpha): Add more explanatory logs for add_cmd and start_cmd failures
What's Changed
- Include command name in spawn and execution failure error messages by @godardt in #116
- Add more explanatory logs for add_cmd and start_cmd failures by @godardt in #117
Full Changelog: v0.5.0...v0.5.1
v0.5.3 (Alpha): Fix Linux .so Python lib not available for x86_64 systems
What's Changed
- Fix Linux .so Python lib not available for x86_64 systems by @godardt in #121
- Release v0.5.3 by @godardt in #122
Full Changelog: v0.5.2...v0.5.3
v0.5.4 (Alpha): Add various fixes to the install script
What's Changed
- Various fixes to the install script by @godardt in #123
- Add various fixes to the install script by @godardt in #124
Full Changelog: v0.5.3...v0.5.4
v0.4.0 (Alpha): Containers support
What's Changed
- Feature/fix cross compilation by @godardt in #90
- Add fakeroot pre-flight check and service stop/uninstall commands by @godardt in #91
- Final implementation for containers by @godardt in #88
- fix: auto-create host-side bind mount source directories by @godardt in #92
- Replace fixed timeouts with idle + max timeout model for node by @godardt in #93
- Fix python libs by @godardt in #95
- Optimize codegen by @godardt in #96
- Fix containers warnings by @godardt in #97
- fix: move DEBIAN_FRONTEND export to %post section in apptainer templates by @godardt in #98
- rename: daemon-node crate and related identifiers renamed to core-node by @godardt in #99
- Add Lima VM cross-compilation for multi-target releases by @godardt in #100
- Release v0.4.0 by @godardt in #101
Full Changelog: https://github.com/Peppy-bot/peppy/commits/v0.4.0
v0.3.6 (Alpha): Optimize PeppyOS internal behavior
- sccache support
- Optimize
node addcommand - Update Python node template to use direct venv execution
- Add external JSON parameter loading for standalone nodes in Python and Rust
v0.3.5 (Alpha): Trim Rust nodes size
v0.3.4 (Alpha): Optimize crates boundary crossing with Rust nodes
v0.3.0 (Alpha): Python support
- Add python support
- Rust codegen refactor
- Rename master-node to daemon-node
- Remove extra deps in nodes
v0.3.1 (Alpha): Add Python support with macOS (aarch64) and Linux (x86_64/aarch64) support
- Add python support
- Rust codegen refactor
- Rename master-node to daemon-node
- Remove extra deps in nodes
v0.3.2 (Alpha): Fix missing binaries for Python
v0.3.3 (Alpha): Support dataclass instances in with_parameters method in Python
v0.2.17 (Alpha): Fix for names-generator
v0.2.18 (Alpha): Update all dependencies
v0.2.15 (Alpha): Add interfaces integrity
v0.2.13 (Alpha): Add dependency check to add command
v0.2.14 (Alpha): Add user defined timeouts to add/start and launch cmd
v0.2.12 (Alpha): Fix add_cmd and start_cmd user vars
Fixed user variables not being properly applied in add_cmd and start_cmd operations.
v0.2.11 (Alpha): Update docs & add optimizations
Implement internal code optimizations
v0.2.10 (Alpha): Initial alpha release of PeppyOS
Features
- Core node system with Rust support
- Topic-based communication between nodes
- Service and action patterns
- Parameter system for node configuration
- Launch files for multi-node orchestration
- Node stack management
- Standalone node execution mode
- CLI tools for project management