nextcloud / nextcloud/calendar
Incorrect number of participants when using contact groups
@GVodyanov is already working on this.
Since Jun 22, 2026.
- Dominant language
- JavaScript
- Stars
- 1.2k
- Forks
- 332
- Avg merge
- 16h 13m
- Merged PRs (30d)
- 137
Description
Steps to reproduce
- Create two empty contact groups named "Name1x" and "Name2x"
- Create a contact named "Name 99 name99@example.com" and assign it to both contact groups
- Create an appointment named "Test 1" with both contact groups "Name1x" and "Name2x" - Save
- Create an appointment named "Test 2" with the contact group "Name1x" and Save
- Edit the “Test 2” appointment and add the contact group "Name2x" and save again
Expected behavior
Test 1
Amount of Attendees = 2 (Organisator + Name99)
Test 2
Amount of Attendees = 2 (Organisator + Name99)
Actual behavior
Test 1
Amount of Attendees = 4 (Organisator + Name1x@group + Name2x@group + Name99)
ICS - Test 1 (both at once)
BEGIN:VCALENDAR VERSION:2.0 CALSCALE:GREGORIAN PRODID:-//IDN nextcloud.com//Calendar app 6.5.0-dev.0//EN BEGIN:VTIMEZONE TZID:Europe/Berlin BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20260616T101615Z DTSTAMP:20260616T101939Z LAST-MODIFIED:20260616T101939Z SEQUENCE:4 UID:7bf93ca0-d727-4a4e-9b68-bd65ed683e64 DTSTART;TZID=Europe/Berlin:20260621T090000 DTEND;TZID=Europe/Berlin:20260621T093000 TRANSP:OPAQUE STATUS:CONFIRMED SUMMARY:Test 1 - both at once DESCRIPTION:Two contact groups with the same contact were added with a sing le save ATTENDEE;CN=Name1x;CUTYPE=GROUP;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT; RSVP=TRUE;SCHEDULE-STATUS=5.0:mailto:Name1x@group ATTENDEE;CN=Name2x;CUTYPE=GROUP;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT; RSVP=TRUE;SCHEDULE-STATUS=5.0:mailto:Name2x@group ATTENDEE;CN=Name99;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICI PANT;RSVP=TRUE;MEMBER="mailto:Name2x@group","mailto:Name1x@group";SCHEDULE -STATUS=1.1:mailto:name99@example.com ORGANIZER;CN=admin:mailto:admin@example.net END:VEVENT END:VCALENDAR
Test 2
Amount of Attendees = 5 (Organisator + Name1x@group + Name99 + Name2x@group + Name99)
ICS - Test 2 (one at a time)
BEGIN:VCALENDAR VERSION:2.0 CALSCALE:GREGORIAN PRODID:-//IDN nextcloud.com//Calendar app 6.5.0-dev.0//EN BEGIN:VTIMEZONE TZID:Europe/Berlin BEGIN:DAYLIGHT TZNAME:CEST TZOFFSETFROM:+0100 TZOFFSETTO:+0200 DTSTART:19700329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZNAME:CET TZOFFSETFROM:+0200 TZOFFSETTO:+0100 DTSTART:19701025T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE BEGIN:VEVENT CREATED:20260616T101809Z DTSTAMP:20260616T102012Z LAST-MODIFIED:20260616T102012Z SEQUENCE:4 UID:994ea3c7-724b-4fef-b2f0-503343378b27 DTSTART;TZID=Europe/Berlin:20260621T110000 DTEND;TZID=Europe/Berlin:20260621T113000 TRANSP:OPAQUE STATUS:CONFIRMED SUMMARY:Test 2 - One at a time DESCRIPTION:Two contact groups with the same contact were added one after t he other ATTENDEE;CN=Name1x;CUTYPE=GROUP;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT; RSVP=TRUE;SCHEDULE-STATUS=5.0:mailto:Name1x@group ATTENDEE;CN=Name99;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICI PANT;RSVP=TRUE;MEMBER="mailto:Name1x@group";SCHEDULE-STATUS=1.1:mailto:nam e99@example.com ATTENDEE;CN=Name2x;CUTYPE=GROUP;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT; RSVP=TRUE;SCHEDULE-STATUS=5.0:mailto:Name2x@group ATTENDEE;CN=Name99;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICI PANT;RSVP=TRUE;MEMBER="mailto:Name2x@group":mailto:name99@example.com ORGANIZER;CN=admin:mailto:admin@example.net END:VEVENT END:VCALENDAR
Calendar app version
6.5.0-dev
CalDAV-clients used
Browser
Chromium 151
Client operating system
Manjaro Linux
Server operating system
docker-dev
Web server
None
Database engine version
None
PHP engine version
None
Nextcloud version
35.0.0 dev
Updated from an older installed version or fresh install
None
List of activated apps
Enabled:
- appstore: 2.0.0-dev.0
- calendar: 6.5.0-dev.0
- circles: 35.0.0-dev.0
- cloud_federation_api: 2.0.0-dev.0
- comments: 2.0.0-dev.0
- contacts: 8.8.0-dev.0
- contactsinteraction: 2.0.0-dev.0
- dashboard: 8.0.0-dev.0
- dav: 2.0.0-dev.0
- federatedfilesharing: 2.0.0-dev.0
- federation: 2.0.0-dev.0
- files: 3.0.0-dev.0
- files_reminders: 2.0.0-dev.0
- files_sharing: 2.0.0-dev.0
- files_trashbin: 2.0.0-dev.0
- files_versions: 2.0.0-dev.0
- lookup_server_connector: 2.0.0-dev.0
- oauth2: 2.0.0-dev.0
- profile: 2.0.0-dev.0
- provisioning_api: 2.0.0-dev.0
- settings: 2.0.0-dev.0
- sharebymail: 2.0.0-dev.0
- systemtags: 2.0.0-dev.0
- theming: 3.0.0-dev.0
- twofactor_backupcodes: 2.0.0-dev.0
- updatenotification: 2.0.0-dev.0
- user_status: 2.0.0-dev.0
- weather_status: 2.0.0-dev.0
- webhook_listeners: 2.0.0-dev.0
- workflowengine: 3.0.0-dev.0
Nextcloud configuration
Web server error log
Log file
Browser log
Additional info
Point 1 - Dedupe Participants
The code for deduplication already exists. See Test 1
The comparison probably fails because the participants in Test 2 have a "mailto" prefix
Point 2 - No duplicate emails
Because the iTip Broker adds participants to an array before sending out invitations, duplicate emails are prevented (tested on a different instance with NC32 and Calendar 6.4.2)
Point 3 - Duplicate Organizer = Attendee
When Thunderbird creates an event, it also adds the organizer as an attendee. So the result of an event with one organizer and one attendee is 3. The calendar counts this multiple times, regardless of the groups. This was noticed during testing and could be also addressed. (tested on a different instance with NC32 and Calendar 6.4.2)
Question: New Issue or same okay?
Point 4 - Group in Event/ICS File
According to RFC, it is sufficient for a participant to be assigned to groups via MEMBER. The group itself does not need to be listed as a participant with "CUTYPE=GROUP". This "group" participant is also displayed by CalDAV clients like Thunderbird.
I can create the PR for this, but before a solution is built, I think we need to decide whether to simply exclude the groups from the count or to omit the groups entirely. The frontend currently needs the groups to render the collapsed section. If the groups are removed, the logic must be adapted to the MEMBER attribute.
My recommendation would be:
- The calendar continues to count
CUTYPE=GROUP(if the event was created externally with a group via CalDAV client) - The calendar no longer lists the groups as attendees in the event, but only the attendee as a MEMBER of one or multiple groups
- The frontend builds the expandable groups based on the MEMBER attribute of the attendee and no longer based on the attendees from
CUTYPE=GROUP - The frontend renders an attendee of
CUTYPE=GROUPas an attendee
I hope to receive positive and constructive feedback
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.