You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Aperio ships 7 connectors, 7 SIEM destinations, and (post-#50) 6+ workflow destinations. Every additional integration today requires a PR into core, code review by Aperio maintainers, a release, and a deploy. That model does not scale to the long tail:
The HashiCorp Terraform-provider model is the canonical answer: define a stable plugin interface, let the community ship plugins out-of-tree, build a registry. Aperio's bet is that an OSS-licensed plugin ecosystem outruns every closed SSPM's first-party integration roadmap by an order of magnitude.
This is the platform play. The first 19 issues build the product; this one builds the moat.
Goals
Plugin interface (gRPC over stdin/stdout, à la terraform-plugin-go) for three extension points:
Connector plugins — new providers (auth, sync, event normalization).
Remediation handler plugins — new provider-side write actions.
SIEM / workflow destination plugins — new outbound transports.
Plugin host in the Go server that discovers, fork/execs, supervises, and tears down plugin binaries.
Plugin SDK packages — Go (first-class) and Python (for the data/security engineering community) helper libraries that hide the gRPC plumbing.
All payloads use Aperio's existing event/finding envelopes from proto/aperio/contracts/v1/.
Plugin host
internal/pluginhost/ Go package:
Reads ~/.aperio/plugins/ (or configurable directory) for plugin binaries on startup.
For each plugin, fork/execs the binary and establishes a gRPC connection over its stdout/stdin (HashiCorp go-plugin library is the reference impl — battle-tested).
Maintains a registry of available connectors / remediations / destinations the host has discovered.
Heartbeats; restarts crashed plugins with exponential backoff; circuit-breaks repeatedly-failing plugins.
PR-reviewed contributions to the registry; CI verifies Sigstore signatures + plugin manifest schema.
Phasing
Phase
Scope
P1
Plugin interface protos; plugin host using go-plugin; Go SDK; project template + aperio plugin init; one reference plugin (Box connector) to dogfood the SDK
Plugin compatibility across Aperio versions — semver the plugin interface; minor-version-skew safe, major-version-skew enforced at load time.
How do plugins persist state? Recommend: stateless plugins + writes back through the host's existing repositories. Stateful plugins (caches, watermarks) get a host-provided KV interface, never their own storage.
Auth model for plugin → external APIs — plugins receive scoped tokens minted by the host per-invocation, never long-lived secrets.
Problem
Aperio ships 7 connectors, 7 SIEM destinations, and (post-#50) 6+ workflow destinations. Every additional integration today requires a PR into core, code review by Aperio maintainers, a release, and a deploy. That model does not scale to the long tail:
The HashiCorp Terraform-provider model is the canonical answer: define a stable plugin interface, let the community ship plugins out-of-tree, build a registry. Aperio's bet is that an OSS-licensed plugin ecosystem outruns every closed SSPM's first-party integration roadmap by an order of magnitude.
This is the platform play. The first 19 issues build the product; this one builds the moat.
Goals
terraform-plugin-go) for three extension points:aperio plugin init github.com/acme/aperio-plugin-fooproduces a buildable skeleton.registry.terraform.io).Non-goals
Proposed design
Plugin interface (gRPC schema)
All payloads use Aperio's existing event/finding envelopes from
proto/aperio/contracts/v1/.Plugin host
internal/pluginhost/Go package:~/.aperio/plugins/(or configurable directory) for plugin binaries on startup.go-pluginlibrary is the reference impl — battle-tested).Plugin lifecycle in the product
aperio plugin install <registry-ref>(depends on Public API surface: tokens, OpenAPI, SDKs, Terraform provider, aperio CLI #52 CLI) — pulls signed binary from the registry, verifies signature, drops into the plugin directory.Project template
Generates:
Plugin SDK
The SDK handles transport, error envelope conversion, panic recovery, structured logging conversion, and Aperio envelope encoding so plugin authors write business logic only.
Registry
A published JSON manifest at
https://registry.aperio.io/plugins.json(initially a flat list, can grow into a real registry later):{ "version": 1, "updated_at": "2026-06-06T00:00:00Z", "plugins": [ { "id": "acme/box-connector", "kind": "connector", "versions": [ { "version": "1.0.0", "download_url": "https://github.com/acme/aperio-plugin-box/releases/.../linux-amd64.tar.gz", "sha256": "...", "sigstore_bundle": "...", "publisher": {"name": "acme", "verified": true} } ] } ] }PR-reviewed contributions to the registry; CI verifies Sigstore signatures + plugin manifest schema.
Phasing
go-plugin; Go SDK; project template +aperio plugin init; one reference plugin (Box connector) to dogfood the SDKaperio plugin install/list/remove; Sigstore signing pipeline; registry JSON publicationOpen questions
References
IntegrationConnection,SiemDestination,WorkflowDestination(Workflow & ticketing integration: JIRA, Linear, Slack, Teams, PagerDuty, SLA tracking #50),remediationActionDefinitions(auto-registers plugin actions into the existing catalog).aperio plugin install).