Component vs integration vs pack
MemQL has exactly three extension words. Do not invent a fourth.
| Word | Means | Lives |
|---|---|---|
| component | Engine internals — DSL lexer/AST, HTTP/gRPC servers, bus, identity, env registry | component/ |
| integration | Talk to other databases or services. Exposes DSL-callable capabilities | integrations/ |
| pack | Client-agnostic product feature: a Go integration plus a .memql DSL bundle | packs/ (the storefront packs every engine image links); examples/ (reference packs for Plugin SDK v1, such as examples/referencepack) |
Intake "plugin" means pack. memql.RegisterPlugin is the Go registration primitive a pack (or a core integration) calls at init(). It is not a fourth runtime, and there is no runtime (non-compiled) loading of Go. The VS Code tooling (editors/vscode/) is the extension — editor tooling, not a fourth extension kind, and never "the plugin".
dsl/todos, dsl/calendar, and dsl/campaigns are core. Packs cannot shadow them.
A connector is not a fourth word. It is an integration that
implements the connector contract (component/memql/sync), which is what
lets a concept name it in @origin or @mirroredTo and be filled or
drained by it. The test is the same one integrations already pass — it
talks to somebody else's system — and the contract is what makes that
system's ownership of the data expressible. See
data origins.
The worked example is Shopify, which exists as TWO artifacts on either side of the line:
integrations/shopifyis the integration — it speaks the Storefront/Admin APIs and receives inbound webhooks. It talks to somebody else's system; that is the whole test.examples/shopifypackis the pack — the client-agnostic product feature layered on that integration (console surfaces for shop, secrets, sync). The thin product index stays core (dsl/shopify).
Reviews is a pack only (packs/reviewspack): a product feature with no external system behind it, so it has no integration half. The thin product index and checkout URL live on the engine side of that line — merchandising stays on Shopify; checkout stays cart.checkoutUrl.
"Module" is the umbrella, not a fourth word
When the platform needs a collective term over these kinds — the console's management surface, the engine's inventory reporting — the word is module. A module is any of: a component, an integration, a pack, or a node-type module (a deployment unit of the mesh, such as edge). It names the group, never a new kind of thing, and each kind keeps its own enablement mechanism. The full mental model, including what enabling/disabling means per kind, is Modules.
See Plugin SDK for the Go contract and Building a pack for the walkthrough.