Skip to content

plugin-builder-npm

Placement runtime (out-of-process over gRPC)
Source github.com/opencharly/charly/candy/plugin-builder-npm
Version 2026.182.0200
Candy plugin-builder-npm

This plugin is not listed in charly/charly.yml’s compiled_plugins:. It is not part of the shipped binary: charly builds and loads it out-of-process over gRPC when a plan references one of its words (the coexist path).

The reserved words this plugin serves:

  • npm — builder class

OUT-OF-TREE charly plugin serving the npm builder’s BUILD-TIME multi-stage (OpResolve)

  • its DEPLOY-TIME IR shim. A standalone Go module dispatching to the shared sdk/kit logic (R3): OpResolve (→ kit.BuilderResolve — the FROM <builder> AS npm-build stage + COPY artifacts, C10, no longer the core embedded vocabulary), OpCollectContext (npm records no stage context — globals are read from package.json host-side at install time) and OpReverse (npm → npm-uninstall-g when globals are known). The deploy-time pair runs in the host build PRE-PASS, BEFORE the pure BuildDeployPlan compile, so the compiler never dials a plugin. Selection stays DETECTION (a candy’s package.json), never an authored external_builder:.

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.

// Self-contained input schema for the builder:npm capability — references no base def, so it
// compiles standalone (the SDK's serve-side compile). A builder authors no plugin_input (it is
// TRIGGERED by detection — a candy's package.json — never by an authored field), so this def carries
// no fields; it ships so the schema travels with the plugin (non-empty, base ++ plugin splice).
#NpmBuilderInput: {
}

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