mirror of
https://github.com/rilaxik/fivem-rpc.git
synced 2026-09-28 01:29:13 +00:00
269269771d0abde0f107b21944eb9434827cbdcd
FiveM RPC
is an all-in-one package with asynchronous RPC implementation for FiveM servers in JS/TS
Motivation
The idea was to create an extensible package, with various features to simplify the development process and provide as much comfort as possible. Inspired by usage of altv-xrpc
Packages
| Package | Docs |
|---|---|
@entityseven/fivem-rpc |
API reference |
@entityseven/fivem-rpc-shared-types |
Typing setup |
Installation
npm i @entityseven/fivem-rpc
pnpm add @entityseven/fivem-rpc
yarn add @entityseven/fivem-rpc
bun add @entityseven/fivem-rpc
Optional, for typed event names, arguments and results (typing setup):
npm i -D @entityseven/fivem-rpc-shared-types
pnpm add -D @entityseven/fivem-rpc-shared-types
yarn add -D @entityseven/fivem-rpc-shared-types
bun add -d @entityseven/fivem-rpc-shared-types
Quick start
Create exactly one instance per environment and import it from your own module, not from the library. The client needs one even if it only relays between server and webview.
// server/rpc.ts
import { createRPC } from '@entityseven/fivem-rpc'
export const rpc = createRPC({ env: 'server' })
// client/rpc.ts
import { createRPC } from '@entityseven/fivem-rpc'
export const rpc = createRPC({ env: 'client' })
// webview/rpc.ts
import { createRPC } from '@entityseven/fivem-rpc'
export const rpc = createRPC({ env: 'webview' })
Listen on one side, emit from the other and await the listener's return value:
// server
rpc.onClient('ping', (player, message) => `pong: ${message} (from ${player})`)
// client
const reply = await rpc.emitServer('ping', 'hello')
All methods: API reference.
Features
- Type-Safe Development: Eliminate runtime errors and enhance code reliability with comprehensive type safety
- All-in-one package: Communicate effortlessly between server, client and webview
Contributing
Issues and pull requests are very welcome
License
Licensed under Custom Attribution-NoDerivs Software License
WIP
- client observers to catch events between server and webview (subscribe-like behaviour)
- client observers to prevent events (middleware-like behaviour)
- player manager (transform player id to desired data straight from a listener)
Languages
TypeScript
100%