Skip to main content

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 signal but never read or used anywhere
  • Ghost references — signal names used in handlers but never declared in that component
  • Orphan functionsfunc blocks 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, enabling RS:BindToRenderStep cleanup
  • on X every interval throttle now supports a signal name as the interval (dynamic throttle rate)
  • after N {} block added for one-shot delayed tasks on load
  • guard now supports bare names without capture: guard character