🧬 Introduction
Presencejs
is a JavaScript library that enables the creation of real-time web
applications with a secure, low-latency, and high-performance geo-distributed
architecture.
Key Features:
- Geo-distributed Architecture: Deploy your real-time backend close to users
all over the world for better performance.
- WebTransport Support: WebTransport is an new API that offers low-latency,
bidirectional, client-server messaging.
- Secure, low-latency, and high-performance: PresenceJS prioritizes
security, speed, and performance for a seamless user experience.
- Real-time and collaborative experience: With PresenceJS, components
receive data flow in real time, ensuring fast and reactive UI by offering the
flexibility to send either unreliable or reliable data
- Easy to use: PresenceJS is simple to implement, making it an accessible
solution for developers.
- Free for self-managed hosting: PresenceJS is free to use for self-managed
hosting, making it an affordable choice for projects of any size.
🌟 Showcase
These React Serverless Components are built with presencejs
:
👯♀️ GroupHug
Live collaborator avatars for multiplayer web apps
🥷🏼 Quick Start
1. Add presencejs
to your web app
Using npm
$ npm i --save @yomo/presence
Using yarn
$ yarn add @yomo/presence
Using pnpm
$ pnpm i @yomo/presence
Create a Presence
instance
import createPresence from "@yomo/presence";
const presencePromise = createPresence("https://prsc.yomo.dev", {
publicKey: process.env.NEXT_PUBLIC_PRESENCE_PUBLIC_KEY,
id,
debug: true,
});
presencePromise.then((presence) => {
console.log("Presence: ", presence);
});
Create Channel
add subscribe to peers online event:
const channel = presence.joinChannel('group-hug', myState);
channel.subscribePeers((peers) => {
peers.forEach((peer) => {
console.log(peer + " is online")
}
});
Broadcast messages to all peers in this channel
const cb = () => {
const state = document.hidden ? "away" : "online";
c.broadcast("hidden-state-change", { state });
};
document.addEventListener("visibilitychange", cb);
Subscribe messages from the other peers
const unsubscribe = channel.subscribe(
"hidden-state-change",
({ payload, peerState }) => {
console.log(`${peerState.id} change visibility to: ${payload}`);
},
);
unsubscribe();
2. Start prscd
backend service
see prscd
🤹🏻♀️ API
See docs: https://presence.js.org
👩🏼🔬 Development
- frontend project:
bun install
packages/presence
: bun run build
packages/group-hug-react
: bun run build:js
- local backend dev server: see prscd
🏡 Self-managed hosting
Docs: https://presence.js.org
License
The MIT License.