Production Group Schema (drupal.org, Group v3.3)
This diagram is read directly from config/sync/*.yml in the actual drupal.org
site codebase (~/Sites/pl-drupalorg, GitLab origin
drupal-infrastructure/sites/drupalorg), not reconstructed from documentation.
It reflects what drupal.org’s Groups feature actually runs today.
This is Group v3.3, not v4 — confirmed by composer.json
("drupal/group": "^3.3") and by the config schema itself using the v3
content_plugin key (v4 renamed this to relation_type). The Group v4 target
design diagram elsewhere on this site is not
what’s actually running in production; this page is. Latest 4.0 release:
4.0.0-alpha2, published 2026-08-21 — still alpha, not yet stable.
erDiagram
group { string label "Group (bundle: community_group)" }
group_type { string label "Group type (config)" }
group_relationship { string label "Group relationship" }
group_relationship_type { string label "Relationship type (config)" }
group_role { string label "Group role (config)" }
node { string label "Content" }
node_type { string label "Content type" }
taxonomy_term { string label "Taxonomy term" }
file { string label "File" }
user { string label "User" }
group }o--|| group_type : "type = community_group"
group }o--|| file : "field_group_image"
group }o--|| taxonomy_term : "field_group_type"
group_relationship }o--|| group : "gid"
group_relationship }o--|| group_relationship_type : "type"
group_relationship }o--o{ group_role : "group_roles"
group_relationship }o--|| node : "entity_id (when a content relationship)"
group_relationship }o--|| user : "entity_id (when a membership)"
group_relationship_type }o--|| group_type : "community_group"
group_relationship_type }o--|| node_type : "documentation | event | forum | page | post"
group_role }o--|| group_type : "community_group"
One group type is configured — community_group (“A community group for
collaboration, discussion, and coordination”), with creator_membership: true
and creator_wizard: true; the creator is auto-assigned the
community_group-admin role.
Six group_relationship_types are configured, all scoped to community_group:
community_group-group_membership(content_plugin: group_membership) — the membership join.- Five content-relationship types, one per node bundle:
group_node:documentation,group_node:event,group_node:forum,group_node:page,group_node:post.
One group_role is configured: community_group-admin.
The custom do_group_pin, do_multigroup, do_group_extras, do_group_mission,
do_group_language, do_notifications, do_discovery, and do_profile_stats
modules layered on top of this do not define any new entity types — they are
behavioral and UI modules operating on this same core schema (pinning via Flag,
cross-posting, archive/moderation rules, notifications, profile stats, language
negotiation).
One inconsistency worth noting: a leftover boolean field
node.section.group_group (“Determine if this is an OG group”) exists on the
section content type. It is not wired to the actual Group entity system at
all — it looks like an unmigrated artifact from a legacy Organic Groups
(Drupal 7 predecessor to the group module) implementation that nothing
currently reads.
See Group 3.3 to 4 Migration for what upgrading this schema to Group v4 would actually take.
