


Co-Founder (NodeBB) | Husband š¤·āāļø and Dad š to three | Rock Climber š§āāļø | Foodie š„ | Conductor šµ | Saxophonist š·
ā
Small teams craft better code.
šØš¦ Made in Canada
šØļø Federating NodeBB with funding from NLNet ā„ļøšŖšŗ

Forum specific UX for remote categories
The upcoming possibility of browsing to remote federated categories/communities has me thinking about interesting use cases for it.
Note that Lemmy, PieFed, mBin, and other "community-centric" software already do support this, so it's nothing new, I'm actually playing catch-up.
One interesting use case centers around NodeBB's /unread
route, which tracks new topics since your last visit. Since ever, and even now in v4, this is only for local categories, but if you're able to "subscribe" to a remote category, then we could enable use of this page for that content too.
Think about waking up and seeing a self-curated feed of new content from your subscribed communities! There are some interesting parallels to RSS here, too.
What other forum-centric use cases do you think would be enhanced by the ability to browse remote categories?

@bentigorlich@gehirneimer.de okay :+1:
Apologies for not mentioning you up top. I did not know you were the maintainer for mbin, but now I do! :smile:

@bentigorlich@gehirneimer.de ah that's good to know.
Perhaps the solution is to use audience
if explicitly defined, then fall back to to
/cc
otherwise.

Signifying an audience in an object (PieFed/Lemmy)
Hi @andrew_s@piefed.social/@freamon and @nutomic@lemmy.ml āI'm working (not-so-secretly) on refactoring NodeBB so that it is able to "browse" remote audiences/group actors, and that would include things like PieFed and Lemmy communities.
N.B. Given varied nomenclature (group/category/community/subforum), the ForumWG calls this structure an "audience".
Where I am at now is working through the logic for slotting an object into a category.
The most obvious choice here would be to look at as:audience
. It's even specified in 1b12, and the majority of threaded implementations follow 1b12.
I am making this post because nutomic explicitly removed the audience
from being served in Lemmy (as of January this year), so I don't think relying on that property would be wise.
I asked

@bh4-tech might be not working because I did not expect urls. Can you try a handle like dansup@mastodon.social
?

@bh4-tech can you supply the URLs you tried to follow please?

@eeeee there's no difference in follows if you're admin vs non-admin.

@eeeee follows do need to be accepted, although it's configurable. Most software auto accepts, but delays in messaging mean sometimes the requests or responses get lost.
Cancel that follow and try again, and it might be accepted.
You see the settings cog because you're an admin on your instance.

I forked the topic, it deserves a longer reply and isn't as related to the earlier topic.
@reynir@forum.fedi.dk that's a very good question, and having experienced it firsthand, I will share what happened.
I started a climbing news aggregator based off of NodeBB at https://news.crag.social/, and enabled federation. Later on, the forum rebranded under the OpenBeta umbrella and the domain name changed to community.openbeta.io
.
This was the best case scenario, a NodeBB to NodeBB move. Every user maintained their accounts, maintained their public keys, and the only thing that changed was their id
. I set up a blind 301 redirect to the new site, so every single URL (whose structure was unchanged, remember) went to the new URL.
Everybody still lost all their followers. The problem wasn't on my end, it was that remote users are tied to their ID and even though I left a redirect on the old domain to the new one, the support for this in other software is basically zero.
There are efforts to look into this, re: Account Portability, but I am unsure of the status of this work.

@bh4-tech NodeBB crashes when you navigate to a post from Threads containing a link?
Can you share the link here? Will it crash? Let's see š

@bh4-tech does the video or whatever load properly after you refresh?

Mainstream adoption of ActivityPub vs. DIY indie hacking
@hamishcampbell@mastodon.social recently made a statement that got me thinking about our place in the open social web, and the direction it's going.
He says to @deadsuperhero@social.wedistribute.org and @evan@cosocial.ca re: SXSW
> #FediverseHouse this feels like an irrelevant echo chamber, I really miss the grassroots #DIY that built this space in the first place. This #maistreaming is too much noise vs signal... currently the grassroots #DIY space is a hollow shell
(two posts combined)
That immediately got me on edge as someone new to ActivityPub in 2024. Does this mean I'm "mainstream", and somehow "bad"?
Mainstream adoption is good and a step in the right direction. I personally think ActivityPub isn't ready for general mainstream consumption, but we as a group are ra

