blob: 48f8a3401f9dbb5002d1a55682b8002495afe482 [file] [view]
# Aspect CLI Plugins
NB: plugin support is still in design phase, the documentation below may not yet
apply.
The plugin system is inspired by the excellent system developed for HashiCorp's
`terraform` CLI.
## High-level design
A plugin is any program with a gRPC server that implements our plugin protocol.
We provide convenient support for writing plugins in Go, but this is not
required. Plugins are hosted and versioned independently from the aspect CLI.
The aspect CLI process spawns the plugin as a subprocess, then connects as a
gRPC client to it. The client and server run a negotiation protocol to determine
version compatibility and what capabilities the plugin provides.
## Plugin configuration
In your [aspect CLI config], list the plugins you'd like to install. You can use
semver ranges to constrain the versions which can be used. When aspect runs, it
will prompt you to re-lock the dependencies to exact versions if they have
changed. We also verify the checksum of the plugin contents against what was
first installed.
> The locking semantics follow the [Trust on first use] approach.
[trust on first use]: https://en.wikipedia.org/wiki/Trust_on_first_use
[aspect cli config]: TODO
## Plugin discovery
TODO: where we search to resolve plugins on disk or fetch them from network
TODO: how to author a local plugin and resolve it for development
## Capabilities
Plugins can implement any of the following:
- BuildComplete