Listener → Broadcast

Broadcast

Broadcast events are fire-and-forget server-to-client messages sent by broadcast:Emit() over an UnreliableRemoteEvent — individual events may be dropped, but bandwidth cost is minimal.

How broadcast events arrive

On the server you call broadcast:Emit(event, data). On the client you subscribe with the same listener:On(event, fn) used for push events. Listener automatically routes broadcast payloads alongside push payloads — you write one handler for both.

-- SERVER (Script)
local broadcast = RoExpress("Broadcast")

-- emit every heartbeat — drops are acceptable
game:GetService("RunService").Heartbeat:Connect(function()
    for _, player in game.Players:GetPlayers() do
        broadcast:Emit("position.hint", {
            player = player.Name,
            pos    = player.Character and
                     player.Character:FindFirstChild("HumanoidRootPart") and
                     player.Character.HumanoidRootPart.Position
        })
    end
end)

-- CLIENT (LocalScript)
local listener = RoExpress("Listener")

listener:On("position.hint", function(data)
    Minimap:UpdateDot(data.player, data.pos)
end)

Reliability

Broadcast uses Roblox's UnreliableRemoteEvent. Events are not retransmitted on packet loss — any given emission may never arrive at the client. This is intentional: for high-frequency data it is cheaper to accept occasional drops than to guarantee every packet.

PropertyValue
TransportUnreliableRemoteEvent
DeliveryBest-effort — events may be dropped
OrderNot guaranteed
Server APIbroadcast:Emit(event, data)

Broadcast vs Push

BroadcastPush
TransportUnreliableRemoteEventRemoteEvent
Guaranteed deliveryNoYes
Bandwidth costLower (no ACKs)Higher (retransmit until ACK)
Best forPosition hints, visual FX, cooldown ticksRound events, inventory changes, match results

Hit FX example

Visual effects are a perfect fit for broadcast — a missed frame is invisible to the player, and flooding the reliable channel for every shot is wasteful.

-- SERVER fires a hit effect for everyone nearby
broadcast:Emit("hit.fx", { pos = hitPos, weapon = "rifle" })

-- CLIENT plays it
listener:On("hit.fx", function(data)
    FX:PlayImpact(data.pos, data.weapon)
end)

See also

← Listener  ·  Subscribe | On, Once, Off reference  ·  Server Push | reliable channel comparison  ·  Broadcast module | server-side emit API  ·  Gun Example | hit FX via broadcast