1.2.22 — Pulse.Remote helper
What changed
New helper: Pulse.Remote
A framework-level remote wrapper so every project gets clean, boilerplate-free remote access without rolling its own caching logic.
Path-based resolution — remotes are identified by a slash-separated path under ReplicatedStorage:
Pulse.Remote.fire("Remotes/Building", "Place", cf)
Pulse.Remote.fire("CombatRemotes/Server/Attack", weapon, "Hit", char)
local inv = Pulse.Remote.invoke("Remotes/GetInventory")
Lazy caching — the path is resolved via WaitForChild on the first call and cached forever after. Every subsequent call in a Heartbeat loop is an O(1) table lookup, no yield.
Pre-bound functions — the preferred pattern for a game's remotes.lua:
-- remotes.lua
func.Remote_Build = Pulse.Remote.bind("Remotes/Building")
func.Remote_Storage = Pulse.Remote.bind("Remotes/Storage")
func.Remote_Stats = Pulse.Remote.bindi("Remotes/GetStats")
-- any component
func.Remote_Build("Place", cf)
Prefetch — warm the cache in the background so Heartbeat handlers never see first-call latency:
task.spawn(function()
Pulse.Remote.prefetch("Remotes/Building", "Remotes/Storage")
end)
Full API: fire, invoke, connect, bind, bindi, wrap, prefetch. See the Pulse.Remote docs.