Skip to content
Path 2 ~one to two days · 4 docs · ~146 min reading

Extend the engine with custom code

Ship a custom Element, Control, and Widget — the three extension points the engine exposes. By the end, the editor is bent to YOUR domain (not the email-marketing default).

  1. Extend the engine C1 ⭐ Copy-along ~60 min

    Build a custom Element

    The deepest extension — subclass `BaseElement`, register, ship a Countdown that survives `getData()` ↔ `load()` round-trip. Once this works, every other extension makes sense.

  2. Extend the engine C2 ⭐ Copy-along ~45 min

    Build a custom Control

    Add a custom Settings-panel input — extend `ColorPickerControl` with brand swatches, wire via `getControls()`. Lock the `_applyValue` vs `_notify` footgun before you hit it.

  3. Extend the engine C3 ⭐ Copy-along ~30 min

    Build a custom Widget

    Drop a custom block in the palette — subclass `BaseWidget`, register inside the `load()` callback, style with `[widget-class]`. The fastest of the three extensions.

  4. Extend the engine C4 ~11 min

    Custom overlays (advanced)

    Per-element on-canvas affordances — resize handles, crop popovers, drag toolbars. Read once you need an interaction the Settings panel can't express.

Outcome A custom block class with a custom Settings panel rendering inside your Builder.

Other paths