@jwr1@kbin.earth interesting how the mentions for our local users (@julian and @baris) autocompleted with the kbin.earth domain.

@johnonolan@mastodon.xyz no worries, and thanks! Will do.

@freamon thanks, will have to mock up an update and send it their way specifically I guess.

@kspatlas@kbin.earth the post itself has the correct timestamp doesn't it? I'm asking because I can't really tell for sure since I'm unfamiliar with kbin/lemmy

@kspatlas@kbin.earth loving how this is messing with AP instances everywhere lol.
I updated the timestamp but it doesn't seem to have propagated over to your instance!

Minutes from 6 March 2025 WG Meeting
March 2025 ForumWG Minutes
Apologies in advance if I misrepresented anybody or missed any crucial bits of information.
- Julian provided a brief summary of the state of conversational contexts
- two-pronged approach: top down (feps), bottom up (implementors)
- IceShrimp.NET (waiting and watching)
- Already exposes context collections, integration testing pending
- Mitra
- Implemented (top-level only) context collections of objects, tested and working
- Julian said 7888 is object-based contexts, 171b is activity-based contexts and notes that activity-based context can be more comprehensive (incl. likes, reactions, updates)
- a (@trwnh@mastodon.social) notes that 7888 is more generic and doesn't specify object-vs-activity; notes there is also a missing link between an object and its
Create
act

@mario@hub.somaton.com when you say "internally backfills", I'm assuming you mean between Hubzilla instances?
Is this done via context
containing activities, or objects?
Edit: Cursory examination suggests you're following 171b, serving activities.

The ForumWG meeting is coming up in one hour. You can join at the following Jitsi link:

@frankm@linux-nerds.org this is now done. Turns out I wasn't actually stopping a category from following a user, so that didn't need rolling back.
https://github.com/NodeBB/NodeBB/issues/13232
@hamiller@forum.wedistribute.org using a hashtag is probably also something I should allow categories to follow, although that's local-only to the instance because of how hashtags work.
Either way I didn't want to restrict a valid use case :)

@vijay-kumavat possibly, yes.
This would be something you'd do in the markdown plugin.
For example, there is some simple logic in there right now that checks if you're writing a list, and if you paste text in, it automatically prepends *
for you.
You'd want to have that plugin look for formatting and rewrite it in markdown.

@frankm@linux-nerds.org the reason why I'm hesitant about this is because allowing a category to follow a user bakes in the assumption that everything the user posts is relevant.
If you're following something like the linux foundation that's a pretty safe bet for a Linux category, but what if you follow a user and they start sharing or posting about unrelated things, like what they had for breakfast, etc.?
That's where things could get messy.
But, I absolutely love :heart: the idea of creating a category and making it sort of like a curated channel based around one idea.
This is the kind of cool stuff I want to see!

Agenda Prep for March 2025 WG Meeting
Agenda preparation for the February ForumWG meeting can be found at this public link (anyone can make comments for review.)
Monthly meetings are held on the first Thursday of each month, at 13h00 to 14h00 Eastern Time (currently 18h00 to 19h00 UTC). You can find them listed in the SocialCG Calendar. The next meeting will be held on 6 March 2025.
We will be discussing:
- Housekeeping
- Daylight savings time Monday, ForumWG meetings track Eastern Time
- EST ā EDT (lose one hour)
- Update ā State of Conversational Contexts (Julian)
- https://community.nodebb.org/topic/18647/the-state-of-conversational-contexts-february-2025
- IceShrimp.NET (waiting and watching)
- Already exposes context collections, integration testing pending
- Mitra
- Implemented top-level context collections of objects, int

Recommend object URL should 301 to AP resource
Wanted to start a convo with @johnonolan@mastodon.xyz from Ghost and @angus@socialhub.activitypub.rocks from Discourse about AP resource discovery.
A common use case from fediverse users is to be linked out to a site, and attempt to "bring it in" to their local instance/app of choice. This is done by taking the browser URL and pasting it into their site/app's search bar, or equivalent.
For example:
- Ghost: https://activitypub.ghost.org/warp-factor-5-mr-sulu/
- Discourse: any forum topic
For context, last night I discovered that Ghost's latest blog post didn't make it into NodeBB, due to a bug on my end. I attempted to resolve it via URL but there was no AP resource at that URL. I ended up having to query the instance actor (which I happened to already know), and looking at the outbox.
To my knowledge there is no way to find a Discourse post

