1.0.8 • Published 7 months ago

@rbxts/bridge v1.0.8

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

@rbxts/bridge

npm version GitHub license

A TypeScript library for Roblox that provides a simple and type-safe way to communicate between server and client using events and functions. It uses RemoteEvent and RemoteFunction under the hood to handle the communication. This lib aims to have one single interface for both server and client, so you can use it in both places without any extra code.

ℹ️ Note: Feel free to take a look at the code, jsdoc has more information about the functions usages and types.

Table of Contents

Installation

Currently available through GitHub (to get the latest commited build, ensure using commit hash for stability):

npm install @rbxts/bridge@github:RsMan-Dev/rbxts-bridge

Via NPM:

npm install @rbxts/bridge

Features

Event System

Provides a simple way to send and receive events between server and client with type safety.

Function Calls

Allows calling functions on the other side (server/client) with proper type checking and async support.

Data Synchronization

Includes a robust sync system for keeping data in sync between server and client with version control and conflict resolution.

API Reference

➤ Events

Register and handle events between server and client.

import { bridge } from "@rbxts/bridge";

// Define your event types
declare global {
  interface BridgeEventMap {
    playerJoined: { name: string };
    playerLeft: { name: string };
  }
}

// Server side
bridge.on("playerJoined", (data, player) => {
  print(`${player.Name} joined with data:`, data);
});
// Broadcast to all clients (server only)
bridge.broadcast("playerLeft", { name: "Player1" });

// Client side
bridge.send("playerJoined", { name: "Player1" });
bridge.on("playerLeft", (data, localPlayer) => {
  print(`a player left with data:`, data);
});

➤ Functions

Call functions on the other side with type safety.

import { bridge } from "@rbxts/bridge";

// Define your function types
declare global {
  interface BridgeFunctionMap {
    getPlayerData: [{ playerId: number }, { coins: number, level: number }];
  }
}

// Server side
bridge.fn("getPlayerData", (data, player) => {
  return { coins: 100, level: 5 };
});

// Client side
const result = bridge.call("getPlayerData", { playerId: 123 });
// Async version
const result = await bridge.callAsync("getPlayerData", { playerId: 123 });

➤ Sync

Keep data in sync between server and client with version control.

import { bridge } from "@rbxts/bridge";

// Create a sync context
const playerData = bridge.sync("playerData", {
  coins: 0,
  level: 1
});

// Server side
const context = playerData();
context.patch(data => (data.coins += 100, data));

// Client side
const context = playerData();
context.onUpdated(ctx => {
  print("Data updated:", ctx.data);
});

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

1.0.8

7 months ago

1.0.7

7 months ago

1.0.6

7 months ago

1.0.5

7 months ago

1.0.3

7 months ago

1.0.2

7 months ago

1.0.0

7 months ago