docsConcepts

Component vs integration vs pack

MemQL has exactly three extension words. Do not invent a fourth.

WordMeansLives
componentEngine internals — DSL lexer/AST, HTTP/gRPC servers, bus, identity, env registrycomponent/
integrationTalk to other databases or services. Exposes DSL-callable capabilitiesintegrations/
packClient-agnostic product feature: a Go integration plus a .memql DSL bundlepacks/ (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/shopify is 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/shopifypack is 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.