Graph view for Discourse category and topic links/backlinks (for nav + visualizing concept connection)


We should create a Discourse plugin that adds a Graph View for navigation and visualization.

Discourse is a highly flexible forum tool that works very well for multi user collaboration (this very forum, for example!). It also has been used experimentally, by me and possibly others, for “digital gardening”, where the interconnection between topics starts to become important (i.e. related ideas of one person, related concepts, etc.). One of the built-in Discourse features is backlinks, which is valuable for understanding how topics connect, and is a common feature of #tools-for-thought (TFT) as well.

Another common TFT feature is a “graph” view, to visualize these connections at a higher level, potentially for navigation (what topics connect to the topic I am in or the category/tag I am interested in?), and for getting an understanding of how different topics, discussions, and ideas relate to each other.

Discourse already has backlinks and is often used to discuss complex topics with interesting interconnections of concept, topic, ideas, etc. In this forum many topics are linked to other topics, for example. I believe it would be valuable to be have a Graph View in Discourse, which could be presented to the user as an alternative top-level navigation view for discovering new content (i.e. added to the top menu along with “Latest”, “New”, etc., i.e. “Graph”).

User Impact

Users would have a new, novel, and TFT-oriented way of navigating forum discussions. Users would be able to find, discover, and understand forum content in a new way, potentially unlocking new insights on higher-level patterns of discussion, or simply allowing people to explore interconnections of discussions and ideas in a more free-form and visual way. This could make interaction with a Discourse forum more fun and visceral (I have heard feedback from some that the Discourse topic lists can be intimidating, for example), it may help encourage exploration of “deep” content (e.g. older but in-depth discussions that connect to newer ones), and perhaps even inspire the creation of new, relevant and useful links between topics.

Who would want to use this and why?

People familiar with TFT systems would probably immediately see the value in this. But even those who do not have such prior familiarity would be introduced to the “graph view” concept, and have an immediately relevant body of content to explore through it, thus helping to demonstrate its utility.

There is inherent value in the navigation modality itself, as demonstrated by TFT tools, but there is also potential value to the TFT community as a whole. Many tools in this space (Obsidian, Remnote, etc.) use Discourse forums and have graph views in the tools/apps themselves, but not (yet) in their discussion forums. Surely these communities would be interested in the option to navigate more of their overall information “sphere” with a familiar graph view.

Additionally, when starting with a graph-enabled TFT, not everyone immediately understands the utility of it, and it can take a while to generate enough content and get familiar enough with the linking/backlink concepts to actually start to see useful connections. Adding a Graph View to an existing forum with large amounts of existing, interlinked content could actually be a valuable way of demonstrating graph visualization and navigation value to those who are new to TFT and graph views. It sidesteps the issue of “not enough content for obvious utility” by leveraging the large amounts of existing content in popular TFT forums and showing how all that discussion interrelates.

So this plugin could simultaneously provide direct utility to TFT communities and help to introduce a core TFT concept (graphs) in a way that might be easier for new people to grasp and get immediate value out of.


The existing user interaction graph plugin below (in “prior art”) outlines a set of features that could be easily adapted (at least conceptually, if not programmatically) to my intents for this plugin. Using that plugin’s feature overview as a template, here is a simple version oriented toward topics and categories:

  • The nodes represent topics
  • Categories are (perhaps optionally) shown as large “orbit points”/anchors, perhaps with a different shape and size to distinguish them from “nodes”
  • Option to turn display of topic and/or category names on and off (to declutter the view); names always shown on-hover
  • The links represent links between topics, and/or between topics and categories
  • Hover over a topic to isolate it and its connections visually
  • Click on a node to navigate to that topic

Features very similar to these can be tested in the existing “community network visualization” plugin described below.

In addition, various criteria/data could be used to provide extra context and navigation utility through visual cues such as color, size, position of nodes, line thickness, type of node icon, etc. Some ideas include:

  • Size or Color of node indicates number of inbound links (links to topic)
  • Or size/color of node indicates number of replies, or maybe just display that number on the node
  • Distance of node from “anchor” (category) could indicate topic age
  • Some way of visualizing topic Likes in the graph, e.g. color (i.e. if you used simple number display on node icon to indicate number of replies, rather than color)
  • Etc.

