SocialNetwork is an attempt at building a social network in which no third party needs to be trusted (where no third party can track your habits, sell your data or impersonate you for advertising)
It is far from finished, but feel free to play with what's currently available and if you come up with anything useful (patches, a better name, etc.) please send an email to firstname.lastname@example.org
Instead of federated central nodes (less centralized than the current mainstream social networks, but still centralized and requiring you to trust a third party with your data) the plan with SocialNetwork is to have each user be their own node.
Only those who are allowed to see your updates will receive them, and will also receive the privacy settings and share them further to authorized users (specific circles, friends and family, or anyone)
Other users/nodes (not friends and family) help the peer-to-peer network function, but data is limited to intended recipients.
SocialNetwork uses UDP for NAT hole-punching and implements a reliable connection-based layer on top of it which allows for one UDP socket (one NAT hole-punched public port) to have multiple simultaneous connections, both incoming and outgoing, each of which is individually TLS-encrypted.
The idea is for each frontend to save its list of connected peers at exit to serve as a bootstrap next time it's started, with a certain minimum number of peers to be connected to, requesting peers from the peers it has until it's reached.
User IDs are derived from the TLS certificate/key fingerprints.