Skip to content

A simple and efficient way to share data between server and client in Roblox

License

Notifications You must be signed in to change notification settings

RsMan-Dev/rbxts-bridge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@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.

About

A simple and efficient way to share data between server and client in Roblox

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors