1.1.0
Released: May 2025
New features
rb lint — static analysis
Analyses your source for common issues before you build:
rb lint
Reports:
- Dead signals — declared with
signalbut never read or used anywhere - Ghost references — signal names used in handlers but never declared in that component
- Orphan functions —
funcblocks that are never called from any component or page
New Pulse helpers
Pulse.Track — entity lifecycle manager
Tracks instances (players, NPCs) and runs cleanup callbacks when they die or are removed:
local tracker = Pulse.Track.new()
tracker:apply(entity, function() ... end) -- register + cleanup fn
tracker:remove(entity)
tracker:cleanup(function(e) return not e.Parent end)
tracker:clear()
Pulse.Store — cross-component reactive KV store
Share state between components without signal wiring:
Pulse.Store.define("TargetLocked", false)
Pulse.Store.set("TargetLocked", true)
Pulse.Store.get("TargetLocked")
Pulse.Store.watch("TargetLocked", function(v) ... end)
Pulse.World — safe workspace navigation
Nil-safe helpers for navigating the game tree without error:
Pulse.World.find("Folder", "SubFolder") -- nil if missing
Pulse.World.children("Folder", "SubFolder") -- {} on failure
Pulse.World.await(parent, "ChildName", timeout)
Pulse.Team — team/faction helpers
Helpers for games with team or faction systems. Checks alliance relationships without hardcoding team names:
Pulse.Team.isEnemy(playerA, playerB)
Pulse.Team.isFriendly(playerA, playerB)
Pulse.Vec — vector utilities
Pulse.Vec.flatDir(from, to, fallback) -- XZ-plane normalised direction
rb save / rb history / rb restore
Git shortcuts added to the CLI:
rb save "fixed aimbot radius" -- git add -A && git commit
rb history 20 -- show last 20 commits
rb restore abc1234 -- check out a commit, tag, or branch
Compat build pipeline
rb build now always produces both script.obf.lua and script.compat.obf.lua in one pass. Added --no-compat flag to skip the second build when not needed.
Changes
component:bind()now accepts{ Disconnect = fn }tables, enablingRS:BindToRenderStepcleanupon X every intervalthrottle now supports a signal name as the interval (dynamic throttle rate)after N {}block added for one-shot delayed tasks on loadguardnow supports bare names without capture:guard character