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.
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.
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.
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
Plugins can implement any of the following: