| Who is this for | What you do |
|---|---|
| Script developers | Sign up, upload scripts, generate keys, manage users and logs |
| End users | Get a key from the developer, redeem it, then run the loader |
How it works
The full flow from uploading a script to a user running it.
Signing up
Luafly uses Discord OAuth — no passwords, no email. Just click Login with Discord and you're in.
Uploading a script
From the Scripts page, fill in a name, optional description, then paste your full Lua script content and click Upload.
Once uploaded, your script card appears on the Scripts page showing:
| Element | What it is |
|---|---|
| Script name | The name you gave it |
| Active badge | Whether the script is currently being served |
| Loader preview | The one-liner users run to load your script |
| Copy loader button | Copies the loader to your clipboard instantly |
| Delete button | Permanently deletes the script and all its users, keys, and logs |
Script detail tabs
Clicking a script card opens the detail view with four tabs.
| Tab | What it shows |
|---|---|
| Users | All whitelisted and blacklisted users for this script. Add, edit, or delete users. |
| Keys | Generate and manage one-time use whitelist keys for this script. |
| Logs | Execution history for this script — filter by today, this week, or all time. |
| Lua Scripts | The redeem script to give to new users for this specific script. |
Managing users
Users are added automatically when they redeem a key, or manually from the Users tab. Each user record contains:
| Field | Description |
|---|---|
| hwid | Hardware ID from RbxAnalyticsService — unique per device |
| username | Roblox username, auto-filled on key redemption |
| status | whitelisted, blacklisted, or expired |
| ban_reason | Shown in the kick message when blacklisted |
| notes | Private notes only visible in your dashboard |
| hwid_resets_left | Number of HWID resets remaining |
| tokens | Reset token balance |
| executor | Auto-detected executor name when they run the loader |
| last_seen | Last 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.
Keys
Keys let you give someone access without manually entering their HWID. Generate them from the Keys tab inside a script.
| Duration | Access period |
|---|---|
| 7day | Expires 7 days after the user redeems it |
| 30day | Expires 30 days after the user redeems it |
| lifetime | Never 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.
| Action | When it's logged |
|---|---|
| executed | A whitelisted user successfully loads the script |
| redeemed key | A 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.
Each webhook message shows the script name, username, executor, and HWID of whoever ran it.
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.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.
-- 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))()
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.
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.
-- 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")))()
Whitelist statuses
When you run the loader, one of the following outcomes happens based on your whitelist status.
| Status | What happens |
|---|---|
| whitelisted | Script loads successfully |
| blacklisted | Kicked — ban reason shown in the kick message |
| not found | Kicked — your HWID is not in the whitelist. Redeem a key first. |
| expired | Kicked — 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.