Server API

Cross

Cross-server messaging and shared state in one module. Publish and subscribe to real-time events across every server in your game via MessagingService, and read/write persistent shared data across servers via MemoryStoreService — with a built-in server registry on top.

Import local Cross = RoExpress.Cross
Cross is server-only. MessagingService and MemoryStoreService are unavailable on the client. Calling Cross from a LocalScript will throw.

At a glance

local Cross = RoExpress.Cross

-- register this server so others can find it
Cross.RegisterServer({ mode = "pvp", map = "Forest" })

-- broadcast a message to all servers
Cross.Publish("round.end", { winner = "Player1" })

-- receive messages from any server
Cross.Subscribe("round.end", function(data, ctx)
    print(ctx.serverId, "ended round, winner:", data.winner)
end)

-- shared global counter
Cross.Memory.Update("stats.wins", function(n) return (n or 0) + 1 end)
local wins = Cross.Memory.Get("stats.wins")

-- list every live server
local servers = Cross.GetServers()
print(#servers, "servers online")

Roblox service limits

ServiceLimit
MessagingService publish150 messages/min per server · 600 messages/min per game
MessagingService message size1 024 bytes per message
MessagingService subscriptions5 active topics per server
MemoryStore requests1 000 + 100 × player count per minute, per server
MemoryStore value size32 KB per key
MemoryStore key TTL max45 days

See also

Bridge | same-server event bus  ·  Hook | Roblox signal dispatcher  ·  RTTP | outbound HTTP to external services