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.

hello_esp.lua
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.

GlobalDescription
gameThe DataModel.
workspaceThe Workspace.
PlayersThe Players service.
RunServiceHeartbeat / Stepped / RenderStepped (executor-driven).
UserInputServiceKey/mouse polling + InputBegan / InputEnded.
TweenService / TweenInfoProperty tweens on bridged instances.
EnumKeyCode, UserInputType, EasingStyle / Direction, PlaybackState.
HttpServiceGetAsync, RequestAsync, JSONEncode / JSONDecode.
bit3232-bit bitwise library (Luau-compatible subset).
taskwait, spawn, delay, defer, cancel.

LocalPlayer, Character and Camera are not globals. Get them like this:

Lua
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.

FunctionReturnsNotes
loadstring(src, chunkname)function, or nil + errorCompiles 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()booleanAlways true here — every call originates from the executor, never from a sandboxed in-game script.
getgenv() / getrenv()tableBoth return the executor globals table (not the real Roblox environment).
table.find(t, value, init)integer / nilIndex of the first array element equal to value.
table.create(count, value)tablePre-sized array, optionally filled with value.
table.clone(t)tableShallow copy, metatable included.
string.split(s, separator)tableseparator 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.

Lua
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

MethodReturnsNotes
:GetChildren()tableEmpty when the instance is invalid.
:GetDescendants()tableRecursive and expensive — never call it in a fast loop.
:FindFirstChild(name)Instance / nilNot recursive; there is no recursive parameter.
:FindFirstChildOfClass(class)Instance / nil
:FindFirstChildWhichIsA(class)Instance / nil
:WaitForChild(name, timeout)Instance / nilYields. Default timeout 5 s. Returns nil instead of erroring.
:IsA(class)booleanMatches the exact class name, plus "BasePart" and "PVInstance". There is no deeper inheritance.
:IsDescendantOf(ancestor)booleanWalks parents up to 64 levels.
:GetFullName()stringDot-separated path.
:Destroy()Unparents the instance (Parent = nil).
:GetAttribute(name)any / nilReads 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()tableName → value map of overlay + engine attributes.
:GetPropertyChangedSignal(name)SignalLive (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.

ClassProperties
DataModelPlaceId, GameId, JobId, Workspace
PlayersLocalPlayer
PlayerCharacter, DisplayName, UserId, Team
WorkspaceCurrentCamera
BasePartPosition, Size, CFrame, Transparency, Anchored, CanCollide, Color / Color3
CameraCFrame, FieldOfView, ViewportSize
HumanoidHealth, MaxHealth, WalkSpeed, JumpPower, HipHeight, RootPart
FireSize, Heat, Enabled, Color, SecondaryColor
SmokeSize, Opacity, RiseVelocity, Enabled, Color
SparklesEnabled, SparkleColor / Color
PointLight / SpotLight / SurfaceLightBrightness, Range, Enabled, Color
ParticleEmitterRate, Speed, TimeScale, Brightness, LightEmission, ZOffset
LightingBrightness, ClockTime, FogStart, FogEnd, Ambient, OutdoorAmbient, FogColor
Value objectsValue

Writable properties

ClassWritable
Any instanceParent (instance or nil to unparent)
HumanoidWalkSpeed, JumpPower, HipHeight, Health, MaxHealth
BasePartPosition, Size, CFrame, Transparency, Anchored, CanCollide, Color / Color3
CameraCFrame (rotation only), FieldOfView
FireSize, Heat, Enabled, Color, SecondaryColor
SmokeSize, Opacity, RiseVelocity, Enabled, Color
SparklesEnabled, SparkleColor / Color
PointLight / SpotLight / SurfaceLightBrightness, Range, Enabled, Color
ParticleEmitterRate, TimeScale, Brightness, LightEmission, ZOffset, Drag
LightingBrightness, ClockTime, FogStart, FogEnd, Ambient, OutdoorAmbient, FogColor
Value objectsValue

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.

TypeConstructorsMembers
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 Z
LookVector RightVector UpVector
:Inverse() :ToObjectSpace()

Operators

  • Vector3 supports +, -, unary -, ==, and * / / by a number. There is no component-wise Vector3 * 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

PropertyTypeDefaultNotes
Visiblebooleantrue
Transparencynumber0Inverted vs. other executors: 0 is opaque, 1 is invisible.
Thicknessnumber1
ColorColor3white
ZIndexinteger0Higher draws on top.
OutlineColorColor3blackOnly Text uses it.

Per-type properties

TypeProperties
LineFrom, To — Vector2
TextText string · Position Vector2 · Size is a number (font size) · Center, Outline booleans
CirclePosition is the centre · Radius · Filled · NumSides
SquarePosition is the top-left · Size is a Vector2 · Filled
TrianglePointA, PointB, PointC · Filled
QuadPointAPointD · 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, or nil when the point is behind the camera.
  • Second valuetrue only 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.

Correct usage
local pos, onScreen = WorldToScreen(root.Position)
if pos and onScreen then
    -- pos.X and pos.Y are overlay pixels
end

GetScreenSize

GetScreenSize() -> Vector2

Overlay size in pixels. Returns zeros before the overlay is ready, so check for > 0 before dividing by it.

Input

FunctionReturnsNotes
iskeypressed(key)booleanWorks even when Roblox is not focused.
isrbxactive()booleanTrue when the Roblox window is in the foreground.
getmousepos()Vector2Overlay 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

FunctionReturnsNotes
wait(seconds)nothingUnlike 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)handlePass 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

