André Staltz

Early days in the Manyverse

This week I launched Manyverse, a Scuttlebutt mobile app that I’ve been working on for a year and a half in semi-stealth mode. I finally finished reading the initial burst of Twitter mentions, private messages, emails, Scuttlebutt messages, and GitLab issues. I’m overwhelmed by the positive reactions and support. Thank you!

I’m also noticing the kinds of early struggles people are having when using the app, and I want to help. I answered some questions directly, but a blog post is better to expand better in details. Some of the struggles are due to the app being so early and not well polished, but other kind of struggles are due to Manyverse being simply very different to your typical social media app. So let’s talk about it, grab a drink. Consider this a Frequently Asked Questions section (which might actually turn into an FAQ page somewhere), but dedicated specifically to early adoption struggles.

It’s actually off-grid

The app is described as “off the grid”, where you and your friends’ data is stored in your phone. This is true, and has deep implications in the way you interact with people. This is very different, because most social networks are online, even the decentralized ones like Diaspora* or Mastodon. Manyverse is not on the internet, it’s on your phone, literally.

The most important question once you install any social app is how do I connect with other people? Typically, you search for names or usernames, or you browse through existing content and pick interesting accounts. None of that happens on Manyverse, because there’s no data center or “digital public square” where you go and meet people. There is only other people’s phones (and desktops running Patchwork, a sister project to Manyverse), so how do you connect with those phones?

You need to be invited. And for that, you need to have or earn the trust of other users, because after all, their phones will host your data. And your phone will host their data as well. It’s a two-way agreement, and that’s why no one can unilaterally send unsolicited messages to others. Reciprocity is important. This may sound way too inconvenient to function properly, yet this is closer to how real world human relationships functioned before smartphone addiction took over. You need to earn the trust of someone to visit their home, and vice-versa. This kind of social agreement is how the Scuttlebutt community (of at least 8000 people) has been thriving, I use it everyday and it feels genuinely different to any other online community. People are very nice.

It could have been a coincidence that a decent decentralized protocol also has a decent community, but we think these social dynamics are prefigured by the protocol’s choice to be a network of trust. Storing people’s data is the digital form of hospitality. The impossibility of inserting yourself into someone’s social circles is unusual for an everyday Twitter user, but it’s also the thing that prevents spam, harassment, and every kind of unwanted random interaction. We have gotten used to very strange social dynamics on the internet, so something like Scuttlebutt – closer to natural interactions – feels unfamiliar.

Not only are invite connections more natural socially, they are the right way to build an off-grid social network, one that has potential to reach billions of people without reliable internet connection. If you’re in a village in the Amazon rainforest without internet connection, and you want to connect with friends in a town on the Brazilian coast (potentially also offline), you’re not going to search a gigantic directory of usernames hosted in a data center, because you don’t have internet to begin with. You have nothing else than your phone. Maybe, though, a friend nearby has some data in their phone which interests you. So you could politely ask them to share their data and bring you up-to-date. That’s how a social network off the grid would function, and we want to build the missing pieces (such as Bluetooth sync, faster and prioritized sync, etc) until that vision is easy and convenient. It does not sound like the everyday life of Americans and Europeans online 24/7, but there are many people who cannot rely on stable, cheap, and fast internet connection. Manyverse aims at working for the entire human population, and I think that even the 24/7 online countries can learn a new mode of social networking, specially if it’s more humane and protected than typical social media is.

Hoping that this lays out the motivation behind off-gridness and the lack of username directories, let’s talk about how to create and claim invites.

Internet P2P invites

In the Connections tab in the app, you can create a so-called Internet P2P invite code, and share it. I have seen people share invite codes publicly on the web, and you should not do that. An invite code is meant for only one friend. In fact, it doesn’t work for multiple friends, just for the first friend who claims it. This is important for reciprocity, but also important so that random strangers cannot connect with you. Even if you’re comfortable with the idea of random strangers talking to you, it just wouldn’t scale if all those strangers are adding data into your phone, specially in a decentralized network without an authority of company-assigned moderators. You do not want strangers uploading random data into your phone. So keep in mind that an invite is an actual invitation to insert data into your phone.

