-
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.
-
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.
-
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.
-
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
-
Path 1
Author your first theme
Ship a brand-true theme — fork the default, author a sample, lock the layout rules. Five docs, half a day, one theme dir you can ship to production.
-
Path 3
Wire BuilderJS into a real backend
Move from local-only Save to a production stack — MySQL persistence, S3 uploads, session auth, multi-tenant isolation, multi-language locale packs. Three docs, one shippable SaaS shape.
-
Path 4
End-to-end — read everything in shipping order
The full sequence — every doc in dependency order. Spend two to three days; you will end with a production-grade theme + extension + backend + locale pack ready to ship to your first paying buyer.