Plugin ABI
Built-in plugins live under plugins/*.d and register at load time.
The host contract is one project model + plugin operations. Each plugin maps installer.kdl (plus extras {}) into its format and may shell out to a compiler. There is no shared package engine that speaks every format.
Host operations
| Method | Role |
|---|---|
|
Write |
|
Emit, then invoke |
|
Advertise type-specific fields for a unified UI |
|
Filename under |
|
File handoff into a third-party IDE |
CLI mirrors this: ibex emit, ibex build, ibex plugins describe, ibex plugins install-tool, ibex plugins open-gui.
Subprocess protocol (sketch)
Place ibex-plugin-<id> on PATH (legacy easy-installer-plugin-<id> may be accepted later). Host revisions call:
-
--describe→ JSON (id, displayName, targets, tool, gui, installPlaybook, extrasSchema) -
--build --project=<dir> --out=<dir> -
--emit --project=<dir> --out=<dir> -
--install-tool [--dry-run] -
--open-gui --project=<dir> --out=<dir>
Designer handoff
Open-gui emits sources, then launches the vendor GUI on that file. Inno/NSIS wizards have no product-spec injection API. After a designer edit, the emitted script is the overlay; common fields stay in installer.kdl.
Scriptbook
Ibex does not vendor a second tool installer. scripts/install-scriptbook.* bootstraps the Scriptbook CLI; playbooks under playbooks/ are ordinary .cmk documents other apps can run.
msi-generator dual role
The msi and msix plugins treat msi-generator as both engine and extension: Ibex owns the project UX; msi-generator owns CFB/CAB/table and MSIX ZIP emission.