A high-performance state synchronization library for Roblox.
Synchronizer manages server-authoritative data channels with automatic client replication, batched networking, and event-driven updates. Instead of manually firing RemoteEvents, you mutate a channel and Synchronizer handles the rest.
📖 Read the full documentation →
- Channel-Based Architecture — Isolated, reusable data channels per-player, per-entity, or global.
- Batched Networking — All mutations within a frame sent as a single RemoteEvent per listener.
- Action Deduplication — Multiple
Setcalls to the same path only send the final value. - Event-Driven — Subscribe to
Changed,ArrayInsert,ArrayRemoved,DictionaryInsert,DictionaryRemoved. - Listener System — Control which players receive updates from each channel.
- Security — Rate limiting and listener-only data access validation.
- Strict Typing — Full
--!strictwith exported types for IDE autocompletion. - Zero Memory Leaks — Complete cleanup on channel destruction.
-- Server
local channel = Synchronizer:Create(player.UserId, {
coins = 0;
level = 1;
})
channel:AddListener(player)
channel:Set("coins", 100):Increase("coins", 50)
-- Client
local channel = Synchronizer:Wait(player.UserId)
channel:OnChanged("coins", function(new, old)
print("Coins:", old, "→", new)
end, true)See the Getting Started guide.
MIT © 2026 Skanz