Main docs are at scuttlebutt.nz/docs/protocol. The tecnology section of Ahau webpage has some great animations which help to visually understand some features of the protocol.
The ecosystem has evolved quite a bit, but mature apps can still be hard to understand, as they have so many unique and experimental moving parts. But for me it's about slowly understanding secreat-stack and and how plugins work with it. Manyverse is a great go-to codebase to see a stable ssb setup.
A great job is being done at dev.scuttlebutt.nz's js section to explain the basics. A bit of storytelling can help:
Story: Secret Digital Society
Imagine we're part of a Secret Digital Society which relies on the security of our communication to operate. We first start by giving each member a secret identity, which are ssb-keys.
We then establish a secure protocol for exchanging keys and communicating, which is secret-stack. We have to define a common language (
appKey) for communicating and define common data models:
post for regular messages,
about, for profile messages, etc.
A "common language" is generated by ssb-caps.
Efficient log database
We need to store those messages somewhere. So every member of our network carries a backpack with various copies of everyone's encoded messages. The way messages are organized and kept is called ssb-db. Currently feeds follow this pattern, and lots can be achieved by using it in conjunction with tangles, including CRUT and private-groups.
But a new pattern is being developed, which I still need to wrap my head around. So might be worth diving into that.
Gossip like there's no tomorrow
For establishing our social network safely, instead of relying on DHT's, ssb uses gossip, which is my favorite part, as it simulates how real communities operate.
As long as another person I connect to (ssb-conn) speaks the same language (
appKey), I'll throw all my messages at them.
The path I choose to walk in order to meet people and gossip is determined by my schedule ssb-replication-scheduler, my social graph ssb-friends, and a map to navigate the random roads of the Internet ssb-ebt.
Where to meet people
Locally: If we meet on the same local network, we can use ssb-lan to discover ourselves over mdns.
In an online room: Rooms don't hold data, are very light and efficient and provide very good hole-punching like a tunnel. Easy to connect using http and provide great user-management (go-ssb-room). It's like the Secret Society Lounge, as long as you've been given access, you automatically gossip with everyone who's inside at the same time.
In a pub: Pubs hold data for everyone that it follows. Follows can happen thru invites. A member of our Secret Society works as a bar tender, so he hands out invite codes to be given to trusted new members to the Society. When the person arrives with an invite at the pub, the bar tender will start gossiping all it's messages to that person and also listening to all the person's gossips.
Indexes and blobs
Many other plugins are related to indexing message types (about, votes, posts, searching) and handling binary data, or blobs (storing, serving, purging).
I've personally learned about SSB by playing with the various stacks and libs. When I first fell into the rabbit, Patchwork was the best maintained app, which is very unique, so very hard to understand and tweak. So it felt easier to just build something from scratch then go thru the learning curve of SSB backend.
For me building toy-apps is the best way to learn. From the little I've worked with you @andrew 🐝, I've noticed you're quite good at grasping large complex app ecosystems, such as Mapeo's. What you're process like?