Extend Elementor V4 (router)
Source of truth: docs/atomic-builder/README.md. Skills are checklists that link there — do not duplicate the doc tree. Runnable examples: docs/atomic-builder/examples/. Consolidated third-party demo: examples/example-plugin/.
This router is not an implementation capability. It does not define hooks, paths, or a shippable outcome — it only routes intent to a child skill with a binary External or Internal scope.
Checklist
- Confirm v4 context: experiments
e_atomic_elements(and oftene_opt_in_v4) — see getting-started/experiments.md. No separatee_classesexperiment — global-classes gates one_atomic_elementsonly (modules/global-classes/module.php); trust experiments.md over global-classes/overview.md on this point. - Map intent using the decision table below.
- Read the matching child skill under
.cursor/skills/and follow its workflow. - Read linked
docs/atomic-builder/...pages before implementing.
v3 vs v4 warning
The marketplace skill elementor-widget-patterns is v3 only (Widget_Base, Controls_Manager, content_template). For atomic / v4 work, use the child skills below — not legacy widget patterns.
Angie's extend-elementor guide (surfaced inside the code-snippet MCP tool, not this repo) is also v3 only — legacy hooks like elementor/element/{name}/{section}/before_section_end. It has no atomic/v4 coverage; for v4 use the decision table below and the elementor/atomic-widgets/* hooks documented in the child skills.
Decision table
Scope = who can ship the full documented outcome: External (3rd-party plugin, no Core changes) · Internal (requires a PR against Core). Partial external APIs do not change classification. Full split: docs/atomic-builder/skills-scope.md.
| Intent | Child skill | Scope | Primary docs |
|---|---|---|---|
| New widget or container element | create-atomic-widget | External | atomic-widgets/authoring-widgets.md |
$$type, prop schema, validation, transformers |
extend-prop-types | External | fundamentals/prop-types.md, transformers.md |
| WordPress data source / dynamic binding | add-dynamic-tag | External | dynamic-tags/extending.md |
| Editor UI, slots, in-editor MCP tools | add-editor-package | External | editor-packages/extending-editor.md |
| Design tokens / kit variables | extend-variables | External | variables/types.md |
| Legacy CSS → atomic style props | internal-extend-css-converter | Internal | css-converter/extension.md |
| Motion / interactions tab (full stack) | internal-extend-interactions | Internal | interactions/editor.md |
Cross-skill edges
- Style prop types — start with extend-prop-types; if legacy CSS import must map the new key, also plan internal-extend-css-converter (Internal).
- PHP MCP abilities (host integration, REST) — see mcp/overview.md; not add-editor-package (that skill is in-editor JS MCP only).
- Built-in element catalog changes — Core-only; external plugins register their own widgets/elements only.
Scope: External vs Internal
Before implementing, confirm the child skill's scope — a plugin-only approach cannot ship an Internal capability.
- External — third-party plugin in its own repo: subclass + WordPress hooks/filters documented in child skills; own npm package or hand-built editor JS bundle. Do not modify Elementor Core.
- Internal — requires changing Elementor Core (
modules/,packages/packages/core/) via an accepted PR. Pro companion only for Pro-gated interaction fields lives in the elementor-pro sibling repo — not in Core and not in a third-party plugin. Editor-only partial integrations via public hooks do not satisfy Internal skills when the full outcome includes published-page behavior.
Full classification: docs/atomic-builder/skills-scope.md.
No matching skill?
If intent is not in the table, read docs/atomic-builder/README.md section index. There is no skill yet for these — use docs directly or stop if a Core PR is required:
- Migration — migration/README.md → prop-type-migrations.md
- Components — components/README.md → overview.md
- Global classes — global-classes/README.md → overview.md
- Architecture / debugging — architecture/README.md → packages-map.md
Next step
Pick one child skill from the table, open its SKILL.md, and execute that checklist end-to-end.