Bitsocial: p2p social media on IPFS, IPNS and pubsub, with the first fully in-browser p2p experience (Helia)

Wanted to share something we’ve been building. Bitsocial is a peer-to-peer social media protocol built directly on IPFS, IPNS and pubsub. No servers, no blockchains, no central backend. Communities are published as IPNS records (backed by a public key), every post and reply is content-addressable, and gossipsub handles realtime messages between peers.

Overview and docs: https://bitsocial.net

The thing I’m most excited to show off is https://p2p.5chan.app. It’s an imageboard built on Bitsocial that runs Helia directly in the browser and does full peer-to-peer for everything: IPNS for community state, content-addressed fetch for posts and replies, gossipsub for realtime announcements, HTTP routers for discovery. As far as we can tell, this is the first decentralized social media app anywhere with a fully p2p experience inside a normal browser tab. No backend doing the heavy lifting, no server proxying pubsub, no IPFS gateway in front. Just Helia in the page.

A few choices that made it work:

  • HTTP routers instead of DHT, so peer discovery is fast in the browser without the DHT overhead

  • Communities addressed by IPNS over a public key, so anyone can spin one up for free

  • Posts and replies are text only and content-addressable; you can link out to media, but nothing is embedded into the protocol itself

  • Pluggable anti-spam: each community plugs in its own challenge, and a challenge can be any policy expressible in code. Captchas, account age or reputation checks, SMS verification, payments, token or NFT ownership, IP rules, allowlists, fully custom code, whatever fits the community. More in the docs

Would love feedback from anyone who’s worked on p2p social media before, especially folks who hit walls and learned things the hard way and have opinions on what does or doesn’t work. Also very interested in feedback on the UI/UX at 5chan: does the messaging land, or is there something we should explain differently?