Plugins Overview¶
Amadla uses plugins to extend core tools with external integrations. Each plugin is a standalone CLI executable that communicates via stdin/stdout/stderr following the Plugin Protocol.
Plugins can be written in any language — Go, Python, Bash, or anything that follows the protocol. Go framework libraries are available as optional convenience wrappers.
Plugin Categories¶
| Category | Host Tool | Naming | Count | Active | Planned/Stubs |
|---|---|---|---|---|---|
| Raise Plugins | raise | raise-* |
10 | 3 | 7 |
| Doorman Plugins | doorman | doorman-* |
16 | 1 | 15 |
| Judge Plugins | judge | judge-* |
3 | 1 | 2 |
| Weaver Plugins | weaver | weaver-* |
4 | 0 | 4 |
| Total | 33 | 5 | 28 |
Naming Convention¶
Plugins use the <tool>-<name> pattern, where the prefix matches the host tool name:
doorman-vault— Doorman plugin for HashiCorp Vaultjudge-application— Judge plugin for application validationweaver-jinja— Weaver plugin for Jinja2 templates
Tools discover plugins by scanning $PATH for binaries matching their prefix.
Plugin Protocol Summary¶
Every plugin must implement:
<plugin> info # JSON metadata (name, version, supported entities)
<plugin> <verb> [flags] # Business logic
Standard I/O:
| Channel | Purpose |
|---|---|
| stdin | Entity data (YAML or JSON, auto-detected) |
| stdout | Result data (-o table|json|yaml) |
| stderr | Diagnostics and errors |
| exit code | 0 success, 1 failure, 2 usage error |
See Plugin System Architecture for the full protocol specification.
Go Frameworks (Optional)¶
| Framework | For | Provides |
|---|---|---|
| LibraryDoormanFramework | Doorman plugins | Secret-fetching boilerplate, output formatting |
| LibraryJudgeFramework | Judge plugins | Validation boilerplate, pass/fail reporting |
| — | Weaver plugins | No framework yet (direct protocol implementation) |
These frameworks are convenience wrappers that reduce boilerplate for Go authors. They are not required — any language that implements the protocol works.
Development Status¶
Active plugins serve as reference implementations:
- raise-libvirt — Reference Raise plugin (Go) — local KVM/QEMU VMs
- raise-virtualbox — Raise plugin for VirtualBox (Go)
- raise-wsl — Raise plugin for WSL2 (Go)
- doorman-keepassxc — Reference Doorman plugin (Go)
- judge-application — Reference Judge plugin (Go)
raise-xen is the next planned plugin — required for building the Amadla Linux distro.