Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/yomorun/presencejs

Edge Infra for realtime web applications, geo-distributed architecture.
https://github.com/yomorun/presencejs

presencejs realtime realtime-collaboration websocket webtransport

Last synced: 3 months ago
JSON representation

Edge Infra for realtime web applications, geo-distributed architecture.

Awesome Lists containing this project

README

        





NPM version


License



Cursor Chat Anywhere - Add Figma like cursor chat to your own products | Product Hunt

## ๐Ÿงฌ 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

image

- [Preview](https://allegrocloud.io/preview/clewfjysp0008osvwuina6qnf)
- Source code: [./components/react/grouphug-react](./components/react/group-hug)

## ๐Ÿฅท๐Ÿผ 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

```js
import createPresence from "@yomo/presence";

// create an instance.
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);
});

// or
// (async () => {
// const presence = await presencePromise;
// })()
```

#### Create `Channel`

add subscribe to peers online event:

```js
const channel = presence.joinChannel('group-hug', myState);
// join multiple channels
// const channel2 = presence.joinChannel('live-cursor', myState);
// const channel3 = presence.joinChannel('cursor-chat', myState);

channel.subscribePeers((peers) => {
peers.forEach((peer) => {
console.log(peer + " is online")
}
});
```

#### Broadcast messages to all peers in this channel

```js
const cb = () => {
const state = document.hidden ? "away" : "online";
c.broadcast("hidden-state-change", { state });
};
document.addEventListener("visibilitychange", cb);
```

#### Subscribe messages from the other peers

```js
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](./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](./prscd)

## ๐Ÿก Self-managed hosting

Docs: https://presence.js.org

## License

The [MIT License](./LICENSE).