Group Semantics

I’m having a hard time mapping the semantics of groups and categories to the more community-based model of organization that we use in our system.

Background: our intent is to use Discourse as one component in a larger system used by medical researchers to share experimental results. This includes, for example, tools that would allow a user to create a graph showing an analysis of a clinical trial and attach that to a post as an embed. There’s also a portal page that leads to various apps, and one of those would be discussion boards based on Discourse.

In our model, users are organized into communities or groups which we call “collaborations”, but you can think of them as teams or departments. Each team consists of a set of researchers working on a particular problem. A member of a team who wanted to share some information would post a message to that team. However, occasionally one might want to share data more widely, posting to multiple teams.

As you probably already noticed, this is exactly the semantics of email groups, G+ communities, and many others I could name. If I am working for a company and I am a member of groups A and B, and a message is posted to both A and B, I only get one copy of the message.

Trying to map this on to Discourse’s groups: the closest I can get is to write a script to create, for each team, both a group and a category with the same name as the team. However, I can’t post to multiple categories (and I imagine that this would be very difficult to change in the code, as I suspect it’s pretty well baked into the db schema).

And to be honest, I think categories is the wrong tool for this - a category should really be a collection of posts with related topics, not a collection of posts that are visible by a subset of users.

Ideally, what I’d like to see is a site-specific option to add a ‘visible to’ field to the compose window, which would default to ‘everyone’, but where one could put a list of groups (and possibly individual users).

You could create groups A and B, and just use private messaging to one or more these groups to achieve what you are subscribing.

Doing so is probably the closest way to reproduce the communication model you are used to with email groups.

But is that really what you want to do?

Are messages to group A not supposed to be shared with group B due to privacy reasons? Or is it simply because it would be noise if they were always cross-posted?

One of the great benefits of a forum or message-board model like Discourse is that topics can be open to all while their relevance can be indicated by the category they are in. This reduces the mental overhead of choosing which groups to CC and allows more open participation and cross-pollination across teams.

If its the latter, I would consider creating categories instead of groups. That way they are visible to both groups, but organized in such a way that group A can more easily pay attention to messages in category A (or watch them, etc).

Categories can be access-controlled on a group basis as well, so there are additional things you could try with categories and groups if you have more specific privacy requirements.

For example:

  1. category A1: mainly of interest to group A, but visible to all
  2. category A2: private to group A
  3. category B1: mainly of interest to group B, but visible to all
  4. category B2: private to group B
  5. category C1: mainly of interest to group C, but visible to all
  6. category C2: private to group C
  7. category AB: private to groups A and B

Also, coincidentally I was planning on posting this other topic about Discourse and Email Lists today.


Well, part of the issue is that there are potentially a large number of groups, which means that the vast majority of message traffic won’t be of interest to the average user. Also, researchers occasionally want to keep their intermediate results confidential until they are ready for publication.

Can a private message be used as the start of a discussion, with everyone able to see replies and comment on them? How does that work?

One other thing to bear in mind is that any user can create a new team and invite others to join, whereas only Discourse admins can create groups and categories. We plan to get around this by creating a frontend app which uses the Discourse API, but it does mean that these objects will get created on an ad-hoc basis. And we can’t really predict beforehand which teams will want to share information with other teams.

Yup, as long as by “everyone” you mean everyone included in the message. With group messaging you can designate a group as the participants in a PM, then, well, you use the PM as a private topic. Discourse PM’s work pretty much the same as regular topics, just a bit more particular about who is included in them.

Additionally, the page at has a nice listing of group PMs, which might help with what you’re trying to accomplish here.


My concern is that the private messages feature of Discourse is rather hard to find, unlike topics where there’s a big obvious “new topic” button. I suspect that a lot of users aren’t even aware that this feature exists.

Hm, well you can try and make them more visible if you’d like. takes you to your PM page. You could add it as a link in the header or possibly better add a nav item.

How many groups are you thinking there would be?