- Cluster Monitoring (
distribute/cluster/monitor) — Typed event-driven notifications forNodeUpandNodeDown. distribute.subscribe(subject)— Start a monitored subscription.distribute.unsubscribe(monitor_subject)— Stop a subscription.- ADT/Variant Codecs (
distribute/codec/variant) — A builder pattern to easily create codecs for Custom Types (enums) with payload support. variant.new(),variant.add(),variant.unit(),variant.build()- Telemetry (
distribute/internal/telemetry) — Erlang:telemetryevents for send, receive, encode, decode, registry, and cluster operations.
Ground-up rewrite. Smaller API, proper OTP actors, compile-time type safety
via TypedName(msg). Not compatible with v2.
Everything outside the core: crypto, discovery, settings, groups, monitoring,
connection pool, retry. Also removed whereis_global(name, encoder, decoder).
- Actors are real
gen_statemviagleam/otp/actor—observer,sys:get_status, supervision trees all work. - Registry uses binary names with
:global. No atoms created, no atom table exhaustion. start,start_registered,start_supervised,poolall takeTypedNameinstead of separate name + encoder + decoder.registerandlookuptakeTypedName. The compiler enforces that both sides use the samemsgtype.- Each
GlobalSubjectgets a unique or deterministic tag (was sharedNilin v2 — caused message mixing). - Orphaned actors are killed on registration failure in
start_supervised.
TypedName(msg)— opaque type binding a name to an encoder/decoder pair.Codec(a)— bundles encoder + decoder + sized decoder. Shorthand constructors:int(),string(),float(),bool(),bitarray(),nil(),list(c).codec.map(c, wrap, unwrap)— derive a codec for a custom type.codec.subject()— serialize aSubject(BitArray)for cross-node request/response.global.call(target, make_request, response_decoder, timeout)— synchronous request/response across nodes.global.reply(reply_to, response, encoder)— send a response back.composite.option(c),composite.result(ok, err),composite.tuple2(a, b),composite.tuple3(a, b, c).registry.named(name, codec)— short form oftyped_name.