Beacon documentation
Everything you need to lock, track and protect a Roblox script. If you can paste one loadstring at the top of your script, you are done in about two minutes.
Introduction
Beacon is one loader you put at the top of your script. It validates the user's key, binds it to their HWID, blocks leaked and banned copies, logs the execution, and gives you a dashboard. Your real script only runs once the loader says it is allowed.
Create a project
SCRIPT_ID into the loader. Keep your secret key on your side only.Install the loader
Put one loadstring at the very top of your script. If the loader returns false, stop, because the key is wrong, the HWID is banned, or that version was killed.
local Beacon = loadstring(game:HttpGet("https://devs.vasilis.top/sdk"))() local ok = Beacon:Start({ script = "YOUR_SCRIPT_ID", key = getgenv().Key, -- the user's key }) if not ok then return end -- not allowed, so stop here -- the rest of your script runs below
Key system
Turn keys on and Beacon will only run your script for a valid key. You generate and revoke keys from the dashboard, and the loader checks them automatically.
- Expiring keys: set hours, days, or lifetime.
- One-time or reusable: single use, or shared across a group.
- Free or paid: checkpoint / ad-gate keys, or paid keys you sell.
if not Beacon:Start({ script = "abc123", key = getgenv().Key }) then warn("Invalid or expired key. Get one at your key link.") return end
HWID locking
Every key can be bound to a single device. The first machine that uses a key claims it, and other machines are rejected, so a leaked key is useless to everyone but the owner.
Anti-leak & blacklist
When your script leaks, ban the HWIDs and users running the cracked copy and the loader stops them on the next run. Opt into the global list to share known leakers and scammers with every developer on Beacon.
-- Beacon:Start returns false for banned HWIDs / users, -- so your script never loads for them. if not Beacon:Start({ script = "abc123", key = getgenv().Key }) then return end
Bans and unbans are instant across every run. Appeals go through your Discord, and approving one clears the ban everywhere.
Versions & kill switch
Your loadstring never changes, but what it serves does. Push an update and every user gets it on the next run. Roll back a bad release, or kill a leaked version so it stops working for everyone.
| Version | State | Share |
|---|---|---|
v2.4.1 | live | 98% |
v2.4.0 | rolling back | 2% |
v2.3.9 | killed (leaked) | 0% |
Execution analytics
See exactly how your script is used: executions today, this week and all time, unique users and unique HWIDs, how many are running right now, and which games they run in. No setup, it is computed from runs automatically.
| Metric | Today | 7 days |
|---|---|---|
| Executions | 12,480 | 89,210 |
| Unique users | 3,218 | 11,940 |
| Running now | 284 | peak 512 |
API reference
| Method | What it does |
|---|---|
Beacon:Start({script, key}) | Validate key + HWID, check bans, log the run. Returns true if allowed. |
Beacon:Event(name, props?) | Record a custom event (feature used, purchase, error). |
Beacon:GetHWID() | Return the current machine's HWID string. |
Beacon:IsBanned() | True if this HWID or user is on your or the global list. |