npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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 .rblua file = 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 helpersPulse.Loop, Pulse.Draw, Pulse.Aim, Pulse.Hitbox, Pulse.Notify, Pulse.Log and more
  • Live dev overlay — inject with --dev to get a draggable log viewer, feature toggles, and a live monitor bar
  • One-command buildrb build compiles, syntax-checks, and obfuscates in one step

Install

irm https://pulse-rb.vercel.app/install.ps1 | iex

Installs 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 save

A 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 output

CLI 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 |