Skip to content

Member list uses too much space in local storage #2674

Open

Description

@max-nextcloud

Describe the bug
As observed in #2518 the member list starts using lots of storage in localstorage if there are many members.

Each member uses several kb of storage:

localStorage.getItem('collectives/pinia/circles/circlesMembers').length
// 282813
const members = JSON.parse(localStorage.getItem('collectives/pinia/circles/circlesMembers'))
JSON.stringify(members.LvrxIVdG4ET9VQwrwSIeW5JQsPIPWxK[0]).length
// 6049

To Reproduce
Steps to reproduce the behavior:

  1. Open a collective
  2. Open the web dev tools
  3. Get the list of members as described above
  4. Pick one collective (f.e. using autocomplete on members) and one member to get it's size.

Expected behavior
We should only store what's needed - at most what currently is in member.basedOn.owner (350 bytes for me).

Browsers have 5 Mb of local storage. So with 6k per member we currently cannot handle more than 1k members in total for all collectives of a user. With < 500 bytes on average 1k members would still only consume 10% of storage.

Server details:
cloud.nextcloud.com

  • Collectives app version: 4.4.2
  • Nextcloud version: 34.0.2

Activity

  1. max-nextcloud commented on Aug 3, 2026

    @max-nextcloud
    CollaboratorAuthor

    The easiest quick fix from my point of view would be dropping the details from the circles membership query.

    That would remove our ability to detect if the current user is a member of a circle / group inside the collective which we currently use to disallow changing that groups level.

    I would suggest to just allow changing everyones settings if the user is an admin - just like in contacts.

  2. Koc commented on Aug 8, 2026

    @Koc
    Contributor

    We need to do something with avatars existence cache in NcAvatar component, like nextcloud_per_bmV4dGNsb3Vk_user-has-avatar.admin: true. It adds tons of keys

  3. max-nextcloud commented on Aug 9, 2026

    @max-nextcloud
    CollaboratorAuthor

    @Koc I don't quite understand. Looking at that key I would assume there's 1k entries for 1k users. If each entry is < 100 bytes key length... how would that fill the 5 Mb of storage?
    The circleMembers with > 5Kb storage per entry seem like a much more likely candidate for me for filling up the storage with 1k members.
    What am I missing?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions