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.

User runs script loader (one loadstring) Beacon key + HWID + ban check Your dashboard runs, keys, leaks

Create a project

Sign in
Open the dashboard and sign in with Discord.
Add your script
Create a project, give it a name, and decide whether it needs a key.
Copy your script ID
You paste this 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.

top of your script
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
Keep it server-safe: never print the user's key, and do not hardcode your secret dashboard key into the script. The loader handles the secret side for you.

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.

a key-gated script
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.

Need to move a key to a new device? Reset its HWID from the dashboard or with the Discord bot command, and the next machine claims it.

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.

what a banned user sees
-- 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.

VersionStateShare
v2.4.1live98%
v2.4.0rolling back2%
v2.3.9killed (leaked)0%
Example layout, not live data.

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.

MetricToday7 days
Executions12,48089,210
Unique users3,21811,940
Running now284peak 512
Example layout, not live data.

API reference

MethodWhat 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.
Need help? Open a ticket in the Discord, or head back to the overview.