WebPEER is a Decentralized P2P Network in the Browser. It allows developers to build peer-to-peer webapps without relying on centralized servers or specialized browsers. Aims to return internet control back to users.
In the early days of the World Wide Web, the internet was more open and more like a peer-to-peer network, where every user had equal standing on the network. This project aims to restore that early spirit through web standards, so that no single entity controls the network. However, the reality that standard web browsers have many limitations makes this dream a significant challenge. WebPEER seeks to address these challenges to see what is possible on today's web by reusing already invented components.
The JavaScript implementation of WebPEER Network designed as a minimal, essential API. It uses IPFS and the libp2p modular stack for the specific purpose of propagating messages over the network via direct WebRTC connections between browsers. The consequence is that these messages can arrive asynchronously depending on how many iterations they have gone through.
When a new peer is created, it doesn't know the addresses of existing peers on the network. While manually entering peer addresses is possible, it's impractical. Another strategy is to use federated media, leveraging public protocols like Torrent to facilitate address exchange. Once the peer addresses are obtained, the peer can establish a direct browser-to-browser connection to the WebPEER Network.
WebPEER Network run over libp2p gossipsub protocol to enables secure communication between peers.
By default, the gossipsub implementation will sign all messages with the author’s private key, and require a valid signature before accepting or propagating a message further. This prevents messages from being altered in flight, and allows recipients to authenticate the sender.
However, as a cooperative protocol, it may be possible for peers to interfere with the message routing algorithm in a way that disrupts the flow of messages through the network.
- ✅ Decentralized
- ✅ True P2P
- ✅ Scalable
- ✅ Standard Web
- ✅ Standard Browser
- ✅ Broadcast Channel
- ✅ No Server
- ✅ No Cloud
- ✅ No Admin
- ✅ No Account
- ✅ No Database
- ✅ No Install
- ✅ Freedom
- Blockchain
- Voting / Polling
- Collaborative activity
- IoT
- Social media
- Remote control
- Multiplayer
- Distributed web
- Signalling
- Location tracker
- Activity tracker.
- Chat messenger
- Go to a deployed chat demo at : p2pchat .
- Open the app on another device.
- Both your devices should connected.
- Now start sending message.
NPM:
npm install webpeerjs
CDN :
<script type="importmap">
{
"imports": {
"webpeerjs" : "https://esm.sh/webpeerjs"
}
}
</script>
import { createWebPEER } from 'webpeerjs'
const config = {
appName : 'myAppHelloWorld'
}
const peer = await createWebPEER();
console.log(`My peer id : ${peer.id}`)
const room = peer.joinRoom('lobbyroom')
room.onMessage((message,id) => {
console.log(`Message from ${id} : ${message}`)
})
room.onMembers((data) => {
console.log(`Members : ${data}`)
room.sendMessage('hello')
})
Create a new peer.
config - Configuration object contains:
appName- Unique application name.
Get the unique ID of this peer.
Get the peer status, returns connecting or connected.
connecting- Currently not connected and is trying to connect to the network.connected- Currently connected to the network.
Join to a room, returns an object.
room.sendMessage(message)- Method to broadcast message.romm.onMessage((message,peer_id)=>{})- Listen on incoming broadcast message.room.onMembers((members)=>{})- Listen on members update when peer appears and disappears.
- p2p.js - Alternative simple api WebRTC library with auto matchmaking without signaling server.
MIT (c) 2024 Nuzulul Zulkarnain