Stretch Goals and More Feature Ideas

  • Show different types of connections (e.g. links vs. quotes) between topics in different color/line style (e.g. dashed for quotes, solid for links)
  • Graph “sort” modes to switch between distance-from-Category-node = age, vs. distance = popularity/activity, etc. i.e. normal Discourse sorts, but visualized in the graph in some way
  • Additional graph view with Tags as Clusters instead of Categories (same functions as above with interlinked topic lines, etc.)
  • Visualize Search results as graph using above model
  • Topic preview on hover in graph view
  • Image thumbnail shown in graph view (there are existing Discourse theme components that do this for category list, so I’m imagining something similar for the graph view, i.e. images instead of the regular node icon, or maybe image-on-hover)
  • Show links to external site in the graph: external site as node that topics link out to (e.g. a bunch of people link to Slashdot or Reddit or something, and the Reddit site gets a bunch of lines going to it).
    • This could be per-site overall (less detailed/useful), or per-link (less links likely, but could be interesting in certain popular sites/links)

“Unlinked reference” (i.e. repeated word/term) visualization, maybe based on a word/term list defined in the back-end. Because topic names are unlikely to be replicated precisely in other topics (that do not have explicit links to that other topic), you instead might want to visualize identifiable, reasonably unique words or phrases to then see commonalities in a graph view. This would require a way to set these words. A simple version of it could just be an extension to Search, so that the Search Term is the “Anchor” point and all the Topics connect to it, perhaps with line thickness, color, etc. denoting number of references to the search term. The ideal would be to be able to have multiple terms defined so you can see how they interrelate, etc. This could be highly valuable for generating new connections between existing discussions and concepts, if desired.

Prior Art/Example(s)

Here is an existing Discourse plugin that has a graph view very similar to what I am proposing, but the connections are based on interactions between users (likes and replies). While this is cool and interesting for people who are involved in or managing the community, I think it is arguably much less useful and interesting to general visitors, who are more likely to be focused on content (and potentially the connections between items of content). Most visitors to the forums will have no idea who people are, and while they might have fun and get value out of a way to get a quick idea of who interacts most with each other, it’s definitely of more limited utility and scope of interest in my view.

Skills Required

  • Experience with Discourse plugin development or willingness to learn
  • Experience with graph/network visualization libraries like D3
  • Javascript

Funding, License, Future

I have a little money to put toward this, and I initially considered just posting it straight to the Discourse Meta forum as a paid project. But I’m more interested in an open source, collaborative approach and building interest and momentum with like-minded people. The TFT community as a whole seems likely to be interested in this, but connecting with all those disparate communities and aligning momentum across them to get this built seems challenging. Fission seems like a great cross-app space that is already making clear effort to extend Discourse in useful, TFT-like ways, so I hope this will be a good fit here! I am happy to just re-post it to Discourse Meta if it seems more like a simple paid project though.

Perhaps @dvargas92495 would be interested, given his recent experience with the Wikilinks plugin?

Cool! Thanks for the write up, this is great!

The pattern we want to follow is to have an Open Collective that pays for the maintenance over time. Fission is a fiscal host on OC.

I’m happy to have Fission commit to sponsoring this for year one as well.

Now we’ll want to see who else is interested / promo’ing it.

Yeah this would be super cool and a fit for existing TFT communities.

1 Like

Fantastic, that’s great to hear!

Yes, definitely. I am a little unsure how best to go about promoting this. Obviously I can link here, but I feel a bit odd about jumping into TFT communities I’m not otherwise part of to mention it. I might mention it in Discourse Meta more readily, especially given initial support. But if you have any thoughts on how best to approach this, spread the word, etc. let me know!

Are you comfortable being an admin on an initial OpenCollective? Which can then be promoted while looking for a dev to commit.

And that becomes the place to point to / use to share links to.

I do think you should post to Discourse Meta.

I’ll PM you here and we can figure out what’s next.

1 Like

Sure! Although I don’t know what this entails. But I’m brashly confident I can do this. :grin:

Righteo! Should I wait for the OpenCollective, er… project? instance? etc. to be setup? I’m guessing yes. No hurry really on reaching out to Meta anyway, I think.

Alrighty, it’s taken me a while, but I’m pleased to make a significant update here. Thanks to help from Boris, we now have an OpenCollective:

And just today I made an initial $100CAD contribution to get things started! :tada:

I posted about the project over on Discourse Meta as well, so hopefully we’ll get some devs, financial contributors, or just general feedback over there:

I’ll try to stay more active on this from here on, though activity will of course depend on what contributions we are able to get. So help us spread the word!