Alpha Version: You are viewing the ALPHA documentation. This is an experimental version and may contain breaking changes.
Skip to main content

Framework Internals

How the Reventless framework is structured and operates internally. Read the pages below in order — each builds on the previous — then move on to Extending the framework.

Architectural patterns

Reventless leans on a few patterns throughout, for consistency, type safety, and provider independence:

  • Component structure pattern — every component is two required files (Component.res for types, Component_Builder.res for the construction functor) plus up to three optional ones (_Adapter, _Operations, _Callback). See Component structure pattern.
  • First-class modules and functors — components are parameterized over their specs and adapters, so the same builder works for any provider.
  • Adapter pattern — infrastructure is injected through adapter interfaces; the core depends on no provider.
  • Deploy-time vs runtime separationPulumi.Output.t-wrapped values keep deploy-time (infrastructure) and runtime (Lambda) concerns distinct.

The ordered tour

  1. Messages — how commands and events are shaped, correlated, and routed.
  2. Serialization — encoding/decoding with sury and the @schema PPX.
  3. Resources — how infrastructure resources are modeled.
  4. Runtime & deployment — runtime environments and the Single/PerAggregate/Micro deployment strategies.
  5. Pulumi integration — deploy-time vs runtime separation in depth.
  6. Component structure pattern — the file pattern used by every component, walked through with EventLog.
  7. MCP — AI-native access via tools and resources.

Then: Extending the framework → — add a new component or a new provider adapter.

Where the implementations live

  • Framework core: reventless/reventless-core/src/components/ (and src/admin/ for the built-in Platform Admin components).
  • Provider adapters: reventless/reventless-aws/src/adapter/ and reventless/reventless-local/src/adapter/. See the AWS adapter reference for the concrete AWS mappings.