Today's the day! :tada:

After nearly a full year in development, NodeBB v4.0.0 has landed, bringing federation between NodeBB instances (and a connection to the wider fediverse of social media) to forum software.

Fedi-what?

Fediverse! Here's a TechCrunch primer about it, but at the end of the day, it doesn't really matter. All you need to know is that NodeBB plugs in to a wider social network so that you don't have to cultivate an audience, they're already there.

The genesis

It was back in mid-2023 when I had the initial idea of interconnecting NodeBB forums. Back then, I had far smaller ambitions... I wanted a singular NodeBB to be able to communicate with other forums running NodeBB. To do that, we'd need to build out a centralized service to act as a bridge between instances, and corresponding slim clients on individual installs to consume the relayed data. At the time, concept like decentralization were not even part of my thought process.

It was during this period when I was doing my research that I stumbled on Mastodon, and later, ActivityPub, the protocol that powers it all. Since then, it's been one wild ride getting NodeBB to speak the same language.

Funding

Soon after dipping my toes into all that Mastodon had to offer, I discovered the NLNet Foundation, and their corresponding fund — NGI Zero Core. With the promise of funding, NodeBB could fully commit to implementing the protocol in short order, instead of piece by piece over time. We sent in an application and were delighted to be approved for the August 2023 call.

Their funding was instrumental in providing the financial stability to experiment with ActivityPub and to participate in developer circles, such as the SWICG, FediForum, and much more.

The fund continues to operate, perhaps you could benefit, or donate to the cause. It has certainly made a difference to NodeBB.

Federate, or not, it's your choice

NodeBB v4 comes shipped with the capability to interact with other NodeBB forums and any other ActivityPub-speaking software, right out of the box. We opted to make this a core feature instead of a plugin, since there were many changes made to core to support even the concept of accepting content from outside itself.

To that end, any users upgrading from v3.x will automatically have federation disabled, in order to reduce surprise. Any new forums will federate automatically.

You can turn federation on and off (and adjust some other fun toggles) directly from ACP > Settings > Federation (ActivityPub).

Even after turning federation on, how you use it shapes how well connected you will be. There is no centralized authority artificially boosting your content, so the name of the game is establishing two-way follow relationships to other sites.

The ActivityPub Equalizer

We're not alone in this journey to interoperate with other decentralized services. We're not even the only forum software to attempt to do so.

  • Discourse has a working plugin.
  • Ghost is building out in the open.

I specifically highlight these two because they both started in the early 2010s, same as NodeBB. It's always been a bit of an informal competition between us, and we always checked in on what the others were doing (growth-wise, pricing-wise, etc.) Truth be told, I don't think the ghost team ever really noticed NodeBB, but I digress...

The funny thing about ActivityPub is that at the end of the day, the overarching goal of seamless communication breaks down any barriers between competing organizations.

NodeBB and Discourse have been vying for the exact same market share (forums, community-building, self-started or enterprise) for over 10 years, and it was only after ActivityPub came around that the dev teams even started talking to one another.

Funny how that works.

So how does it all work?

Our documentation portal has been updated with the latest information about the ActivityPub functionality in v4.

If you have any questions about how it works or how to configure some aspect of it, please don't hesitate to reach out in the corresponding v4 support thread.

If you run NodeBB, the quickest way to see this in action is to upgrade to v4, and then paste this post's URL into your search bar. It should show up automatically, and you should be able to read and reply to it, directly from your own forum. Neat!

:rotating_light: We have emoji! :arrow_left:

I like emoji, I like them quite a bit. I grew up using emoticons (gosh, remember those?), and definitely love to sprinkle them in my forum responses.

If you've been following me since I've been contributing to the fediverse, you might've thought I eschewed emoji, but let's put that misconception to rest :laughing:

Thanks to the hard work by @PitaJ, NodeBB now federates emoji used in posts outward to remote instances. This works across all emoji packs (android, apple, cubicopp, etc.) available to the emoji plugin, and also includes custom added emoji :arrow_right: :voodoo:

This is a two-way integration, so custom emoji served by other instances are also picked up by NodeBB and displayed properly in posts.

You might notice that the emoji I use are all blobs. :smile: It's the default emoji set for all NodeBB instances, because blobs are amazing and it's a travesty Google decided to move away from them.

Long live the blobmoji :flushed:

A little-known feature was added in the 3.x develop branch of NodeBB, custom fields. It was an often-asked-for feature that had a couple of plugins built to accommodate, but @baris decided to make this part of NodeBB core.

I will let him do a more detailed write-up on the NodeBB side, but suffice to say, those custom fields will now federate out with your profile:

<img alt="" src="https://community.nodebb.org/post/101859">

<img alt="" src="https://community.nodebb.org/post/101859">

Likewise, custom fields as defined by remote users will be saved and displayed in NodeBB in metadata boxes just like those defined in NodeBB.

In NodeBB, administrators are able to globally specify a set of fields that individual users can change/set.

I'm happy to announce that I have tagged the latest commit in the activitypub branch as v4.0.0-alpha. That designation means (mostly symbolically) that we have moved past the "proof-of-concept" stage of ActivityPub research and development, and into the alpha phase.

This release has been a long time in coming. Work on the ActivityPub integration back in late 2023, although work accelerated around February of this year. The initial idea was to create a proof-of-concept build of NodeBB that could communicate with other fediverse apps, and federate local content outwards for other applications to consume.

As it turns out, it is difficult to temper your expectations when using a protocol with implementations that expect richer compatibility than one can provide! It seemed like a disservice to only offer a minimal subset of expected features, and so we started a deeper integration into ActivityPub with the aims of providing full user-to-user following, notifications, and two-way communication.

In the interim, FediForum happened, causing us to once again re-evaluate our short-to-medium term plans. Devs from NodeBB and Discourse, along with many other interested parties, formed the SWICG Forum and Threaded Discussions Task Force, which aims to promote the use and broader acceptance of threaded discussions as a modality of communication, as opposed to the expected "microblogging" format.

What this release contains

The alpha build contains a fully-capable ActivityPub server instance, including:

  • Two-way follow relationships between local and remote users
  • Two-way communication with fediverse content
  • A dedicated page (/world) to view remote content that is not organized into local categories
  • Categories followable from the fediverse (via FEP 1b12)
  • Integration with local flagging tools (reports sent to originating server)
  • Server-wide domain blocks (allow/deny list capability)

What this release does not contain

  • Support for emoji (images are federated out, which are sometimes stripped)
  • Support for non-public notes, as NodeBB does not currently have the facility to maintain or display them. Research on this problem is ongoing.

Roadmap

Now that the alpha has been tagged and released, I will be making our working roadmap public → you can take a look at it here

I will be starting a new backlog/roadmap for beta items, and existing backlogged items will be carried over.

Final Thoughts

We wouldn't have even thought to implement ActivityPub if it were not for the funding granted to us by the NLNet foundation. They allowed us the runway to pursue the necessary R&D work, and we're pleased that everything has been pointing positively so far!

This entire time, it has been particularly satisfying to continually see the integration working on this instance (the NodeBB support forum). Expanding the reach of NodeBB beyond the confines of the "local" mindset and into the "global fediverse" mindset has been daunting, but is well worth the price of admission.

I'm happy to also say that now that we've proceeded to the alpha stage, it signifies a commitment toward a beta phase, then an RC, and then towards the release of NodeBB v4. ActivityPub has legs, and we're invested in making it work!