Skip to content

Builders

shipped 1.0.0

A builder is how cwp reads and writes a page builder’s design system. Two ship: bricks and none. elementor validates in cwp.yml and refuses at run time with the reason. A schema cannot say “designed, not built”, so the dispatcher says it instead.

builder:
  id: bricks
  options:
    child_theme: example-child
    export_dir: bricks
    wp_user: 1

builder.id names the page builder rather than switching one on. none is plain WordPress: Gutenberg, classic, a block theme. It is a supported configuration, not a degraded one.

What that looks like in a run: cwp pull carries six artifacts, and the design system is one of them. A project whose builder has no design system skips that artifact in silence rather than reporting it absent on every run. The absence is a fact about the project, not a finding about the run. Nothing else changes.

cwp refuses the older bricks: { enabled } block and names the replacement in the fix hint.

Why the builder’s name is in the artifact

The design system travels as --only bricks and lives in bricks/. The builder’s own commands read cwp bricks audit and cwp bricks post-types.

A provider is 1:1 with an environment. A builder is 1:1 with nothing. Bricks is a theme; Elementor and Oxygen are plugins, and one site can run several with different pages on each. So a name that did not say which builder would have to guess, or take a flag to disambiguate.

bricks/ does not hold a generic design system either. It holds Bricks-format JSON; Elementor’s equivalent is a kit stored as a post. A directory called design-system/ would promise a portability that does not exist.

Their surfaces differ in the same way: Elementor has no abilities API, so the whole ability transport has no counterpart there.

What the seam guarantees

Nothing outside tools/builders/ compares against a builder id. A structural test fails the build on one, with a single permanent exception: cwp init has to ask which builder this project uses before a builder exists to ask.

The visible consequence is cwp doctor: it holds no Bricks-specific knowledge of its own. It asks whichever builder the project configured and splices in what comes back. So a builder: none project gets no Bricks checks at all, rather than a screen of skips.