Extensions
Integrations, executors and toolbelt operations, the first-party ones included, run as separate processes that speak a JSON-RPC protocol over stdio. A package is a directory holding a manifest, an executable and a certification fixture.
A package can contribute integrations, executors, toolbelt operations, setups and doctor checks. Once installed, its types are known to config check. To write one, start with Build your first extension.
open-conduit extension new my-extension # start a package repository whose make check passes first timeopen-conduit extension check ./my-extension # lint it without starting it; says what to change for each problemopen-conduit dev ./my-extension # run it against a throwaway daemon and web view, restarting it on each changeopen-conduit extension inspect ./my-extension # check a package offlineopen-conduit extension certify ./my-extension # run the conformance suite against itopen-conduit extension install ./my-extension # takes effect at the next serveopen-conduit extension install https://example.com/my-extension-darwin-arm64.tar.gz --sha256 <hex>open-conduit extension listopen-conduit extension update ./my-extension # the replaced release is kept; also takes an archiveopen-conduit extension rollback my-extensionopen-conduit extension remove my-extension # refused while the config uses itA package that needs a host service beyond its own surfaces, such as receiving every scope’s telemetry events, running setup probes or proposing configuration, declares a permission for it. inspect, install and list show each permission and what it allows, and the daemon refuses a call the manifest did not declare.
When install, start or check refuses a package, the message carries a code; troubleshooting says what to change for each. See extension packaging for writing one with the Go SDK, and the extension protocol for the wire format.