Sunday, 29 March 2015

O2M - The Distributed Social Network

For a brief introduction of this project that I'm working on, please see the README file on my Github page (

This year, I decided to make something that I've been thinking about for a while: a social network that really is a network of friends, each with their own computers capable of serving information out to the world. The concept is quite simple, your data stays on your computer and is sent to your friends on demand.

Instead of being 'friends' with someone, you must actually register your friendship with them. At the moment, there isn't a friend-adding mechanism ( but you could imagine that I would send my digital contact details to someone I'd like to be friends with. Once they have those details, they may decide to send me back there details, at which point I could allow them access to my posts.

Once friends with someone, you can write content as always in a web browser connected to your own web server. Half of your own web server serves a website for editing content, adding friends and changing your details. The other half is responsible for exposing your content in a JSON format for you AND your friends. This allows your friends to leave links to their content on your server. So long as you're the original poster, the links will stay on your machine.

The beauty of this kind of architecture means that you don't have to be at your server to make changes to it. You have your own user credentials on your server - just like all of your friends. The difference is that you have more permissions. The main power that the owner possesses is the power to add content to the server. So in short, you could login from anywhere in the world, just as today's social networks. But your data is still on your computer, ready to be sent out to anyone you authorise.

Connections will be secured, as always, using HTTPS. And there will be no centralised server working hard to connect everyone together, but instead the computers of the network itself will be doing the hard work.

The code is available from my Github page but it's currently in it's infancy, and I need help. Feel free to contribute if you can by making pull requests to close the many issues that are present. Many of which are actually basic features. There is no documentation for the code at the moment however, but I will make this within the next month or so. I will also take some time to refactor and clean things up, making it even easier for collaborators to help out.