Comment on Nomad-capable server for an NGO
@Jupiter Rowland
As far as I understand it, Forte should not be viewed as "(streams) without Nomad". It is better understood as an attempt to reimplement the capabilities of Nomad on top of ActivityPub, using a collection of emerging Fediverse Enhancement Proposals (FEPs) and a few project-specific mechanisms.
This is clearly the primary goal.
Historically:
The OpenNomad project explicitly states that the long-term objective is to bring technologies such as:
into the ActivityPub ecosystem rather than keeping them exclusive to the Nomad protocol.
This appears to be one of the key building blocks.
The idea is simple:
Instead of identifying an actor solely by
the actor receives a portable identity based on a cryptographic identifier (conceptually similar to DID).
The URL becomes just one representation of that identity.
Isn't it exactly the direction Mike has wanted for many years?
FEP-ef61 is still a draft, but Forte is frequently mentioned in discussions around its implementation.
Another major piece.
Nomad always relied heavily on cryptographic identity.
ActivityPub originally did not.
Several FEPs now introduce:
Without these, portable identities are difficult to secure.
This is another important change.
Traditionally:
The proposed direction is:
That makes identity independent of the server.
Again, this is very much aligned with Nomad's philosophy.
This one is already much more concrete.
OpenWebAuth (formerly Magic Sign-On) has now been documented as its own FEP.
It provides federated login between independent sites without relying on OAuth providers such as Google.
The specification explicitly mentions compatibility with Hubzilla, (streams), Forte and ActivityPub-based deployments.
This one is interesting.
One weakness of ActivityPub is that conversations are reconstructed heuristically.
Nomad had a much richer conversation model.
There are now proposals for "conversation containers" intended to preserve discussion context much more reliably across servers.
These are still evolving.
This is the part that is not yet solved.
Today:
Hubzilla can clone Hubzilla channels.
(streams) can clone (streams) channels.
But ActivityPub software generally cannot.
The Hubzilla documentation still explicitly says that AP contacts cannot participate fully in Nomad cloning because ActivityPub lacks the necessary concepts.
So this remains one of the major gaps.
The "holy grail", IMHO.
The goal becomes:
with a single portable identity moving between all of them.
That is what several of the current FEP discussions are trying to enable.
So, the effort appears to be:
As far as I understand it, Forte should not be viewed as "(streams) without Nomad". It is better understood as an attempt to reimplement the capabilities of Nomad on top of ActivityPub, using a collection of emerging Fediverse Enhancement Proposals (FEPs) and a few project-specific mechanisms.
1. Nomadic identity
This is clearly the primary goal.
Historically:
- Hubzilla → Zot6
- (streams) → Nomad
- Forte → ActivityPub
The OpenNomad project explicitly states that the long-term objective is to bring technologies such as:
- nomadic identity,
- portable identity,
- identity proofs,
- access control,
- conversation containers,
into the ActivityPub ecosystem rather than keeping them exclusive to the Nomad protocol.
2. FEP-ef61 (Portable Objects)
This appears to be one of the key building blocks.
The idea is simple:
Instead of identifying an actor solely by
https://server.example/users/alicethe actor receives a portable identity based on a cryptographic identifier (conceptually similar to DID).
The URL becomes just one representation of that identity.
Isn't it exactly the direction Mike has wanted for many years?
FEP-ef61 is still a draft, but Forte is frequently mentioned in discussions around its implementation.
3. Object integrity proofs
Another major piece.
Nomad always relied heavily on cryptographic identity.
ActivityPub originally did not.
Several FEPs now introduce:
- cryptographic signatures,
- proof of ownership,
- object integrity.
Without these, portable identities are difficult to secure.
4. Client-side signing
This is another important change.
Traditionally:
User
↓
Server signs everythingThe proposed direction is:
User signs
Server relaysThat makes identity independent of the server.
Again, this is very much aligned with Nomad's philosophy.
5. OpenWebAuth
This one is already much more concrete.
OpenWebAuth (formerly Magic Sign-On) has now been documented as its own FEP.
It provides federated login between independent sites without relying on OAuth providers such as Google.
The specification explicitly mentions compatibility with Hubzilla, (streams), Forte and ActivityPub-based deployments.
6. Conversation containers
This one is interesting.
One weakness of ActivityPub is that conversations are reconstructed heuristically.
Nomad had a much richer conversation model.
There are now proposals for "conversation containers" intended to preserve discussion context much more reliably across servers.
These are still evolving.
7. Channel cloning
This is the part that is not yet solved.
Today:
Hubzilla can clone Hubzilla channels.
(streams) can clone (streams) channels.
But ActivityPub software generally cannot.
The Hubzilla documentation still explicitly says that AP contacts cannot participate fully in Nomad cloning because ActivityPub lacks the necessary concepts.
So this remains one of the major gaps.
8. Cross-platform nomadic identity
The "holy grail", IMHO.
Today
Hubzilla <--> Hubzilla
Streams <--> Streams
Mastodon <--> MastodonThe goal becomes:
Hubzilla
\
\
Forte
/
/
Mastodon
\
\
Friendicawith a single portable identity moving between all of them.
That is what several of the current FEP discussions are trying to enable.
So, the effort appears to be:
"Let's teach ActivityPub how to do what Nomad already does."
I was there when Mike created Forte. I saw why Mike created Forte. I felt the consequences of why Mike created Forte. And I was one of Mike's contacts.
Ca. 2023
Mike got into contact with silverpill who wanted to make Mitra every bit as nomadic as Hubzilla and (streams), but only using ActivityPub. Both figured out that this was actually doable, as in, that even something like (streams) could one day be re-based on ActivityPub.
Mike started dreaming of a nomadic Fediverse in which everything could be cloned to everything.
He created a "nomadic" branch of the streams repository for research and development purposes.
Around early 2024
One key element for nomadic identity via ActivityPub was to have server-independent, decentralised Fediverse identities. These, however, would have to be up front. Thus, FEP-ef61 "Portable Objects" was created.
Both Mike and silverpill started implementing it; Mike did so in already nomadic software, namely the "nomadic" branch of the streams repository.
Channels created on accounts that were registered before (streams) supported FEP-ef61 would continue to use the old IDs internally, but decentralised IDs outward.
June, 2024
Mike was confident enough in the "nomadic" branch which worked reasonably well from his perspective. So he merged the "nomadic" branch into the normal "dev" branch.
July, 2024
I created a new (streams) account with two channels.
Shortly after, Mike merged the "dev" branch into the "release" branch. This caused decentralised IDs as per FEP-ef61 to be rolled out to production servers.
But what had worked under controlled lab conditions completely blew up in the real world: (streams) channels on accounts that were registered before FEP-ef61 did not properly federate with anything anymore, mine included. Content wasn't delivered anywhere anymore, not even within (streams). Mike had no idea at first what had happened.
August, 2024
Mike had figured out that (streams) had to juggle so many different IDs that it had started confusing them. He had to sort out the mess.
Mid-August, 2024
Mike announced the creation of Forte in a restricted message to his contacts. He had basically taken (streams) and ripped out any and all Nomad and Zot6 support to get at least some IDs out of the way so he could fix the bug.
Nonetheless, Forte was fully nomadic at this point.
The other reason why Mike had created Forte was because he had learned that it was foolish in today's Mastodon-dominated Fediverse to deprive (streams) of a name, a brand identity, an actual license and nodeinfo code. The latter had made it next to impossible to find (streams) servers.
Late August, 2024
(streams) had started working again. Everyone was relieved.
But Mike was burned out. In another restricted message to his contacts, he announced his retirement from Fediverse software development, effective August 31st, 2024. (streams) and Forte were up for grabs.
September, 2024
Nobody was found who could continue. Waitman Gobble said he'd like to, and he could, but he had no time. Bill Statler said he'd like to, and he had the time, but he didn't know how to code.
So Mike had to carry on, but at a slower pace.
Mid-September 2024
Mike officially announced the existence of Forte in public as opposed to only to his bubble. He would not have done that if Forte hadn't been fully nomadic.
From what I've read, limitations of ActivityPub kept Forte from real-time syncing, so a timer had to be used to trigger the syncing.
April, 2025
Mike publicly announced the first stable relase of Forte. Apparently, at this point, Forte was capable of real-time syncing, i.e. of syncs being triggered by changes in the channel rather than by a timer.
The only limitations now was that it wasn't possible to move or sync between Forte and something else due to how different other nomadic Fediverse software is, and that Forte didn't have an ActivityPub switch as a last-resort anti-Mastodon drawbridge anymore.
I was hoping for more history up to the present…
So it feels like Forte is still not ready to serve as a work-horse in heavy-use scenarios.