Skip to main content

Breaking changes

Groups public surface redesigned around overviews, routing, and metadata (#1513) The Groups API is now split into three purpose-built views so no caller can mistake the send-path routing cache for display data.
  • GroupOverview — new slim, display-oriented type: id, subject, hierarchy, and participant_count. Canonical source of subject, community hierarchy, parent, and subgroup kind for high-level callers.
  • GroupMetadata — unchanged full object, still the entry point for participants, roles, and settings.
  • Routing snapshots — the old GroupInfo (now GroupRoutingInfo) is pub(crate). It powers the send path only; sending a message consults it for you.
New enums: GroupHierarchy { Standalone, Community, Subgroup { parent, kind } } and SubgroupKind { Regular, Announcement, General }. Both are #[non_exhaustive].

Renames

New APIs

  • Groups::fetch_overviews(&[Jid]) — batch fetch slim overviews for a chosen set of groups. Returns Found / Truncated / Forbidden / NotFound per JID. Same wire request as fetch_metadata_batch, but each <group> node is parsed with a slim parser that never materializes participants.
  • Groups::resolve_participant_addresses(&mut GroupMetadata) — opt-in LID → PN backfill. fetch_metadata no longer runs this implicitly; call it at the callsite when you need PN-keyed display data. The extra cache/database cost now reads at the point of use.
  • Community::list_participating — parent-community-only overview list.

Behavior changes

  • GroupMetadata.subject and GroupMetadataResponse.subject are now Option<String>. Protocol absence (None) is kept distinct from an explicit empty subject (Some("")).
  • Strict batch refusal classification. Only 403 maps to Forbidden and only 404 maps to NotFound. Any other server error fails the whole batch call rather than being misreported as a missing group.
  • Empty batches never send a wire-invalid zero-group request. fetch_metadata_batch(&[]) and fetch_overviews(&[]) return an empty vector directly.
  • list_participating omits <participants> and <description> presence flags from its request, matching WhatsApp Web’s overview projection. It never fans out per group and never runs LID/PN backfill.

Migration

See Groups API reference and the group management guide for the full updated surface.