Skip to content

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.

The reserved words this plugin serves:

  • candy — kind class

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.

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-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.