Microsoft Is Shutting Down Skype, Shifting Users to Teams
Hey, remember Skype? I do. When I joined my first tech company (making silly little Facebook games back when that was a thing), they were coordinating over emails and in-person desk visits. First thing I did as an unpaid intern was move the dev team onto Skype.
We used it for so long we have some Skype emoji on this forum too :voodoo: :wave2: :mooning:
So long Skype, and thanks for all the fish.
https://www.pcmag.com/news/microsoft-is-shutting-down-skype-shifting-users-to-teams

NodeBB 4.1.0
We just released version 4.1.0 of NodeBB. Here are the latest features you can now take advantage of!
As an aside, for the first time in a long while, both @baris and I are working on the same codebase again. Up until version 4 was released, I'd been working on the activitypub
branch and periodically merging in the latest changes from develop
. It's nice to be home! :house_with_garden:
Improved federation of Group actors :left_speech_bubble:
We've improved the activity synchronization for followed group actors. Local updates/likes/etc. are now federated outward by the category in addition to those from remote users. Thanks to @rimu@piefed.social and @freamon who worked with me on debugging this one.
Mentions and Emoji now federating

A fond farewell to the NFC Ring community


We received word recently that one of our long-standing clients, NFC Ring, is planning to shut down their forum toward the end of the month. While this is normally a sad time, it's worth mentioning that NFC Ring has been hosting their forum with NodeBB for over ten years! They've been with us just about as long as our self-serve hosting service has been, along with all of our ups and downs over the years.
Their forum contained a couple custom integrations, along with the earliest known NodeBB SSO plugin, and had a custom theme at one point as well.
These innovators envisioned the idea of paying for groceries with the tap of a ring years before that technology became ubiquitous. Super cool.
Nevertheless, their trust in us (a dinky little company in 2013) did not go unnoticed, and we wish them the best!

NodeBB on FediDB
Hey @dansup@mastodon.social, can I poke you about getting NodeBB on FediDB?
It automatically picked up a couple NodeBB sites, so I think the nodeinfo stuff is working, just not sure if it required some manual intervention on your end to get the software link working ā it currently 404s.
Cheers :flag-ca:

