v1.0 is the SemVer baseline for the host- and adapter-facing surface frozen in v0.12 (ADR 029 / ADR 030). This page is the short map; HexDocs module groups are authoritative.

Breaking changes to modules listed under Facade / Consume / Values / Backend / Runtime require a new major version. Optional ops may still evolve in 1.x minors.

Facade

Rheo — create streams/groups, append, read/query, fetch/settle, replay/reset, lag, ops inspect (list_streams, list_groups, dead_letters, group_info), ping, ensure_indexes.

Pass :rheo for a named instance (default Rheo).

Consume

ModuleRole
Rheo.Consumeruse → child spec for a local Rheo.Group
Rheo.GroupDemand, fetch, renew, drain
Rheo.GroupSupervisorDynamic start_group/2
Rheo.ProducerGenStage producer (optional gen_stage)
Rheo.Broadway / AcknowledgerBroadway wiring (optional broadway)

One Group (or Producer) per {rheo, stream, group} per node.

Values

Event, Event.Lineage, Lease, Query, Page, Lag, DeadLetter, GroupInfo, Settle, Partition.

Backend authors

Implement Rheo.Backend. Declare Rheo.Backend.Capabilities. Optional ops callbacks may return {:error, :unsupported}. Optional wakeup via Rheo.Backend.Wakeup. Shipping adapters: ETS, Mnesia, Mongo, Ecto, Redis.

See Building your own backend.

Runtime (shared, public)

Inflight, Backoff, Clock / Clock.Frozen / Clock.System, Id, Telemetry, Application.

Optional ops (not SemVer-core)

Mix inspect tasks, Rheo.LiveDashboard.Page, Rheo.Telemetry.Metrics. These may evolve in 1.x minors without a Consumer / Event / Query break.

Error atoms

Portable reasons returned by Rheo / backends (also in building-your-own-backend):

ReasonMeaning
:stream_not_foundStream missing (looked up before group)
:group_not_foundStream exists; group does not
:already_existsDuplicate stream or group
:stale_leaseSettle lost the fencing token
:receipt_mismatchNative receipt no longer matches
:cursor_not_foundDead-letter / page :after id absent
:already_drainingSecond drain/2 while one is pending
:unsupportedOptional ops callback not implemented
:backend_unavailableBackend unreachable / process down
:confirm_requiredreset_group without confirm: true
{:ambiguous, cause}Write may have committed (e.g. timeout)
{:failed, cause}Definite failure

Rheo.Settle.classify/1 maps settle errors for Group / Producer policy.

Kept for compatibility

  • Legacy page cursor %{after_sequence: n} (global lower bound)
  • {Rheo, url: "mongodb://…"} when Mongo is available