That said, these invite codes have not been working so well. First of all, you must be online at the same time as the other friend is, so both of your phones find each other, enter into an agreement, and exchange data. Even if you’re both online, you might experience bugs where the two phones don’t quite seem to find each other. This is somewhat mysterious, and hard to debug. When I built this feature, I thought about how to test it, but I was confused how I was going to get hundreds of IP addresses from different smartphones around the world connected to diverse mobile carriers. We had to launch and see how often would it succeed, but the internet is not optimized for phones talking to other phones through different kinds of carrier NATs. It’s more optimized for phones talking to data centers.

But this will get much better in the near future. I plan on adopting the newly released hyperswarm P2P technology that the Dat team has worked on. They also have faced issues with P2P connections not quite working well, and have dedicated to solve this problem better than I could. It won’t take too much work to adopt their solutions, so expect to see P2P invites get much better in Manyverse, soon.

For now, there are two workarounds you can try. Some P2P connections work better through Wi-Fi than they do through mobile data. So, follow these steps: (1) put your phone in airplane mode, (2) turn on Wi-Fi while still in airplane mode, (3) restart your phone (this has the effect of resetting network interfaces), (4) open Manyverse, (5) try the invites and wait until your friend is online at the same time. Also get your friend to follow the same instructions. Let me know by email or Twitter if this method worked.

The other solution is to use a different mode of connection, such as Internet servers, also known as “Pubs” in Scuttlebutt terminology. You may have seen public invite codes for pubs, and this may have worked well for you. Pubs are mirror servers, that store copies of people’s data from people in some community. Therefore, they represent some existing and potentially large community, usually the social circle of the person who owns that server. If you find someone who runs a Scuttlebutt pub, you can reach out to them and politely ask for invite. Try to earn their respect.

Initial sync

Because pubs often represent large and existing communities, they contain a lot of data. Once you add the invite code into Manyverse, it will begin downloading all of that data onto your phone. Remember, you can’t quite browse that data without downloading it.

This download process may take a while. A long while, for some pubs. We call this the initial sync. It could be downloading 200MB, or even 1GB, so choose pubs that you know contain people you’re interested in socializing with. And keep your phone charging. It’s easier to do this overnight, because the phone will be focused on just downloading and reindexing the local database. It might even physically get hot.

I know this sounds crazy, I also think it’s crazy. But there are two positive things to note. First is that once the initial sync is done, you probably will not have that problem again, and the user experience will be smooth. In fact, much smoother than online social networks when you can scroll through a lot of content with minimal or no loading, because content is already on your phone. Second, we want to solve initial sync properly so that it’s not crazy, and we’re already actively developing some solutions that prioritize and schedule the downloads so they don’t disrupt user interaction or drain hardware resources greedly. Like P2P invites, this is also something we want to fix in the very near future. Expect it to get much better.

How it should be

Invites and initial sync are user experiences that will improve in the near future, but there’s still much more to build for the long term. There are countless features that still need to be built, such as the obvious ones you expect from any social app, but also beyond. Let me describe what I envision “Manyverse 1.0” to be.

Supposing you’re offline, the app will make it easy for you to write a diary or scroll through existing content. We also want to find ways how to reduce emphasis on new content in the feed, since your phone will also contain plenty of old content that you may have not read yet. For people who spend many days without internet, this will be important.

Then, when you are online, your phone will begin to look for other friends also currently online, and will establish P2P connections with them. You should be able to chat with those friends online, in a private off-the-record mode. If your local database is outdated, your phone will gently begin downloading content from those friends, respecting bandwidth limits and prioritizing the CPU for user interactions, not database reindexing. When the app goes to the background and/or the phone is charging, then database reindexing can use CPU resources.

If you have tried Manyverse, it’s early software that barely works, but I want to evolve it a lot. I’m committed to doing this for many years if income allows. I want to be able to work on this full time, because software like this needs constant issue triage, maintenance, feature development, and care for the overall app architecture. I ask for your help with this Open Collective page where you can become a backer. Or, convince an organization or company to donate. With enough funds I also want to enable other developers to work on this as well. It’s many developers’ dream to work full time on open source software without commercial intentions, doing something that benefits everyone and does not exclude underprivileged people in other continents. I hope we can do that together.

If you liked this article, consider sharing (tweeting) it to your followers.

Become a Patron!

Copyright (C) 2018 Andre 'Staltz' Medeiros, licensed under Creative Commons BY-NC 4.0, translations to other languages allowed. You can make sure that the author wrote this post by copy-pasting this signature into this Keybase page.