MemberNotes
Heartbeat / Stepped / RenderSteppedLive signals. Heartbeat and RenderStepped pass dt; Stepped passes 0, dt.
:IsClient()Always true.
:IsServer() / :IsStudio()Always false.
Lua
local conn = RunService.Heartbeat:Connect(function(dt)
    -- runs each worker tick while connected
end)
-- later: conn:Disconnect()

UserInputService

MemberNotes
InputBegan / InputEndedPolled 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, RenderStepped
  • UserInputService.InputBegan / InputEnded
  • BindableEvent.Event + bindable:Fire(...)
  • instance:GetPropertyChangedSignal(prop) (polled each tick)
  • Tween Completed
BindableEvent
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.

Lua
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.

APIReturnsNotes
getgc() / getgc(false)tableSame as getgc_info().
getgc(true [, range])iteratorYields table proxies. range may be a limit number or { offset, limit }. Default limit 20 000, max 100 000.
getgc_info()table / nil, errHeap stats: kb, gcstate, pages, by_type, pointers, samples.
findgc(key [, val])tableTables that contain a string key (optional value match). Also accepts a list of keys.
setgc(...)variesControl 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])numberClear locks.
getrawkeys(proxy)tableString keys → values from a live Luau table proxy.
gcprobe()table / nil, errMulti-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.

TableFields
Rose.AimbotEnabled Sticky DrawFOV booleans · FOV number · AimPart integer
Rose.SilentEnabled Sticky MagicBullet DrawFOV · FOV · AimPart
Rose.TriggerbotEnabled · FOV · AimPart
Rose.ESPMaster Box Name Skeleton Tracers
Rose.MovementWalkSpeed 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.

FunctionReturnsNotes
readfile(path)stringThrows 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)tableFile 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.

FunctionReturnsNotes
getscripts([root])tableLocalScript / Script / ModuleScript under root (default DataModel).
getscriptbytecode(script)stringRaw bytecode blob, or "" when unavailable.
decompile(script | bytecode)stringBuilt-in lifter. If Fission.Server is listening on 127.0.0.1:3001, fuller AST output is preferred.
getsenv(script)tableStub — 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.

full_esp.lua
-- 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.

features.lua
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

config.lua
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