Skip to content

plugin-substrate

Placement compiled-in (in-process)
Source github.com/opencharly/plugin-substrate/candy/plugin-substrate
Version 2026.196.0600
Candy plugin-substrate

This plugin is listed in charly/charly.yml’s compiled_plugins:, so its providers are compiled into the charly binary and register in-process.

The reserved words this plugin serves:

  • android — kind class
  • kindcluster — kind class
  • kubernetes — kind class
  • kubevirt — kind class
  • local — kind class
  • pod — kind class
  • vm — kind class

The SUBSTRATE structural deploy KINDS — pod / vm / kubernetes / local / android / kubevirt / kindcluster — relocated into ONE candy (C2-substrate; formerly the shared built-in standaloneKind). Each substrate kind is BOTH a standalone TEMPLATE (a bare vm:/pod: block → the typed template map uf.Pod/uf.VM/…, the PRIMARY VM authoring form) AND a DEPLOY (from:/image: cross-ref or resource members → uf.Deploy). Its value is RICH + core-referencing (#Vm/#Deploy/#LibvirtDomain/…), so — unlike group’s small self-contained #GroupInput — it cannot be re-decoded from op.Params nor validated by a self-contained plugin schema. So the HOST pre-decodes the CANONICAL node via the core loader (buildDeployNode / decodeNodeValue — the single decode source of truth), validates its value against the KEPT #Value core def, and threads it in op.Env; this plugin’s OpLoad ECHOES it and the host folds the echo into uf.Deploy (deploy) or the typed template map (template — the C2-substrate TEMPLATE fold arm extending F5’s deploy-only fold), byte-equivalent to the former in-proc standaloneKind decode. COMPILED-IN (in the embedded compiled_plugins:), like the tier-1 kinds and group, because these are core deploy primitives every box/submodule must always resolve; also serves out-of-process via cmd/serve. P14a added the COLLECTOR OpStatusCollect on the same kind-provider Invoke (dispatched by word pod/vm/kubernetes/local/android/kubevirt/kindcluster): the cleanly-movable status collectors — pod live (snapshot + live mounts + tool probes) + local (install-ledger) + the probes — relocated here from charly core, reached by the host’s charly status fan-out; the deploy-cone-coupled enrichment + the vm/kubernetes/kubevirt/android collectors live here too (relocated from core in K5). kubevirt is the 6th deploy substrate (a KubeVirt VM on a cluster), declaring the ssh venue WITHOUT exclusive_venue + a deep OpValidate (the source-arm XOR + GPU resource XOR).

The CUE schema below is the authoritative grammar for this plugin’s input. It is the same single source that generates the plugin’s Go parameter types and answers the runtime Describe RPC, so this page cannot disagree with either.

// plugin-substrate's OWN self-contained CUE schema — the SINGLE SOURCE for this plugin's
// served declaration surface (there is no schema-less plugin: every plugin ships a
// non-empty schema over Describe).
//
// SELF-CONTAINED and PACKAGE-LESS: it references no base def and carries no package
// clause, so it compiles STANDALONE — the property the SDK's serve-side compile needs
// and the property that lets the host splice `base ++ plugin` at the load gate
// (registerPluginUnitSchema); a self-contained schema that will not splice is a LOUD
// load failure.
//
// NO GO CONSUMER: the plugin declares no typed `plugin_input` (its authored input is
// its pass-through CLI grammar), so this schema generates NO `params` package and has
// NO `cue exp gengotypes` artifact — it is the SERVED documentation/config surface,
// not a code-generation source.
//
// It DOCUMENTS the substrate provider's kind/command/verb words and the deploy traits they carry. The rich substrate VALUES are validated HOST-SIDE against the kept `#<Kind>Value` defs (each capability declares `InputDef:""`), not decoded here.
#SubstratePlugin: {
// The structural deploy kind words this provider serves.
kinds: [...string]
// The command words this provider serves (reap-orphans).
commands: [...string]
// The internal-only verb words this provider serves (status-fanout).
verbs: [...string]
// What this provider does, in one line (the public-docs surface).
contract: string & !=""
// The configuration surface: env var names the collectors read.
config?: [string]: string
}

See also the candy reference for this candy’s install surface.