Skip to content

v0.16.0

Renames interfaces to contracts, tightens `depends_on` slot validation, and fixes macOS container builds.

Released on July 13, 2026

Breaking changes

  • The conforms_to manifest field has been renamed to implements as part of a broader rename of "interfaces" to "contracts"; rename conforms_to to implements in your peppy.json5 and update any "interface" wording to "contract".
  • Dependency slots (depends_on) now require a single producer each, replacing the previous from_any binding model, and peppy now fails validation whenever a depends_on slot 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 $HOME and 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.

View all releases