pulse-rb
v1.4.4
Published
rb CLI — Pulse framework build tool for Roblox script projects
Readme
Pulse — Reactive Component Framework for Roblox Lua
Pulse is a reactive component framework for Roblox Lua. Write your script as clean, separated .rblua component files. The rb CLI compiles, checks, and bundles everything into one deployable Lua file.
component {
signal enabled = false
signal speed = 50
init {
Pulse.Notify.onToggle(SpeedHack.enabled, "Speed Hack")
}
ui {
toggle "Speed Hack" -> enabled tip="Override walk speed"
slider "Walk Speed" -> speed [16, 250]
}
on CharacterAdded {
guard h = humanoid
h.WalkSpeed = enabled and speed or 16
}
on enabled, speed {
guard h = humanoid
h.WalkSpeed = enabled and speed or 16
}
}One file. No require(). No runtime overhead. State, UI, and events all in one self-contained component.
Why Pulse?
Roblox Lua projects grow fast. A single monolithic script becomes impossible to maintain, debug, or extend. Pulse gives you:
- Reactive signals — declare state once; the UI, event handlers, and other components update automatically
- Component model — one
.rbluafile = one feature; rename, move, or delete without touching anything else - Flat compilation — all files concatenate into one Lua chunk at build time; no module system overhead at runtime
- Built-in helpers —
Pulse.Loop,Pulse.Draw,Pulse.Aim,Pulse.Hitbox,Pulse.Notify,Pulse.Logand more - Live dev overlay — inject with
--devto get a draggable log viewer, feature toggles, and a live monitor bar - One-command build —
rb buildcompiles, syntax-checks, and obfuscates in one step
Install
irm https://pulse-rb.vercel.app/install.ps1 | iexInstalls rb globally and adds it to PATH. Requires Python 3.10+ and Git.
Quick Start
rb init my-project # scaffold project + git repo
cd my-project
rb build # compile → check → obfuscate
rb watch # auto-rebuild on saveA new project includes example components, a CLAUDE.md reference for AI assistants, and full WindUI layout configuration out of the box.
Project Structure
my-project/
├── src/
│ ├── misc/helpers/globals.lua ← compiled first — func table, shared state
│ ├── misc/remotes.lua ← RemoteEvent/Function wrappers
│ ├── player/
│ │ └── SpeedHack.rblua ← Pulse component
│ ├── visuals/
│ │ └── PlayerESP.rblua
│ └── ui/
│ ├── layout.rblua ← window config (title, theme, size, ...)
│ └── pages/
│ └── 1_Home.rblua ← tab layout — mounts component widgets
└── build/
├── script.lua ← compiled output
└── script.obf.lua ← obfuscated outputCLI Reference
| Command | Description |
|---|---|
| rb init <name> | Scaffold a new project |
| rb build | Compile → check → obfuscate |
| rb build --no-obfuscate | Compile and check only |
| rb watch | Auto-rebuild on file change |
| rb copy | Compile and copy output to clipboard |
| rb new module <path> | Add a new component |
| rb new remote <Name> | Add a remote wrapper stub |
| rb lint | Static analysis — dead signals, ghost refs |
| rb deploy | Push build output to GitHub |
| rb docs | Generate PULSE_DOCS.md full reference |
Full CLI reference → pulse-rb.vercel.app/docs/cli
Pulse Helpers
| Helper | Purpose |
|---|---|
| Pulse.Loop | Managed repeating task with safe start/stop |
| Pulse.Notify | In-game toast notifications |
| Pulse.Draw | Highlights, circles, selection boxes |
| Pulse.Aim | FOV check, camera snap, nearest-entity search |
| Pulse.Hitbox | BasePart size expansion with clean restore |
| Pulse.Cooldown | Rate limiting — per-call or per-entity |
| Pulse.Store | Cross-component reactive key-value state |
| Pulse.Track | Entity lifecycle tracking with auto-cleanup |
| Pulse.Cache | Timed function result caching |
| Pulse.Conn | Named connection manager |
| Pulse.Log | Structured dev logging (zero cost in prod) |
| Pulse.Monitor | Live key-value dashboard in the dev overlay |
| Pulse.Memory | Executor capability checks |
| Pulse.Team | Configurable friend/enemy resolver |
| Pulse.Perf | Rolling frame-time sampler |
Full helper reference → pulse-rb.vercel.app/docs/helpers
Component Syntax
component {
signal enabled = false
signal radius = 400
ui {
toggle "Enable" -> enabled default=true tip="Tooltip"
slider "Radius" -> radius [50, 800]
button "Reset" -> Reset()
}
init {
-- private locals and helpers
local _loop = Pulse.Loop.new(0.5, function()
-- runs every 0.5 s while the loop is active
end)
Pulse.Notify.onToggle(MyComponent.enabled, "My Feature")
}
on enabled {
if v then _loop:start() else _loop:stop() end
}
on Heartbeat when enabled every 0.1 {
guard hrp
-- throttled to at most once per 0.1 s
}
on CharacterAdded { ... }
on InputBegan(input, gpe) when enabled debounce 0.2 {
if gpe then return end
-- ...
}
func Toggle() {
enabled(not enabled())
}
}Full framework reference → pulse-rb.vercel.app/docs/intro
Documentation
Full documentation, scripting school, and helper reference at pulse-rb.vercel.app.
Requirements
| Tool | Purpose | Auto-installed |
|---|---|---|
| Python 3.10+ | Running rb | No |
| Lua 5.1 (luac) | Syntax checking + obfuscation | Yes (via winget) |
| Git | Version control, Prometheus download | No |
