https://github.com/nuzulul/webpeerjs
WebPEER is a novel decentralized P2P network overlay in browser-side with a chance of working. π₯
https://github.com/nuzulul/webpeerjs
browser-to-browser decentralized distributed ipfs libp2p p2p p2p-network peer-to-peer webpeer webrtc
Last synced: 3 months ago
JSON representation
WebPEER is a novel decentralized P2P network overlay in browser-side with a chance of working. π₯
- Host: GitHub
- URL: https://github.com/nuzulul/webpeerjs
- Owner: nuzulul
- License: mit
- Created: 2024-05-20T10:55:30.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-10-16T13:06:18.000Z (about 1 year ago)
- Last Synced: 2024-10-29T14:18:58.641Z (about 1 year ago)
- Topics: browser-to-browser, decentralized, distributed, ipfs, libp2p, p2p, p2p-network, peer-to-peer, webpeer, webrtc
- Language: JavaScript
- Homepage: https://webpeer.js.org/demo/chat.html
- Size: 1.01 MB
- Stars: 6
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-webrtc - WebPEER - WebPEER is a P2P Network that Runs in a Browser. (Libraries / JavaScript)
README
# WebPEER
> WebPEER is a P2P Network that Runs in a Browser
This [webpeerjs](https://github.com/nuzulul/webpeerjs) library implements libp2p to create decentralized peer-to-peer network that runs in a browser without a central server.
Basic Chat App Demo available at : [https://nuzulul.github.io/webpeerjs/demo/chat.html](https://nuzulul.github.io/webpeerjs/demo/chat.html)

## Security
WebPEER Network run over [`libp2p gossipsub`](https://docs.libp2p.io/concepts/security/security-considerations/#publish--subscribe) protocol to enables 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.
## Features
* β
Decentralized P2P
* β
Scalable Peers
* β
Works in Browsers
* β
Broadcast Messages
* β
Censorship Resistant
## Ideas
* Blockchain
* Voting / Polling
* Collaborative activity
* IoT
* Censorship resistent social media
* Remote control
* Multiplayer games
* Decentralized/distributed web
* Signalling protocol
* Location tracker
* User activity tracker.
## Try it out!
* Go to a deployed chat demo at : [https://nuzulul.github.io/webpeerjs/demo/chat.html](https://nuzulul.github.io/webpeerjs/demo/chat.html) .
* Open the app on another device.
* Both your devices should connected.
* Now start sending message.
## Browser Support
 |  |  |  |  |  |
--- | --- | --- | --- | --- | --- |
Latest β | Latest β | Latest β | Latest β | Latest β | Latest β |
## Quickstart
Try now in [Playground](https://jsbin.com/suwesaliro/1/edit?html,output) :
```
https://jsbin.com/suwesaliro/1/edit?html,output
```
NPM install:
```
npm i webpeerjs
```
Browser `` tag :
Uses built-in JS files from [latest release](https://github.com/nuzulul/webpeerjs/releases/latest) or [CDN](https://www.jsdelivr.com/package/npm/webpeerjs) will make it's exports available as `webpeerjs` in the global namespace.
```
<script src="https://cdn.jsdelivr.net/npm/webpeerjs@0.1/dist/umd/webpeerjs.min.js">
```
## Example
```
import { webpeerjs } from 'webpeerjs'
void async function main() {
const node = await webpeerjs.createWebpeer()
console.log(`My node id : ${node.id}`)
const [broadcast,listen,onmembersupdate] = node.joinRoom('globalroom')
listen((message,id) => {
console.log(`Message from ${id} : ${message}`)
})
onmembersupdate((data) => {
console.log(`Members : ${data}`)
broadcast('hello')
})
}()
```
## API
- `createWebpeer(config)` - Create a new node.
- `config` - Configuration object contain:
- `rtcConfiguration` - **(optional)** Custom [rtcConfiguration](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection) for WebRTC transport, currently the only transport available for direct peer-to-peer connectivity between browser.
- `id` - Get the unique ID of the node as an identity in the global network.
- `status` - Get the node status, returns `connected` or `unconnected`.
- `peers` - Get all connected peers.
- `joinRoom(namespace)` - Join to the room, returns an array of three functions, example : [Broadcaster, onListenBroadcast, onMembersUpdate].
- `Broadcaster` - Function to broadcast message to room members.
- Limited to 1 message/second.
- `onListenBroadcast` - Callback function that listen on incoming broadcast message.
- `onMembersUpdate` - Callback function that listen on room members update.
## API Docs
[https://nuzulul.github.io/webpeerjs](https://nuzulul.github.io/webpeerjs)
## Related
- [webConnect.js](https://github.com/nuzulul/webConnect.js) - Auto WebRTC Mesh P2P network without any hassle.
- [RingsNetwork](https://github.com/RingsNetwork/rings) - Rings is a structured peer-to-peer network implementation using WebRTC, Chord DHT, and full WebAssembly (WASM) support.
## License
MIT
## Maintainers
[Nuzulul Zulkarnain](https://github.com/nuzulul)