Luafly Documentation
Luafly is a script protection platform for Roblox developers. Upload your Lua script, get a protected loader, and manage who can run it — all from one dashboard. Users are whitelisted by HWID and can only access your script after redeeming a key you generate.
Who is this forWhat you do
Script developersSign up, upload scripts, generate keys, manage users and logs
End usersGet a key from the developer, redeem it, then run the loader
Luafly is free for up to 3 scripts. Upgrade to Premium (100 Robux gamepass) for unlimited scripts.

How it works

The full flow from uploading a script to a user running it.

1
Developer uploads a script
You paste your Lua script into the dashboard. Luafly stores it and generates a unique protected loader URL for it.
2
Developer generates a key
From the Keys tab, generate a one-time use key (7 day, 30 day, or lifetime) and give it to the user.
3
User redeems the key
The user runs the redeem script with their key. Their HWID is automatically registered and they are marked as whitelisted.
4
User runs the loader
Every time the user wants to run the script, they use the loader. Luafly checks their HWID — if whitelisted, the script loads. If not, they get kicked.
The script source is never exposed. Users only ever see the loader — the actual content is fetched and executed server-side after HWID verification.

Signing up

Luafly uses Discord OAuth — no passwords, no email. Just click Login with Discord and you're in.

1
Go to luafly.is-local.org
Click Login with Discord on the landing page.
2
Authorize with Discord
Allow Luafly to read your Discord username and ID. That's all it asks for.
3
You're in
Your account is created automatically. You start on the free tier with up to 3 scripts.

Uploading a script

From the Scripts page, fill in a name, optional description, then paste your full Lua script content and click Upload.

Free accounts can upload up to 3 scripts. Upgrade to Premium for unlimited.

Once uploaded, your script card appears on the Scripts page showing:

ElementWhat it is
Script nameThe name you gave it
Active badgeWhether the script is currently being served
Loader previewThe one-liner users run to load your script
Copy loader buttonCopies the loader to your clipboard instantly
Delete buttonPermanently deletes the script and all its users, keys, and logs

Script detail tabs

Clicking a script card opens the detail view with four tabs.

TabWhat it shows
UsersAll whitelisted and blacklisted users for this script. Add, edit, or delete users.
KeysGenerate and manage one-time use whitelist keys for this script.
LogsExecution history for this script — filter by today, this week, or all time.
Lua ScriptsThe redeem script to give to new users for this specific script.
Each script has its own isolated users, keys, and logs. A user whitelisted for one script is not whitelisted for another.

Managing users

Users are added automatically when they redeem a key, or manually from the Users tab. Each user record contains:

FieldDescription
hwidHardware ID from RbxAnalyticsService — unique per device
usernameRoblox username, auto-filled on key redemption
statuswhitelisted, blacklisted, or expired
ban_reasonShown in the kick message when blacklisted
notesPrivate notes only visible in your dashboard
hwid_resets_leftNumber of HWID resets remaining
tokensReset token balance
executorAuto-detected executor name when they run the loader
last_seenLast successful execution timestamp

Click Edit on any user row to update their status, ban reason, notes, resets, or tokens. You can also delete them from the edit modal.

Blacklisting a user kicks them with the ban reason shown in-game. If no reason is set it defaults to "No reason provided."

Keys

Keys let you give someone access without manually entering their HWID. Generate them from the Keys tab inside a script.

Keys are one-time use. Once redeemed the key is consumed and cannot be reused. Generate a new key for each person.
DurationAccess period
7dayExpires 7 days after the user redeems it
30dayExpires 30 days after the user redeems it
lifetimeNever expires

You can generate up to 50 keys at once. Each key follows the format LUAFLY-XXXXXXXXXXXXXXXX.

The Keys tab shows each key's status — Available or Redeemed — and the HWID of whoever redeemed it.

Logs

Every significant action is logged per script and visible from the Logs tab.

ActionWhen it's logged
executedA whitelisted user successfully loads the script
redeemed keyA user redeems a key and gets whitelisted

Filter logs by Today, This week, or All time. Each log entry shows the username, HWID, action, and timestamp.

Webhook

Set a Discord webhook URL in Settings to get notified every time someone runs one of your scripts. The webhook fires on every successful execution across all your scripts.

1
Create a webhook in Discord
Go to your Discord server → channel settings → Integrations → Webhooks → New Webhook. Copy the URL.
2
Paste it in Settings
Go to Settings in your Luafly dashboard, paste the URL under Webhook, and click Save Webhook.

Each webhook message shows the script name, username, executor, and HWID of whoever ran it.

Make sure the webhook_url column exists in your Supabase accounts table. If you see a schema error when saving, add the column (type: text) in Supabase Table Editor.

Premium

The free tier allows up to 3 scripts. Premium removes that limit entirely.

TierScriptsPrice
FreeUp to 3Free
PremiumUnlimited100 Robux gamepass
1
Buy the gamepass on Roblox
Find the Luafly Premium gamepass (100 Robux) and purchase it on your Roblox account.
2
Verify in the dashboard
Go to the Premium tab in your dashboard, enter your Roblox username, and click Verify purchase. Luafly checks your gamepass ownership via the Roblox API and upgrades your account instantly.

Redeeming a key (end users)

If you received a key from a script developer, run the redeem script they gave you. It will look like this — just replace the placeholder with your actual key before running.

lua
-- Replace with the key the developer gave you (no local keyword)
key = "LUAFLY-XXXXXXXXXXXXXXXX"
loadstring(game:HttpGet("https://luafly.is-local.org/api/redeem/LOADER_ID_HERE?key=" .. key .. "&hwid=" .. game:GetService("RbxAnalyticsService"):GetClientId() .. "&username=" .. game.Players.LocalPlayer.Name))()
The developer gives you the exact script to run — you don't need to build it yourself. Just replace the key value and run it once.

After running you should see Successfully redeemed! You are now whitelisted. in the console. The key is now used up — don't share it, it won't work for anyone else.

Make sure you use key = without local so the variable is accessible inside the loadstring.

Running the loader (end users)

After redeeming your key, run the loader the developer gave you every time you want to use the script. It checks your HWID and loads the script automatically.

lua
-- The loader the developer gives you looks like this
loadstring(game:HttpGet("https://luafly.is-local.org/api/load/LOADER_ID_HERE?hwid=" .. game:GetService("RbxAnalyticsService"):GetClientId() .. "&executor=" .. (identifyexecutor and identifyexecutor() or "Unknown")))()
The loader only works from inside a Roblox game. Opening the URL in a browser returns access denied — this is intentional to protect the script source.

Whitelist statuses

When you run the loader, one of the following outcomes happens based on your whitelist status.

StatusWhat happens
whitelistedScript loads successfully
blacklistedKicked — ban reason shown in the kick message
not foundKicked — your HWID is not in the whitelist. Redeem a key first.
expiredKicked — your whitelist period ended. Contact the developer for a new key.

If you get kicked for suspicious activity it means your HWID triggered the brute-force protection (10+ failed attempts). Contact the developer to get it cleared.

Contents
Overview How it works Signing up Uploading a script Script detail tabs Managing users Keys Logs Webhook Premium Redeeming a key Running the loader Whitelist statuses