this is probably the most requested feature ever, and it should probably be looked at properly
the first step in this is figuring out what people actually mean by the word “groups” and what functionality this should incorporate
the scope of this issue covers the high-level design only, and not the implementation details which will be covered later
what do people want/need from a group?
what do you expect one to do? how do you expect it to operate?
leave the technical details out of it, just from a purely functional point of view, what would you want a group to do?
Ref: #20 - [investigation] take a look at the viability of groups - akkoma - Akkoma Development
imo when people mean groups they usually mean something in shape of groups on facebook which is a totally separate timeline with its own moderation, but posts still show up on your tl if you are a member of said group. there also are visibility settings of the whole group, but from what I understand they got pretty convoluted now, anyways, few years ago you had:
- public/open where anyone could just join, and all posts were visible without joining,
- closed where info about group was visible without joining but you have to join to see posts, and also you have to be accepted
- secret where you have to get invited by the group admin and you can’t really find the group otherwise
that’s all from me I think?
When I think of groups, I think primarily of Facebook groups, which is a feature that’s honestly still keeping people on that site because nothing else has it.
A Facebook group is a separate timeline that others can contribute to. They can start new threads there, or share posts from others to the timeline (if those posts are public) in order to continue discussion. This sometimes shows up on your main feed (User posted to Group) if you’re in the group. The group timeline can be set totally private so only members can see, or it can be left public so people can see if it’s for them.
So you have this group timeline, visible when you go to the group. The group primarily shows the threads and a preview of some of the replies in the thread, it does not just jumble replies and new posts together in one confused timeline the way pleroma does.
The group admin can pin posts to the group for group announcements, and the group admin (whoever created the group + who they set as admin) can ban people from the group to keep out harassment.
These groups can also set events for the group, add files for the group, etc but I dont think these are necessary for fedi per se.
And you have a menu that lets you see all groups you’re in, and you can create a new group.
The group also has a banner unique to it which helps add personality. And you can sort group threads by new posts or posts with recent activity.
Attaching some pics to show the general layout
I’m generally unsure whether Akkoma or Fedi in its implementation today lends itself to groups. Maybe this should be left to Matrix et. al.
Maybe a look at how makeshift groups are used can also help, e.g. https://piggo.space/users/fedigroups
I have not thought this through, but it might necessitate a separate Groups timeline that contains groups interactions. Given that some groups might produce hellthread-level amounts of messages, they should be separated from the home timeline. So basically like email separating To: from CC:
Also within group interactions, it should be possible to address specific members individually, so you can refer to their posts. Independent of the implementation, a better filter for notifications will be required (group mention vs. direct mention vs. direct mention within group).
Groups should have a prefix or similar in the address to make it immediately identifiable as such.
My understanding of Groups is similar to Jeder and eris.
A separate timeline that could be public or private (invite only or request + allow) and might be configurable on the user end to show up in the main feed or be separated/added to the sidebar.
E.g. we currently have a dropdown for different timelines (Home, Public, Known Net, …) which could be expanded on with a new Groups dropdown and possibly a notification bell attached per group if there is new posts in said group.
Quoting myself from the linked issue:
The way I see it, there’s basically two kinds of “groups” that people are talking about:
- GNU Social-style groups: Basically like a mailing list where one can subscribe to that group, and everyone subbed to that group receives messages that are sent to that group.
- Circles like those in Google+. People in such groups can send private messages to that group and everyone gets those messages, almost like a group chat.
My idea would be to have both the broadcast functionality of (1) and group messaging stuff of (2). Group owners (and maybe moderators depending on how granular we want roles to be) can do things like control who can join the group and be able to kick bad members out, and also whether it’s public or not.
I personally don’t use Facebook, but how FB groups are described here sounds pretty close to how I imagine an ideal group implementation would be like.
Use case: meetup planning.
You need to discuss meetup details with, say, 5–50 people. Ideally in private, so that only invited people can see the details.
You could do this using direct messages, but then every time you add a post, you would have to mention everyone who is invited. Not only does that take up space in the message body, but as new people are invited and existing people leave, the asynchronous and threaded nature of the conversation can lead to sub-threads with different recipients.
So it would be nice to be able to send a private group message without having to mention each recipient explicitly in every message, and with a way to add people to the group and remove them from the group.
(This is essentially the same idea as the Circles mentioned in norm’s comment.)
Coming from Misskey & derivatives, these two kinds of groups sound similar: Misskey has “Groups” and “Channels”, however both of them not currently federated. That’s why I’ve personally never had any use for them on my single user instance.
Groups are chat rooms, they can only be used in Misskey Chats *1. I’ve thought, similar to @ultem, that maybe it would be too much reinventing the wheel to implement something like this, but yeah, Misskey already kinda has it.
Channels are more towards mailing lists: You can create posts within them and others can view them. You can follow a channel, which as far as I understand will make the posts show up on your timeline(s). Membership and posts are public and it is not possible to change the visibility of the channel or its posts.
*1 Misskey Chats are essentially direct messages with an extra attribute that only Misskey cares about. Thus they could break somewhat easily if you are chatting with someone else that is not on Misskey because Misskey Chats are unable of having “side threads”. There is an open issue in the Misskey repo to convert chats to Pleroma behaviour of using a custom object type because of this, but since I left I don’t think that would get implemented there, but maybe in FoundKey.
Friendica has a working implementation of groups, which can be moderated by the group owner: Friendica Community Forum | Help: Groups and Privacy
Since friendica is said to be similar to facebook this might be worthy to look at. Compatibility to these existing groups in the fediverse would be nice.
Worth noting there’s a draft fediverse enhancement proposal regarding groups: fep/fep-1b12.md at main - fep - Codeberg.org