sequenceDiagram participant M as N existing
members participant A as Alice participant B as Bob participant C as Existing
contact alt invite contact note over A, B: 1a. send and accept group invitation A ->> B: x.grp.inv
invite Bob to group
(via contact connection) B ->> A: x.grp.acpt
accept invitation
(via member connection)
establish group member connection else join via group link note over A, B: 1b. join via group link and accept request B ->> A: join via group link
SimpleX contact address A ->> B: x.grp.link.inv in SMP confirmation
accept joining member request,
sending group profile, etc.
establish group member connection A ->> B: x.grp.link.mem
send inviting member profile end note over M, B: 2. introduce new member Bob to all existing members A ->> M: x.grp.mem.new
"announce" Bob
to existing members
(via member connections) loop batched A ->> B: x.grp.mem.intro * N
"introduce" members and
their chat protocol versions
(via member connection) note over B: prepare group member connections opt chat protocol compatible version < 2 note over B: prepare direct connections end B ->> A: x.grp.mem.inv * N
"invitations" to connect
for all members
(via member connection) end A ->> M: x.grp.mem.fwd
forward "invitations" and
Bob's chat protocol version
to all members
(via member connections) note over M, B: group message forwarding
(while connections between members are being established) M -->> B: messages between members and Bob are forwarded by Alice B -->> M: note over M, B: 3. establish direct and group member connections M ->> B: establish group member connection opt chat protocol compatible version < 2 M ->> B: establish direct connection note over M, C: 3*. deduplicate new contact B ->> M: x.info.probe
"probe" is sent to all new members B ->> C: x.info.probe.check
"probe" hash,
in case contact and
member profiles match C ->> B: x.info.probe.ok
original "probe",
in case contact and member
are the same user note over B: merge existing and new contacts if received and sent probe hashes match end note over M, B: 4. notify inviting member that connection is established M ->> A: x.grp.mem.con B ->> A: x.grp.mem.con note over A: stops forwarding messages M -->> B: messages are sent via group connection without forwarding B -->> M: