Skip to main content
Version: 3.x

Feature: the customization layer

Version
3.x
Updated
View markdown

Extend CBX without forking it. Most configurator projects don't fail at launch — they fail at the second update, when a year of ad-hoc core edits collides with a new release. CBX's answer is a supported, upgrade-safe customization layer: one directory (data/customization/ in the component; on WordPress its own folder next to the plugin, configbox-customization/) that holds all of a site's own code, that the framework resolves at well-defined extension points, and that updates never touch. Your customizations and our releases stay out of each other's way, by design.

This page is the showcase; the engineering documentation lives in the customization track, starting with the overview & extension-point map.


What you can build — every extension point is a supported contract

You want to…The mechanismThe guide
Restyle or restructure any screenTemplate overrides (your file shadows the core template)Views & templates
Add fields to stock admin forms/listsModel property injection (merged, not copied)Extending stock models
Invent a new admin field type/widgetCustom Kenedo propertiesCustom properties
React to orders, logins, saves…Event observers (additive, runs alongside core)Events & observers
Add a payment providerPSP connector foldersPayment connectors
Add new "if…" vocabulary to the rule editorCustom rule condition typesCustom rule conditions
Ship frontend behavior/stylingCSS + AMD JS modules (configbox/custom namespace, no build step)Assets & AMD
Change any displayed textPer-language override filesLanguage overrides
Add operator/cron toolingCustom CLI commands (wp configbox custom <command>)Custom CLI commands
Evolve your own DB schemaA customization migration track, versioned like core'sMigrations
Change core behavior itself (escape hatch)System overrides, eagerly loaded at bootSystem overrides & boot hooks

New controllers, models and views get their own slots too — the overview maps every mechanism, how each one resolves in code, and includes a decision guide ("I want to change X → use mechanism Y") that always steers you to the smallest mechanism that works.

Why it survives updates

  • One directory, never shipped, never overwritten. Updates replace core files; they do not know or care what is in data/customization/. Your code is yours — it is not even part of the CBX release package.
  • Contracts, not patches. Each extension point is a naming/return-value contract the framework resolves at runtime (shadow, merge, register, or boot-time pre-emption — documented per mechanism). You are not maintaining diffs against our source.
  • Additive mechanisms first. The decision guide prefers mechanisms that combine with core (observers, property injection, language overrides) over ones that replace it — so most customizations cannot drift out of sync at all.
  • Breaking changes are documented as a contract, too. When a major release does change an extension point, the migration playbooks record every breaking change and the conversion procedure per customization kind.

Spotlight: your own CLI commands, with a safety guarantee

The newest extension point shows the design philosophy well. Drop one filecli/commands.php in the customization layer — and your site gains its own commands next to the stock CBX CLI suite, under a reserved namespace:

wp configbox custom # list the commands installed on this site
wp configbox custom order-export 30 --format=csv

Your command runs with CBX fully booted (database, models, helpers all available), receives parsed arguments and options, and returns an exit code cron/deploy scripts can gate on. And the isolation is deliberate: the file is loaded only when the custom namespace is invoked, behind a catch-everything guard — so a broken custom command (even a PHP parse error in the file) can never take down the stock commands you would need to diagnose and recover. Stock tooling stays solid no matter what the customization layer does.

Contract, worked example and conventions: Custom CLI commands.

Who this is for

  • Agencies delivering customized stores that must keep receiving product updates.
  • In-house developers wiring CBX to an ERP, a PIM, or a bespoke fulfillment flow (observers + custom CLI commands cover most integration shapes).
  • AI-assisted teams: the whole documentation set — these contracts included — ships inside the component, so an assistant pointed at app/docs/ works against the same contracts you do.

Back to the Features overview.