webpeerjs
Version:
WebPEER.js is Decentralized P2P network overlay inside browser.
101 lines (66 loc) • 4.26 kB
Markdown
# WebPEER
> Decentralized P2P network overlay inside browser
[WebPEER.js](https://github.com/nuzulul/webpeerjs) enables browser to browser connectivity without a central server. Build completely peer-to-peer web applications, no trackers or relay servers required. Connecting projects safely, privately, and reliably in WebPEER Network.
Basic Connection Demo available at : [https://nuzulul.github.io/webpeerjs/demo/](https://nuzulul.github.io/webpeerjs/demo/)
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
## 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 `<script>` 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"></script>
```
## 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 (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)
## License
MIT
## Maintainers
[Nuzulul Zulkarnain](https://github.com/nuzulul)