plugin-candy-kind
| Placement | compiled-in (in-process) |
| Source | github.com/opencharly/plugin-candy-kind/candy/plugin-candy-kind |
| Version | 2026.182.1600 |
| Candy | plugin-candy-kind |
This plugin is listed in charly/charly.yml’s compiled_plugins:, so its providers are compiled into the charly binary and register in-process.
Providers
Section titled “Providers”The reserved words this plugin serves:
candy— kind class
What it does
Section titled “What it does”The candy box⊻layer factory KIND — the LAST structural kind — relocated into a candy
(C2-candy; formerly the built-in candyKind in charly/plugin_candy.go). A candy: node is
EITHER a full IMAGE (base:/from: → uf.Box, the former box:) OR a LAYER fragment (→
uf.Candy). Its value is RICH + core-referencing (#Candy/#Box), so — like substrate — 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 BOOTSTRAP-CRITICAL core candyIsImage +
buildCandy (the single decode source that STAYS core — the discovered-candy pre-check
calls it directly), validates its value against the KEPT #CandyValue core def, and threads
the result in op.Env; this plugin’s OpLoad ECHOES it and the host folds the echo into
uf.Box / uf.Candy, byte-equivalent to the former in-proc candyKind decode. COMPILED-IN (in
the embedded compiled_plugins:) — which DISSOLVES the historical bootstrap-cycle blocker: a
compiled-in plugin registers at init, before any load, so it has NO fetch/build cycle. It
is the candy-KIND plugin; the sibling candy/plugin-candy is the DISTINCT command:candy
CLI authoring plugin. Also serves out-of-process via cmd/serve.
Parameter schema
Section titled “Parameter schema”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.
schema/candykind.cue
Section titled “schema/candykind.cue”// plugin-candy-kind'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 structural `kind: candy` surface and the two value shapes the host pre-decodes. The rich `candy:` VALUE itself is validated HOST-SIDE against the kept `#CandyValue` def, not decoded here.#CandyKindPlugin: { // The structural kind word this plugin serves. kind: "candy"
// The two shapes the host pre-decodes and threads in op.Env.Standalone.Shape: // a full IMAGE (base:/from: → uf.Box) or a LAYER fragment (→ uf.Candy). shapes: ["candy-image", "candy-layer"]
// What the plugin does, in one line (the public-docs surface). contract: string & !=""}See also the candy reference for this candy’s install surface.