The state of conversational contexts (February 2025)
A conversational context is what the ForumWG uses to describe what you might see as a reply tree or comment thread. One of the short-to-medium term goals of the ForumWG is to get conversational backfill working reliably.
What this means ā conversational backfill means that when you encounter a post/status/note/etc. (e.g. you're mentioned or boosted/shared something), there is a reliable and comprehensive way to retrieve the entire conversation around it, so you are not interacting with the object on its own, but in its proper context with all its sibling replies.
We plan to achieve this with a combination of a top-down (FEP-driven) and bottom-up (implementor-first) approach. While this sounds incongruent, top-down approaches tend to overcomplicate and bottom-up approaches tend to violate the protocol (unintentionally of course :joy:.)
There are a number of independent top-down efforts to achieve this:
- [FEP-7888: Demystifying the context property](https://community.nodebb.

New federated testing instance for NodeBB
For awhile now we've hosted https://try.nodebb.org/ as our demo instance for people to see a plain NodeBB instance.
I have added a federated category on that instance now. You can of course still make test posts to this instance, but you can also feel free to fill @federated@try.nodebb.org with garbage instead :laughing:
Please note that the "try" instance of NodeBB is reset every 24 hours, which means all follow relationships, content, etc. will only last at most that long. If you follow the category or an account on that instance, those categories/users will "forget" you followed them.

switch(true) gotcha
I discovered this week a little footgun if you happen to use this bit of syntactic sugar:
undefined
const object = { foo: 'bar', } switch (true) { case object && object.foo: { // This will never execute } default: // ... }
The cases in your switch(true)
must actually return true
, not truthy, for the case to execute.
Using switch(true)
is a bit of a controversial coding practice, since it's only meant to replace long if..else if..else
chains. Literally has no additional utility except aesthetics... but I like it nevertheless :joy_cat:

FEP 7888 serving up an OrderedCollection
Just wrapped up a call with @pfefferle@mastodon.social and @jesseplusplus@mastodon.social to review their implementations of FEP 7888, specifically in relation to conversational backfill.
:heavy_check_mark: individual objects serve a context
property
:heavy_check_mark: that context
property is a URL that resolves
One of the concerns raised was related to the OrderedCollection of items served by the context
. Specifically, if the items presented in the collection were not in chronological order, NodeBB failed at importing some of the items as the inReplyTo
referenced an object that did not exist.
The solution to this was to ensure that the collection items were in chronological order from oldest to newest. Once fixed:
:heavy_check_mark: the context resolved to an OrderedCollection containing objects :heavy_check_mark: NodeBB was able to pull in

Beautiful Mind (a forum migration story!)


We were contacted recently with a client request to migrate a forum into NodeBB and launch to a large audience very very rapidly.
Naturally, we said yes.
The client's team did the migration using the Write API, and handed over a MongoDB import for us to import. They also built a brand new theme from scratch.
With the forum migrated and deployed, they launched today with a staggered release: an email blast followed by a 6pm Instagram push.
This is what that looked like :grimacing:

With a large client like this we'd typically opt for a scaled setup with a load balancer, but we wanted to see how far we could push a single NodeBB installation. At 2pm we ran into the limitations of a single vCPU and doubled the resources. In the end we were able to handle the largest load (the 6pm Instagram launch) with 4 vCPUs on a virtual private server with 8GB RAM.

Minutes from 13 February 2025 WG Meeting
The full minutes from the Forum and Threaded Discussions Task Force monthly meeting (held on 13 February) can be found at this Google Docs link
Apologies in advance if I misrepresented anybody or missed any crucial bits of information.
February 2025 Minutes
- The meeting was deferred a week due to Julian being out of the country, but this time conflicted with the Geosocial TF and perhaps it would be easier to just skip the month instead.
- Julian attempted developer outreach in the weeks leading up to FOSDEM (and at FOSDEM), specifically relating to FEP 7888 and resolvable contexts.
- Much of the feedback revolved around the perceived complexity of the FEP
- A separate attempt to focus more on outcomes (e.g. conversational backfill via 7888) led to more positive feedback
- This led to the desire to modify FEP 7888 away from being a (perceived) monolithic FEP into a

1b12 vs Guppe groups
@panos brought up something interesting recently, which is that Lemmy communities don't boost everything (at least when viewed from Mastodon), but just the original post.
I wasn't sure whether this was intentional (because 1b12 definitely specifies that everything is boosted, replies and all). The only explanation I can think of is that 1b12 boosts activities, and Mastodon doesn't understand that, so it's actually an implementation quirk that causes Mastodon to not actually see the entire conversation.
NodeBB used to Announce(Note)
and Announce(Create(Note))
, and it meant that Mastodon was seeing everything. This was desirable from a synchronization standpoint, but it meant everything was going into Mastodon user feeds, which was @panos' concern.
I think Guppe (which is kind of like 1b12? Not sure) boosts everything, but again, am not 100% sure.

Agenda Prep for February 2024 WG Meeting
Agenda preparation for the February ForumWG meeting can be found at this public link (anyone can make comments for review.)
Monthly meetings normally are held on the first Thursday of each month, at 1700 to 1800 UTC. You can find them listed in the SocialCG Calendar. The next meeting will be held on 13 February 2025 due to my being out of the country last week.
We will be discussing:
- Long-form text and resolvable context updates from FOSDEM
- Concerns regarding developer accessibility of FEP 7888
- Live brainstorm/whiteboarding session re: long-term focus of threaded conversation FEPs
As always ā time permitting ā if you'd like to speak or inquire about a certain topic, comment in the agenda or reply here, the floor is open!

ForumWG delayed one week
Hello all,
Just a quick note that the Forum and Threaded Discussions Task Force meeting is delayed one week as I am out of the country currently, returning Monday.

Long-formers Activate!


Among the fediverse there are microblogs (your Mastodons, Misskeys(+forks), etc.
Then there are the long form peeps. We managed to all find each other at FOSDEM 2025.
Pictured is @matt@writing.exchange (Write freely), @pfefferle@mastodon.social (WordPress), and yours truly (NodeBB). We also had some good conversations with @johnonolan@mastodon.xyz (Ghost), but I wasn't quick enough with my camera š©
Let's move the state of long-form text on the open social web, forward!
