Announcing: SSB Rooms

2019-08-29
André Staltz

Today I'm launching something I've been working on since May to help improve the Secure Scuttlebutt (SSB) ecosystem with a new type of server: SSB Rooms. As an alternative or complement to pub servers, rooms are servers intended as meeting places where peers come to discover others and establish network connections with each other.

Screenshot of the web interface to an SSB room server

Pubs: always-online mirrors of data for friends

So far, to join the Scuttlebutt social network, people have had to search for pub invite codes, and this has been often inconvenient, for both pub administrators and people seeking for invite codes. For pub administrators, having their pub expose invite codes to the public meant that the server could easily overload with data from thousands of people. Many pub operators opt instead for private invite codes. For people interested in using SSB, it can be difficult to find an open pub just to experiment with SSB, and even when encountering one, it often had too much data that was excessive for an initial user experience. Some years ago I made easy-ssb-pub, which were pubs with open invite codes, a decision I regret.

The truth is pubs were never intended for discovery and onboarding of strangers. The pub concept is meant as an always-online mirror of data for a relatively tight-knit community. Invite codes were meant to be assigned case-by-case to trusted friends who were being pulled in by the existing Scuttlebutt community. That's how pubs work best.

Rooms: public meeting spaces around a common interest

Rooms are an alternative to Pubs with important differences: rooms do not store any user data, but instead allow currently online people to connect to each other and synchronize their feeds. Rooms also have a website interface and open invite codes, with the explicit purpose of connecting strangers with each other.

The Scuttlebutt social network relies heavily on peers trusting each other, but so far it hasn't had a way to encounter complete strangers and build trust with them. People who are interested in trying out Scuttlebutt often feel like the required trust in peers becomes a barrier to use the technology.

Rooms are the digital equivalent of meet-ups: spaces that host people interested in the same topic, allowing them to get to know each other and perhaps build friendships and therefore community. The use case for SSB rooms is like IRC rooms or channels: there should be an SSB room per topic or public interest or community.

The caveat is that, like IRC channels, you can only connect with accounts that are currently online in the same room. That said, you can still fetch the updates of an offline friend if another account online in the room also follows that offline friend, thanks to the gossip nature of data propagation in SSB.

On the other hand, rooms do not entirely replace pubs, because it's still convenient to connect to pubs as always-online mirrors of data from your friends. Rooms and pubs are complementary!

Join the experiment!

Rooms are already supported in Manyverse (from version 0.1908.12 or higher) and support for Patchwork is soon ready (a pull request is awaiting review). To start using rooms, the easiest way is to run your own room server! Follow the instructions how to do it with no developer skills required, and you exclusively in the browser. I'll personally be inviting some people to rooms I know.

Screenshot of Manyverse open on the Connections tab, displaying a room server with two other online peers

It's necessary to mention, though, that this is still somewhat experimental, and there are a couple of issues (listed below) to solve before rooms are good for widespread usage.

Initial sync can be heavy. Upon joining a room, some of the strangers there online can have large social databases (such as my own 3-year old account), while others can have a nearly empty database. If you happen to connect to an account that has a lot of data, your app might begin synchronizing with them, and this can take several minutes. The user experience may be entirely unresponsive during that time! Usually after 1 hour it completes. Performance of the initial sync is still one of the top 3 problems to solve in SSB, and while I have myself recently tried to fix the initial sync experience, we're not there yet. We will get there eventually. So if you stumble upon an account with the ID @QlCTpvY7p9... or @+UMKhpbzXA..., those are my two accounts which are known to have a lot of data. Other current SSB users can also have similar databases. Be patient!

Strangers can initiate connections with you. When in a room, you will see strangers and you can choose to connect with them. This also works the other way around: those strangers can choose to connect with you, and your app will suddenly show an active connection with them. Sometimes this can be undesired, given that they are strangers. So far we don't have a two-way consensual system, and in the future it will make sense to build a handshake system where the stranger requires your explicit permission before connecting to you. That said, you can always block any account to prevent them from connecting with you in the first place.

Privacy versus strangers. Because the purpose of rooms is to connect strangers with each other, you should avoid connecting to a room if you don't want that. When choosing a room, be mindful of who is operating it, what topic or interest the room represents, and whether you can trust that information. Read more about room privacy here.

Conclusion

This took me a lot of work in July and August, and demanded the rewrite of the Gossip plugin in SSB, but it's finally ready for real-world experimentation! I'm looking forward what it can do for people interested in trying out Scuttlebutt. I also need to thank many persons who helped develop or review it: Dominic Tarr initially wrote ssb-tunnel which is the core logic for peer connectivity, and people on Scuttlebutt who gave comments and reviews: cryptix, cinnamon, Christian Bundy, Mix Irving, Mikey, masukomi, Prof. Christian F. Tschudin, and many others. NLnet and NGI Zero are also funding this project with 2000 euros. While I'm working full-time on this, funding is still less than full-time, so please help us out on OpenCollective or via cryptocurrencies.

Go give rooms a try, either by starting one yourself or exploring the hashtag #ssbroom on various social platforms. And I'm always open to feedback and comments via email or Twitter. :)

@andrestaltz