No features match that search.
Introduction
Rose runs outside Roblox with a tabbed ImGui menu: Combat, Visuals, Config, and Settings — plus floating satellite windows.
-
External architecture
Memory reads and writes from outside the Roblox process. Overlay UI — no injection into the game client.
-
Modular menu
Sub-tabs per category, floating config panels, keybind gears, accent-themed glass panels, and an ESP preview window.
-
Satellite windows
Appbar-toggled side windows — AI Assistant, Dex Explorer, Script Output, Player List, and Keybinds — each resizable and remembered between launches.
-
Wallcheck system
Shared visibility raycasting for combat and ESP — team, FOV, KO, gun, and wall checks with visible/hidden color states.
Combat
Aim assistance, silent redirection, trigger fire, hitbox tools, and hit feedback — each with its own keybinds and FOV options.
-
Aimbot
Camera aim with sticky target, smoothing, easing, prediction, shake, resolver, closest-part selection, enemies-only, distance limit, and draw FOV (fill, glow, outline, spin, rainbow).
-
Silent Aim
Redirects shots without moving your camera. Sticky target, hit chance, health check, prediction, snap line, and a full FOV/keybind setup separate from aimbot.
-
Raycast Silent Aim
A dedicated Silent Aim mode that hooks the game's own raycast, resolving hits through the same detection the server relies on instead of redirecting your mouse or camera.
-
Magic Bullet
Exclusive to Raycast mode — forces your shot to connect on the target even through walls and other obstacles in the way.
-
Triggerbot
Auto-fires when your crosshair is on a valid target. Click delay, FOV-limited, with team/wall/KO checks and closest-part targeting.
-
Hitbox Expander
Expands enemy hitboxes for easier hits. Optional can-collide toggle plus team, knock, and enemies-only checks.
-
Hit Sounds
Plays a custom sound when you register a hit — instant feedback without checking the kill feed.
-
Hit Logs
On-screen hit log feed so you can review recent connections while you play.
-
Hit Tracers
Draws a tracer from you to the target on successful hits. Trigger by health, click, or ammo change, with duration and thickness controls.
Visuals & ESP
Player overlays on the external draw layer — every ESP element is its own toggle with color and style options.
-
Box ESP
Bounding or corner boxes with fill, gradient fill, and glow intensity — independent color picker.
-
Name ESP
Shows username or display name above players with its own color.
-
Distance ESP
Displays distance to each player with a dedicated color control.
-
Tool ESP
Shows the currently equipped tool name on each player.
-
Weapon Icon ESP
Renders weapon icons beside players for faster target reads.
-
Tracers
Lines from a chosen screen origin to each player.
-
Health Bar
Flat or gradient health bar with configurable position and start/end colors.
-
Health Text
Numeric HP text with independent position and color.
-
Skeleton
Bone skeleton overlay with adjustable thickness for precise positioning reads.
-
Chams
Highlights player models through walls with fill and outline colors.
-
Engine Chams
Native Roblox FastCluster chams (through walls). Mutually exclusive with regular Chams — style and color presets included.
-
Crosshair
Custom crosshair overlay — Cross, Corners, or Diamond styles with pulse, echo, rainbow, and breath effects.
-
Radar
Mini-map style radar with position, mode, size, zoom, auto-zoom, and transparency.
-
Sonar
Pulsing sonar ring that shows nearby player positions with optional distance labels.
-
View Indicator
Shows where other players are looking relative to you.
-
Circle ESP
Draws a circle marker around players as an alternate ESP style.
-
Screen Arrows
Off-screen indicators with optional avatar, name, and distance.
-
ESP Filters & Style
Team / death / KO checks, wallcheck colors, enemies-only, local player toggle, distance limit, text background, outline, ESP font, and ESP effects.
World
Client-side lighting and atmosphere — applied through external memory writes, not game scripts.
-
Brightness
Overrides scene brightness with a configurable value slider.
-
Fullbright Ambient
Forces ambient and outdoor ambient to a chosen color for a fullbright look.
-
Clock Time
Freeze or set time of day, latitude, day of year, and moon phase.
-
Fog
Custom fog color with start and end distance controls.
-
Bloom
Post-process bloom with intensity, size, and threshold.
-
Blur
Depth-style blur effect with adjustable size.
-
Sun Rays
God-ray style sun shafts with intensity and spread.
-
Water
Terrain water color, transparency, reflectance, wave size, and wave speed.
Movement
Character mobility options with per-feature keybinds and mode selectors.
-
Walk Speed
Raises movement speed beyond default. Modes: WalkSpeed, CFrame, or Velocity — with keybind toggle.
-
Jump Power
Custom jump height with keybind toggle.
-
Infinite Jump
Unlimited mid-air jumps for movement tech and traversal.
-
Float
Holds your character in a floating state for controlled mid-air positioning.
-
Bunny Jump
Automatic jump chaining on landing to keep momentum.
-
Fly
Free-flight with adjustable speed. Modes: Regular, Velocity, or CFrame — keybind toggle.
-
Noclip
Walk through walls with configurable speed and keybind.
-
Third Person
Force a third-person camera distance with keybind toggle.
-
FOV Changer
Overrides camera field of view for a wider or tighter view.
Exploits
Network and character manipulation — use responsibly per game rules.
-
Spinbot
Rapidly rotates your character for visual disruption or anti-aim style movement.
-
Desync
Network desync utility with optional visualizer — keybind toggle.
-
Void Hide
Teleports your character below the map to avoid damage — toggle with keybind.
-
Freeze Player
Freezes another player's position locally with keybind control.
-
Tickrate
Client tickrate adjustment for advanced movement setups — keybind toggle.
-
Orbit
Orbit around your aimbot or silent-aim target with speed control and optional spectate.
Client
Avatar and gameplay QoL tweaks from the Config / character panels.
-
Anti Fling
Zeros insane local velocities and snaps you back if flung.
-
Headless
Removes your head appearance locally for a headless look.
-
Korblox
Applies the Korblox leg appearance on your character.
-
Animation Changer
Swap character animations from a preset list.
-
Emote Changer
Change equipped emotes from curated presets.
-
Skin Changer
Skin changer for supported Da Hood-style experiences.
Scripting & AI
A full Lua 5.4 engine running outside the game, an AI assistant that writes scripts and configures the menu for you, and the tooling around both. See LuaVM Docs below.
-
LuaVM Script Engine
Embedded Lua 5.4 running on its own worker thread outside the Roblox process. Reads and writes game memory directly — no injection, no Luau.
-
Script Editor
Built-in code editor with Lua syntax highlighting, plus Execute and Clear. Scripts compile on the worker and run as coroutines.
-
Script Output
Dedicated log window for the LuaVM — print, warn, errors, and success lines colour-coded by level, with auto-scroll and Clear Output.
-
Drawing Library
Line, Text, Circle, Square, Triangle, and Quad rendered through the Rose overlay with colour, thickness, transparency, and ZIndex.
-
World-to-Screen
Overlay-synced projection matrix so Lua ESP lines up pixel-perfect with the built-in visuals, including DPI and resolution scaling.
-
Rose Script API
Drive the cheat from Lua — toggle aimbot, silent aim, triggerbot, ESP, and movement, and read the current aim target.
-
HTTP & File Sandbox
HTTP requests plus a sandboxed file API for persistent script configs — read, write, append, list, and delete inside the scripts folder.
-
Input & Clipboard API
Read keys and mouse position, send synthetic clicks and keystrokes, and get or set the clipboard from your scripts.
-
Bytecode & Decompiler
Enumerate LocalScripts and ModuleScripts in the place, dump their bytecode, and decompile it back to readable source.
-
AI Assistant
In-menu chat that knows the LuaVM API. Ask it for a script and it writes one that actually runs, or ask it to set up your config and it flips the toggles for you.
-
AI Config Tools
The assistant can apply presets, set individual features and colors, and save, load, or delete configs directly from chat.
-
Dex-Aware AI
Whatever you select in Dex Explorer is passed to the assistant as context, so you can ask about a specific instance without describing it.
Game Modules
Dedicated controls appear when Rose detects a supported place. Shared combat/ESP still works everywhere else.
-
Blade Ball — Auto Parry
Automatically parries incoming balls with timing helpers.
-
Blade Ball — Clash Mode
Clash-oriented parry behaviour for close exchanges.
-
Blade Ball — Press F
Helper that presses F for you when a parry window opens.
-
Blade Ball — Predict Timing
Predicts ball timing for earlier, cleaner parries.
-
Blade Ball — Ball ESP
Highlights the ball through the map.
-
Blade Ball — Parry Range
Visualizes the parry range around you.
-
Arsenal — Fast Fire Rate
Increases fire rate beyond default weapon timing.
-
Arsenal — No Recoil
Removes weapon recoil for stable tracking.
-
Arsenal — Full Auto
Forces full-auto behaviour across weapons.
-
Arsenal — Infinite Ammo
Keeps magazines topped up while enabled.
-
MM2 — Role ESP
Tags murderer, sheriff, and innocent roles clearly.
-
MM2 — Coin ESP
Highlights coins for farm routes.
-
Rivals support
Dedicated game-support module for Rivals — shared combat and ESP stack stays available.
Utilities
Satellite widgets, HUD overlays, and system options around the main menu.
-
Configs
Save, load, and delete full menu profiles — combat, visuals, movement, and UI in one file.
-
Player List
Floating player list with friend/enemy marking — integrates with combat playerlist filters.
-
Watermark
On-screen Rose watermark HUD element.
-
Keybind List
Shows active keybinds in a floating panel.
-
Keystrokes
On-screen keystroke display for clips and streams.
-
ESP Preview
Live ESP preview window in 2D or 3D mode while you tune colors and styles.
-
Dex Explorer
Resizable instance explorer for browsing the DataModel tree and properties — your selection feeds straight into the AI Assistant.
-
Resizable Satellite Windows
AI Assistant, Dex, and Script Output can all be resized and repositioned freely — sizes and positions persist between sessions.
-
Appearance Window
Menu appearance editor with presets, colors, and window particle options.
-
Stream Proof
Hides the overlay from common capture methods while you stream or record.
-
VSync
Syncs overlay frame timing with your display.
-
Discord Presence
Rich presence status while Rose is running.
-
Fast Launch
Speeds up the attach / launch flow on supported setups.
-
Cache Models & NPCs
Caches Workspace character-like models and NPCs for ESP/aim — toggle off for zero extra work.
-
Menu Scale & Appbar
DPI menu scale, appbar window toggles, and Regular / Performance software usage modes.
Rose LuaVM
Rose ships an embedded Lua engine so you can write your own scripts on top of the
cheat — custom ESP, feature automation, HTTP tools, game-memory probing with
getgc, and anything else you can build with the globals below.
This is standard Lua 5.4, not Luau, and Rose is external. Scripts written for injector-based executors will not run here without a rewrite.
Instance.new, parenting and attributes go through the engine call gate. A subset of signals is live on the executor side — RunService, UserInputService, BindableEvent, tweens and GetPropertyChangedSignal. Remotes, ChildAdded, PlayerAdded and similar engine events are still stubs — poll those with wait().
Running a script
Open the Script tab in the menu, paste your code, and press Execute. Anything your script prints — plus runtime errors with line numbers — shows up in the Script Output window, which you can open from the appbar.
Every loop needs a wait(). A loop without one will lock up scripting until you restart Rose. There is also no stop button, so build a kill switch into anything long-running — every example here uses END.
Quick start
A box over every other player, with a kill switch on END.
local boxes = {}
while not iskeypressed("end") do
local me = Players.LocalPlayer
for _, plr in ipairs(Players:GetPlayers()) do
if plr ~= me then
local box = boxes[plr]
if not box then
box = Drawing.new("Square")
box.Color = Color3.fromRGB(255, 80, 120)
box.Thickness = 1
boxes[plr] = box
end
local char = plr.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
box.Visible = false
if root then
-- WorldToScreen always returns 2 values: (Vector2 or nil, boolean)
local head, headOn = WorldToScreen(root.Position + Vector3.new(0, 3, 0))
local feet, feetOn = WorldToScreen(root.Position - Vector3.new(0, 3.5, 0))
if head and feet and (headOn or feetOn) then
local h = math.abs(feet.Y - head.Y)
local w = h * 0.5
box.Position = Vector2.new(head.X - w * 0.5, head.Y)
box.Size = Vector2.new(w, h)
box.Visible = true
end
end
end
end
wait(0.03)
end
for _, box in pairs(boxes) do
box:Remove()
end
print("Stopped.")
The in-menu AI Assistant knows this API. Describe what you want and it writes a script that actually runs, or paste an error and it will fix it.
Environment
Three globals are kept up to date automatically, so they survive respawns and place
teleports without re-caching. They are nil until the game resolves — always
guard for that.
| Global | Description |
|---|---|
game | The DataModel. |
workspace | The Workspace. |
Players | The Players service. |
RunService | Heartbeat / Stepped / RenderStepped (executor-driven). |
UserInputService | Key/mouse polling + InputBegan / InputEnded. |
TweenService / TweenInfo | Property tweens on bridged instances. |
Enum | KeyCode, UserInputType, EasingStyle / Direction, PlaybackState. |
HttpService | GetAsync, RequestAsync, JSONEncode / JSONDecode. |
bit32 | 32-bit bitwise library (Luau-compatible subset). |
task | wait, spawn, delay, defer, cancel. |
LocalPlayer, Character and Camera are not globals. Get them like this:
local lp = Players.LocalPlayer
local char = lp and lp.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
local root = char and char:FindFirstChild("HumanoidRootPart")
local camera = workspace.CurrentCamera
Instances have stable identity: two lookups of the same object give you the same value,
so == works and you can use instances as table keys.
getgenv() returns the globals table if you need state that persists across
runs, and typeof(v) reports "Instance", "Vector3",
"Vector2", "Color3", "CFrame" or
"Drawing".
Compatibility helpers
A handful of extras from common script hubs that plain Lua does not ship with, added so more unmodified scripts run as-is.
| Function | Returns | Notes |
|---|---|---|
loadstring(src, chunkname) | function, or nil + error | Compiles source into a callable function without running it — the same sandbox and globals apply once you call it. |
identifyexecutor() | "Rose", "1.1" | Executor name and version string. |
checkcaller() | boolean | Always true here — every call originates from the executor, never from a sandboxed in-game script. |
getgenv() / getrenv() | table | Both return the executor globals table (not the real Roblox environment). |
table.find(t, value, init) | integer / nil | Index of the first array element equal to value. |
table.create(count, value) | table | Pre-sized array, optionally filled with value. |
table.clone(t) | table | Shallow copy, metatable included. |
string.split(s, separator) | table | separator defaults to ","; pass "" to split into individual characters. |
Instances
Instance.new
Instance.new(className [, parent]) -> Instance | nil
Creates a real engine instance through the call gate (for example
"Part", "Fire", "Smoke",
"Sparkles", "PointLight",
"ParticleEmitter"). Optional parent sets
Parent in the same call. On failure it prints a short reason to
Script Output and returns nil — not every class is creatable.
local root = Players.LocalPlayer.Character
and Players.LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if not root then return end
local fire = Instance.new("Fire", root)
if fire then
fire.Size = 8
fire.Color = Color3.fromRGB(255, 80, 40)
fire.SecondaryColor = Color3.fromRGB(255, 200, 60)
end
Methods
| Method | Returns | Notes |
|---|---|---|
:GetChildren() | table | Empty when the instance is invalid. |
:GetDescendants() | table | Recursive and expensive — never call it in a fast loop. |
:FindFirstChild(name) | Instance / nil | Not recursive; there is no recursive parameter. |
:FindFirstChildOfClass(class) | Instance / nil | |
:FindFirstChildWhichIsA(class) | Instance / nil | |
:WaitForChild(name, timeout) | Instance / nil | Yields. Default timeout 5 s. Returns nil instead of erroring. |
:IsA(class) | boolean | Matches the exact class name, plus "BasePart" and "PVInstance". There is no deeper inheritance. |
:IsDescendantOf(ancestor) | boolean | Walks parents up to 64 levels. |
:GetFullName() | string | Dot-separated path. |
:Destroy() | — | Unparents the instance (Parent = nil). |
:GetAttribute(name) | any / nil | Reads engine attributes (bool / number / string / Vector3 / CFrame). Overlay values from SetAttribute win. |
:SetAttribute(name, value) | — | Stores bool / number / string (or nil to clear). Writes through to the real map when the attribute already exists; does not create brand-new engine keys. |
:GetAttributes() | table | Name → value map of overlay + engine attributes. |
:GetPropertyChangedSignal(name) | Signal | Live (polled each tick). Fires the new value when that property changes. |
:Fire(...) | — | Fires the executor-side BindableEvent channel for that instance. Creating a Fire effect is Instance.new("Fire"). |
game:GetService(name) | Instance / nil | |
Players:GetPlayers() | table |
Readable properties
Every instance has Name, ClassName and Parent.
Any other string key falls back to FindFirstChild, which is why
char.HumanoidRootPart works.
| Class | Properties |
|---|---|
| DataModel | PlaceId, GameId, JobId, Workspace |
| Players | LocalPlayer |
| Player | Character, DisplayName, UserId, Team |
| Workspace | CurrentCamera |
| BasePart | Position, Size, CFrame, Transparency, Anchored, CanCollide, Color / Color3 |
| Camera | CFrame, FieldOfView, ViewportSize |
| Humanoid | Health, MaxHealth, WalkSpeed, JumpPower, HipHeight, RootPart |
| Fire | Size, Heat, Enabled, Color, SecondaryColor |
| Smoke | Size, Opacity, RiseVelocity, Enabled, Color |
| Sparkles | Enabled, SparkleColor / Color |
| PointLight / SpotLight / SurfaceLight | Brightness, Range, Enabled, Color |
| ParticleEmitter | Rate, Speed, TimeScale, Brightness, LightEmission, ZOffset |
| Lighting | Brightness, ClockTime, FogStart, FogEnd, Ambient, OutdoorAmbient, FogColor |
| Value objects | Value |
Writable properties
| Class | Writable |
|---|---|
| Any instance | Parent (instance or nil to unparent) |
| Humanoid | WalkSpeed, JumpPower, HipHeight, Health, MaxHealth |
| BasePart | Position, Size, CFrame, Transparency, Anchored, CanCollide, Color / Color3 |
| Camera | CFrame (rotation only), FieldOfView |
| Fire | Size, Heat, Enabled, Color, SecondaryColor |
| Smoke | Size, Opacity, RiseVelocity, Enabled, Color |
| Sparkles | Enabled, SparkleColor / Color |
| PointLight / SpotLight / SurfaceLight | Brightness, Range, Enabled, Color |
| ParticleEmitter | Rate, TimeScale, Brightness, LightEmission, ZOffset, Drag |
| Lighting | Brightness, ClockTime, FogStart, FogEnd, Ambient, OutdoorAmbient, FogColor |
| Value objects | Value |
Writing anything not in that table is a silent no-op. No error is raised and nothing happens, so it is easy to think a script works when it does not. Read the property back if you are unsure.
Anything not listed as readable — PrimaryPart, Backpack, Velocity, Material, BrickColor and similar — comes back nil. Values can also go nil briefly during respawns, so code defensively.
Types
Four core userdata types exist: Vector3, Vector2, Color3, CFrame.
There is no UDim2, Ray, Rect or
BrickColor. Enum and TweenInfo are available
as globals — see Services.
Always construct with .new. Calling a type directly, like Vector3(1,2,3), either throws or silently produces wrong values.
| Type | Constructors | Members |
|---|---|---|
Vector3 |
.new(x, y, z).zero .one .xAxis .yAxis .zAxis |
X Y Z Magnitude Unit:Dot() :Cross() :Lerp() |
Vector2 |
.new(x, y) |
X Y Magnitude Unit:Dot() :Lerp() |
Color3 |
.new(r, g, b) 0–1.fromRGB(r, g, b) 0–255.fromHSV(h, s, v) 0–1 |
R G B:ToRGB() :Lerp() |
CFrame |
.new(v3) or .new(x, y, z).lookAt(from, to, up).Angles(rx, ry, rz) radians |
Position X Y ZLookVector RightVector UpVector:Inverse() :ToObjectSpace() |
Operators
- Vector3 supports
+,-, unary-,==, and*//by a number. There is no component-wiseVector3 * Vector3. - Vector2 supports
+,-,==, and*//by a number. - CFrame supports
*with a Vector3 or another CFrame. Anything else throws. - Color3 has no arithmetic; use
:Lerp().
Drawing
Drawing.new(type) -- "Line" "Text" "Circle" "Square" "Triangle" "Quad"
Coordinates are overlay pixels — the same space returned by
WorldToScreen, GetScreenSize and getmousepos.
Shapes render behind the Rose menu.
Shared properties
| Property | Type | Default | Notes |
|---|---|---|---|
Visible | boolean | true | |
Transparency | number | 0 | Inverted vs. other executors: 0 is opaque, 1 is invisible. |
Thickness | number | 1 | |
Color | Color3 | white | |
ZIndex | integer | 0 | Higher draws on top. |
OutlineColor | Color3 | black | Only Text uses it. |
Per-type properties
| Type | Properties |
|---|---|
Line | From, To — Vector2 |
Text | Text string · Position Vector2 · Size is a number (font size) · Center, Outline booleans |
Circle | Position is the centre · Radius · Filled · NumSides |
Square | Position is the top-left · Size is a Vector2 · Filled |
Triangle | PointA, PointB, PointC · Filled |
Quad | PointA–PointD · Filled |
Always clean up. Call :Remove() on every object before your script exits — otherwise the shape stays on screen until you restart Rose. cleardrawcache() wipes every Drawing object from every script, so use it as a last resort rather than routine cleanup.
Screen
WorldToScreen
WorldToScreen(world: Vector3) -> (Vector2 | nil, boolean) WorldToScreen(x, y, z) -> (Vector2 | nil, boolean)- First value — the overlay-pixel
Vector2, ornilwhen the point is behind the camera. - Second value —
trueonly when the point lands inside the visible area.
The position can be non-nil while onScreen is false. That is intentional — it lets you build an ESP box from head and feet even when one end runs past the screen edge. Check pos ~= nil first, then use the boolean to decide visibility.
local pos, onScreen = WorldToScreen(root.Position)
if pos and onScreen then
-- pos.X and pos.Y are overlay pixels
end
GetScreenSize
GetScreenSize() -> Vector2Overlay size in pixels. Returns zeros before the overlay is ready, so check for > 0 before dividing by it.
Input
| Function | Returns | Notes |
|---|---|---|
iskeypressed(key) | boolean | Works even when Roblox is not focused. |
isrbxactive() | boolean | True when the Roblox window is in the foreground. |
getmousepos() | Vector2 | Overlay coordinates. |
mousemoverel(dx, dy) | — | Relative move. |
mousemoveabs(x, y) | — | Absolute screen coordinates. |
mouse1click() mouse1press() mouse1release() | — | Left button. |
mouse2click() mouse2press() mouse2release() | — | Right button. |
keypress(key) keyrelease(key) | — | Some protected-input games ignore these. |
getclipboard() setclipboard(text) | string / — |
Key names
"left", "right", "middle", "space",
"shift", "ctrl", "alt", "tab",
"escape", "home", "end", "insert",
"delete", and single letters or digits like "a" or
"1".
Only the first character of an unrecognised string is used, so "F1" resolves to the letter F. For function keys pass the numeric virtual-key code instead: iskeypressed(0x70) is F1.
Timing
| Function | Returns | Notes |
|---|---|---|
wait(seconds) | nothing | Unlike Roblox, local dt = wait() gives nil. Also task.wait. |
spawn(fn) | — | Runs fn immediately in its own thread. Extra arguments are not forwarded. Also task.spawn. |
task.delay(sec, fn) | handle | Pass the handle to task.cancel. |
task.defer(fn) | handle | |
task.cancel(handle) | — |
There is no clock — no tick, time or os.time. To measure elapsed time, add up the values you pass to wait(), or use RunService.Heartbeat and accumulate dt.
For frame loops prefer RunService.Heartbeat:Connect (see
Services). For engine events that are still stubs
(PlayerAdded, ChildAdded, remotes), poll with
wait() — details in Signals.
Services
These globals are executor-side facades. They look like Roblox services but are driven by Rose’s Lua worker (~240 Hz when scripts are active), not by the game’s own scheduler.
Enum
Nested tables of { Name, Value } items:
Enum.KeyCode (letters, digits, Space, Return, modifiers, F1–F12),
Enum.UserInputType, Enum.EasingStyle,
Enum.EasingDirection, Enum.PlaybackState.
RunService
| Member | Notes |
|---|---|
Heartbeat / Stepped / RenderStepped | Live signals. Heartbeat and RenderStepped pass dt; Stepped passes 0, dt. |
:IsClient() | Always true. |
:IsServer() / :IsStudio() | Always false. |
local conn = RunService.Heartbeat:Connect(function(dt)
-- runs each worker tick while connected
end)
-- later: conn:Disconnect()
UserInputService
| Member | Notes |
|---|---|
InputBegan / InputEnded | Polled via Win32 key state. Input object has KeyCode, UserInputType, UserInputState, Position. |
:IsKeyDown(key) | Accepts a VK number or an Enum.KeyCode item. |
:GetMouseLocation() | Overlay Vector2. |
TweenService / TweenInfo
TweenInfo.new(time [, style, direction, repeatCount, reverses, delay]) TweenService:Create(instance, tweenInfo, { Prop = target })
Tweens number or Vector3 properties that the Instance bridge can write.
Supports :Play(), :Cancel() and a live
Completed signal. Easing covers Linear, Sine, Back, Quad, Quart, Quint
and Cubic; other styles fall back toward linear. Repeat / reverse / delay fields are
accepted but not fully driven yet.
Signals
Signals are userdata with :Connect / :Once / :Wait
/ :Fire. Connections expose :Disconnect() and
.Connected.
Live (executor-driven)
RunService.Heartbeat,Stepped,RenderSteppedUserInputService.InputBegan/InputEndedBindableEvent.Event+bindable:Fire(...)instance:GetPropertyChangedSignal(prop)(polled each tick)- Tween
Completed
local be = Instance.new("BindableEvent")
be.Event:Connect(function(msg)
print("got", msg)
end)
be:Fire("hello")
Stubs (never fire)
These exist so pasted scripts do not crash, but callbacks never run and
:Wait() returns immediately:
ChildAdded / ChildRemoved,
DescendantAdded / DescendantRemoving,
PlayerAdded / PlayerRemoving,
CharacterAdded / CharacterRemoving,
Remote OnClientEvent, ProximityPrompt.Triggered.
There is no real remote firing. For stub events, poll with wait().
bit32
Luau-compatible 32-bit bitwise library on unsigned integers:
band, bor, bxor, bnot,
lshift, rshift, arshift,
lrotate, rrotate, extract, replace.
local flags = bit32.bor(0x01, 0x04)
print(bit32.band(flags, 0x04) ~= 0) -- true
getgc
Walks the in-game Luau heap (ScriptContext), not the executor VM. Needs a live place with a resolvable ScriptContext — lobby / menu may return an error string instead of data.
| API | Returns | Notes |
|---|---|---|
getgc() / getgc(false) | table | Same as getgc_info(). |
getgc(true [, range]) | iterator | Yields table proxies. range may be a limit number or { offset, limit }. Default limit 20 000, max 100 000. |
getgc_info() | table / nil, err | Heap stats: kb, gcstate, pages, by_type, pointers, samples. |
findgc(key [, val]) | table | Tables that contain a string key (optional value match). Also accepts a list of keys. |
setgc(...) | varies | Control GC fields ("stop", "restart", "pause", …) or one-shot write matching nodes. collect / step are unsupported. |
lockgc(key, value [, interval_ms]) | — | Background rewrite of matching nodes (10–5000 ms). |
unlockgc([tag]) | number | Clear locks. |
getrawkeys(proxy) | table | String keys → values from a live Luau table proxy. |
gcprobe() | table / nil, err | Multi-VM diagnostic. |
gc.* | — | Namespace aliases: set, get, find, info, lock, unlock, keys, probe, flush. |
Proxies read/write game memory. Caps exist for a reason — avoid unbounded walks in hot loops. rawget is patched so it works on these proxies.
Rose API
The Rose global drives the cheat's own features from Lua. Field names are
case-insensitive.
| Table | Fields |
|---|---|
Rose.Aimbot | Enabled Sticky DrawFOV booleans · FOV number · AimPart integer |
Rose.Silent | Enabled Sticky MagicBullet DrawFOV · FOV · AimPart |
Rose.Triggerbot | Enabled · FOV · AimPart |
Rose.ESP | Master Box Name Skeleton Tracers |
Rose.Movement | WalkSpeed Fly Noclip booleans · WalkSpeedValue FlySpeed numbers |
AimPart
0 Head · 1 HumanoidRootPart · 2 UpperTorso ·
3 LowerTorso · 4 Left Hand · 5 Right Hand ·
6 Left Upper Arm · 7 Right Upper Arm ·
8 Left Upper Leg · 9 Right Upper Leg ·
10 Left Foot · 11 Right Foot
Rose.GetTarget()
Returns nil, or a table with name, address and
source ("aimbot" or "silent") describing whoever
the cheat is currently aiming at.
pairs(Rose.Aimbot) iterates nothing — use the field names above. Reading an unknown field gives nil and writing one is ignored.
HTTP & Files
HTTP
request({ Url = "...", Method = "GET", Body = nil, Headers = {}, Timeout = 10 }) HttpGet(url) -> string HttpService:GetAsync(url) -> string HttpService:RequestAsync(opts) -> table HttpService:JSONEncode(value) -> string HttpService:JSONDecode(json) -> any
request / http_request take a table; Url is required
(http:// or https://). Timeout is in
seconds (clamped 1–30, default 10). On transport success the result has
Success = true, StatusCode, Body and
StatusMessage = "OK" — including non-2xx HTTP codes. On transport failure
only Success = false and StatusMessage are set.
HttpGet / HttpService:GetAsync return the body string on 2xx,
otherwise they raise a Lua error. JSON helpers cover nil / bool / number / string and
tables as arrays or string-key objects (depth ≤ 32).
request() and HttpGet are synchronous — the whole Lua worker (every script + ESP publish) pauses until they finish. Use short timeouts and keep them out of fast loops.
Files
All file access is sandboxed to the scripts folder next to the executable.
Paths that try to escape it are rejected.
| Function | Returns | Notes |
|---|---|---|
readfile(path) | string | Throws if missing — check isfile first or wrap in pcall. |
writefile(path, data) | — | Truncates and creates parent folders. |
appendfile(path, data) | — | |
isfile(path) isfolder(path) | boolean | |
makefolder(path) | — | |
listfiles(path) | table | File names, not full paths. |
delfile(path) | — |
Output
print and warn take any number of values and send them to the
Script Output window, colour-coded by level along with any uncaught
errors. The standard string, table, math,
utf8 and coroutine libraries are available, plus the
compatibility helpers above; os,
io and require are not.
Scripts
Helpers for enumerating in-game scripts and reading bytecode. These are best-effort on an external build — expect empty results when the place locks scripts down. Caps: 8 000 scripts / 120 000 nodes walked; bytecode size ≤ 16 MB.
| Function | Returns | Notes |
|---|---|---|
getscripts([root]) | table | LocalScript / Script / ModuleScript under root (default DataModel). |
getscriptbytecode(script) | string | Raw bytecode blob, or "" when unavailable. |
decompile(script | bytecode) | string | Built-in lifter. If Fission.Server is listening on 127.0.0.1:3001, fuller AST output is preferred. |
getsenv(script) | table | Stub — always returns an empty table externally. |
Examples
Complete, runnable scripts. Press END to stop any of them.
1 · ESP with box, name and health bar
The full pattern: a re-run guard, a per-player drawing cache, correct WorldToScreen handling, and cleanup on exit.
-- Re-running the script shuts the previous instance down automatically.
local G = getgenv()
G.ROSE_ESP_VERSION = (G.ROSE_ESP_VERSION or 0) + 1
local myVersion = G.ROSE_ESP_VERSION
local cache = {}
local function makeEntry()
local box = Drawing.new("Square")
box.Thickness = 1
box.Color = Color3.fromRGB(255, 80, 120)
box.Visible = false
local label = Drawing.new("Text")
label.Size = 13
label.Center = true
label.Outline = true
label.ZIndex = 2
label.Visible = false
local hp = Drawing.new("Line")
hp.Thickness = 3
hp.Visible = false
return { box = box, label = label, hp = hp }
end
local function hide(e)
e.box.Visible = false
e.label.Visible = false
e.hp.Visible = false
end
local function destroy(e)
e.box:Remove()
e.label:Remove()
e.hp:Remove()
end
print("ESP running. Press END to stop.")
while myVersion == G.ROSE_ESP_VERSION do
if iskeypressed("end") then break end
local seen = {}
local me = Players and Players.LocalPlayer or nil
local list = Players and Players:GetPlayers() or {}
for i = 1, #list do
local plr = list[i]
if plr ~= me then
local e = cache[plr]
if not e then
e = makeEntry()
cache[plr] = e
end
seen[plr] = true
local char = plr.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if root then
local pos = root.Position
local head = WorldToScreen(pos + Vector3.new(0, 3, 0))
local feet, feetOn = WorldToScreen(pos - Vector3.new(0, 3.5, 0))
if head and feet then
local height = math.abs(feet.Y - head.Y)
local width = height * 0.5
local left = head.X - width * 0.5
e.box.Position = Vector2.new(left, head.Y)
e.box.Size = Vector2.new(width, height)
e.box.Visible = true
e.label.Text = plr.Name
e.label.Position = Vector2.new(head.X, head.Y - 15)
e.label.Visible = true
local hum = char:FindFirstChildOfClass("Humanoid")
if hum and hum.MaxHealth > 0 then
local frac = math.max(0, math.min(1, hum.Health / hum.MaxHealth))
local barX = left - 5
e.hp.From = Vector2.new(barX, head.Y + height)
e.hp.To = Vector2.new(barX, head.Y + height - height * frac)
e.hp.Color = Color3.fromHSV(frac * 0.33, 1, 1)
e.hp.Visible = true
else
e.hp.Visible = false
end
else
hide(e)
end
else
hide(e)
end
end
end
-- Drop players who left the server.
for plr, e in pairs(cache) do
if not seen[plr] then
destroy(e)
cache[plr] = nil
end
end
wait(0.03)
end
for plr, e in pairs(cache) do
destroy(e)
cache[plr] = nil
end
print("ESP stopped.")
2 · Feature loop with a keybind toggle
Drives the built-in aimbot and speed through the Rose table, with proper edge detection.
local G = getgenv()
G.ROSE_FEATURES_VERSION = (G.ROSE_FEATURES_VERSION or 0) + 1
local myVersion = G.ROSE_FEATURES_VERSION
local aimOn, lastToggle, lastTarget = false, false, nil
print("F = toggle aimbot | SHIFT = speed | END = quit")
while myVersion == G.ROSE_FEATURES_VERSION do
if iskeypressed("end") then break end
-- Edge detection: iskeypressed reports state, not events.
local down = iskeypressed("F")
if down and not lastToggle then
aimOn = not aimOn
Rose.Aimbot.Enabled = aimOn
Rose.Aimbot.FOV = 140
Rose.Aimbot.AimPart = 0 -- 0 = Head
Rose.Aimbot.Sticky = true
Rose.Aimbot.DrawFOV = aimOn
print("Aimbot:", aimOn and "ON" or "OFF")
end
lastToggle = down
-- Only while Roblox is focused, since iskeypressed is system-wide.
if isrbxactive() and iskeypressed("shift") then
Rose.Movement.WalkSpeed = true
Rose.Movement.WalkSpeedValue = 220
else
Rose.Movement.WalkSpeed = false
end
local t = Rose.GetTarget()
local name = t and t.name or nil
if name ~= lastTarget then
lastTarget = name
if name then
print(string.format("Target [%s]: %s", t.source, name))
end
end
wait(0.05)
end
Rose.Aimbot.Enabled = false
Rose.Aimbot.DrawFOV = false
Rose.Movement.WalkSpeed = false
print("Features off.")
3 · Persistent config
local FILE = "myconfig.txt"
local function saveConfig(fov, espOn)
writefile(FILE, string.format("%d|%s", fov, tostring(espOn)))
print("Saved to scripts/" .. FILE)
end
local function loadConfig()
if not isfile(FILE) then return nil end
local ok, raw = pcall(readfile, FILE) -- readfile throws on failure
if not ok then
warn("Could not read config:", raw)
return nil
end
local fov, esp = string.match(raw, "^(%d+)|(%a+)$")
if not fov then
warn("Corrupt config, ignoring.")
return nil
end
return tonumber(fov), esp == "true"
end
local fov, espOn = loadConfig()
if fov then
print("Loaded config:", fov, espOn)
else
fov, espOn = 130, true
saveConfig(fov, espOn)
end
Rose.Aimbot.FOV = fov
Rose.ESP.Master = espOn
Rose.ESP.Box = espOn
Rose.ESP.Name = espOn
for _, name in ipairs(listfiles()) do
print("file:", name)
end