SELYN
Home Lua VM Script Hub Download

Lua VM API Reference

High-performance external Lua 5.4 scripting environment featuring low-level virtual memory read/write inspection, dynamic offset resolution, native DirectX 11 overlay rendering, complete Dear ImGui windowing, custom styling, entity radar collection, and universal executor primitives.

Execution Space: Scripts executed inside the VM run within isolated rendering and background worker threads with full access to DirectX 11 overlay draw lists, memory inspection, and ImGui without interfering with the internal Selyn application menu.

Virtual Memory Read Operations

Low-level memory introspection utilities with support for primitive datatypes, 64-bit pointers, strings, vectors, and camera matrices. Available under both the memory.* table and global aliases.

memory.get_base() -> number / memory.base / memory.getBase() READ

Returns the 64-bit base module address of the target process executable.

local base_addr = memory.get_base()
print(string.format("[Memory] Target base address: 0x%X", base_addr))
memory.read_byte(address: number) -> number / readbyte(address) READ

Reads an unsigned 8-bit byte integer (0–255) from the specified virtual memory address.

memory.read_short(address: number) -> number / readshort(address) READ

Reads a signed 16-bit short integer from virtual memory.

memory.read_int(address: number) -> number / readint(address) READ

Reads a signed 32-bit integer from the specified virtual address.

memory.read_uint64(address: number) -> number / readuint64(addr) / read_pointer(addr) READ

Reads a 64-bit unsigned pointer address from memory.

local data_model = memory.read_uint64(base_addr + offsets.datamodel)
memory.read_float(address: number) -> number / readfloat(address) READ

Reads a single-precision 32-bit floating point value from memory (e.g., WalkSpeed, JumpPower, Health).

memory.read_double(address: number) -> number / readdouble(address) READ

Reads a double-precision 64-bit float from memory.

memory.read_string(address: number) -> string / readstring(address) READ

Reads a null-terminated ASCII string or internal string buffer from memory.

memory.read_vector3(address: number) -> Vector3 / read_vec3(address) READ

Reads three consecutive 32-bit floats and returns a native Selyn Vector3 structure with X, Y, Z coordinates.

memory.read_vector2(address: number) -> Vector2 / read_vec2(address) READ

Reads two consecutive 32-bit floats and returns a Vector2 structure.

Virtual Memory Write Operations

Direct virtual memory modification operations. Write operations require "Allow Unrestricted VM Operations" enabled in Selyn settings.

memory.write_byte(address: number, value: number) / writebyte(addr, val) WRITE

Writes an 8-bit unsigned integer (byte) to the specified virtual address.

memory.write_short(address: number, value: number) / writeshort(addr, val) WRITE

Writes a 16-bit short integer to memory.

memory.write_int(address: number, value: number) / writeint(addr, val) WRITE

Writes a 32-bit signed integer to memory.

memory.write_uint64(address: number, value: number) / writeuint64(addr, val) / write_pointer WRITE

Writes a 64-bit pointer / integer address into memory.

memory.write_float(address: number, value: number) / writefloat(addr, val) WRITE

Writes a 32-bit floating point value to memory.

memory.write_double(address: number, value: number) / writedouble(addr, val) WRITE

Writes a 64-bit double-precision float to memory.

memory.write_string(address: number, value: string) / writestring(addr, val) WRITE

Writes an ASCII string buffer with null-termination to the target address.

memory.write_vector3(address: number, x: number | Vector3, [y: number, z: number]) / write_vec3 WRITE

Writes three 32-bit floats (X, Y, Z) to virtual memory. Accepts either three numeric arguments or a single Vector3 / table structure.

memory.write_vector3(pos_addr, 100.5, 45.0, -230.2)
-- or using Vector3 object:
memory.write_vector3(pos_addr, Vector3.new(100.5, 45.0, -230.2))
memory.write_vector2(address: number, x: number | Vector2, [y: number]) / write_vec2 WRITE

Writes two 32-bit floats (X, Y) to virtual memory.

Memory Scanning

Search Roblox's heap (committed, private, read/write memory) for a value instead of reading a known address. Both functions need Allow Unsafe Lua turned on, and return an empty table when it is off. A full scan reads the whole heap, so it takes a moment: call them once and keep the results, not every frame.

memory.find_string(text: string, [max: number = 64]) -> { number } READ

Returns the addresses where text is stored followed by a zero byte (how strings sit in memory), up to max results. text can be 1 to 200 bytes long.

local hits = memory.find_string("rbxassetid://13087362838", 16)
for _, addr in ipairs(hits) do
  print(string.format("found at 0x%X", addr))
end
memory.find_qword(value: number, [max: number = 256]) -> { number } READ

Returns the 8-byte-aligned addresses that hold the 64-bit value, up to max results. Use it to find what points at an address, for example every table slot that references a string you found with find_string.

local target = 0x2DC23D26CC0           -- an object's address
for _, slot in ipairs(memory.find_qword(target, 64)) do
  print(string.format("referenced from 0x%X", slot))
end

Dynamic Offsets Engine

Access calibrated game offsets mapped automatically by Selyn's pattern scanner. Offsets can be read directly via the offsets.* table or queried through selyn.get_offset().

offsets.OffsetName -> number

Direct offset lookup table. Case-insensitive and supports camelCase, snake_case, and PascalCase keys.

  • offsets.datamodel: Pointer offset to DataModel root instance.
  • offsets.visualengine: VisualEngine rendering viewport offset.
  • offsets.viewmatrix: 4x4 ViewMatrix transformation matrix offset.
  • offsets.player_list: Offset to player list container array.
  • offsets.localplayer: Offset to the LocalPlayer instance.
  • offsets.name / offsets.character: Offsets to entity name and character model.
  • offsets.rootpart / offsets.humanoid: Offsets to HumanoidRootPart and Humanoid instances.
  • offsets.health / offsets.max_health: Offsets to entity health values.
  • offsets.camera_pos / offsets.camera_cframe: Offsets to active camera coordinates.
local dm_ptr = memory.read_uint64(memory.get_base() + offsets.datamodel)
selyn.get_offset(name: string) -> number

Returns the numerical offset value for the specified offset identifier name.

selyn.get_offsets() -> table

Returns a table containing all active offset name-value pairs.

Embedded Script Hub UI System

Create custom GUI tabs and settings widgets that embed directly inside Selyn's main window under the dedicated "Script UI" header tab.

imgui.createtab(tab_name: string, render_callback: function) / createtab(name, fn)

Registers a dedicated script sub-tab that automatically appears inside Selyn's menu under the Script UI header navigation. All ImGui controls (checkboxes, sliders, color pickers, buttons) rendered inside the callback adopt Selyn's glassmorphic styling and active color theme.

local esp_enabled = true
local esp_color = { 0.2, 0.6, 1.0, 1.0 }
local max_dist = 500.0

imgui.createtab("Auto ESP + Farm", function()
    imgui.text_colored(0.4, 0.8, 1.0, 1.0, "Script Configuration")
    imgui.separator()
    
    esp_enabled = imgui.checkbox("Enable Target ESP", esp_enabled)
    esp_color = imgui.color_picker("ESP Color", esp_color)
    max_dist = imgui.slider_float("Max Distance", max_dist, 50.0, 2000.0)
    
    if imgui.button("Clear Cache", 160, 30) then
        print("[Script] Cache cleared!")
    end
end)

Windowing & Panel Construction

Create floating panels, glassmorphic cards, HUDs, or full menus with configurable window flags and coordinate positioning.

imgui.begin(title: string, [open: boolean | flags: number | table], [flags: number | table]) -> boolean

Begins an independent ImGui window. Supports window flags, open states, and table configuration.

if imgui.begin("Custom Overlay Window", { no_title = true, no_bg = true }) then
    imgui.text("Frameless transparent window")
    imgui.end()
end
imgui.end()

Closes the active ImGui window scope. Automatically restores any base styling pushed by the window.

imgui.set_next_window_pos(x: number, y: number, [cond: number])

Sets the position of the next window to be created. Default condition is ImGuiCond_Once (4).

imgui.set_next_window_size(width: number, height: number, [cond: number])

Sets the dimensions of the next window to be created.

imgui.set_next_window_bg_alpha(alpha: number)

Overrides the background opacity (0.0 to 1.0) of the upcoming window.

imgui.get_window_pos() -> number, number / imgui.get_window_size() -> number, number

Returns the current position and size of the active window.

imgui.flags.FlagName

Available flags: None, NoTitleBar, NoResize, NoMove, NoScrollbar, NoCollapse, AlwaysAutoResize, NoBackground, NoSavedSettings, NoMouseInputs, MenuBar.

Custom Styling, Colors & Themes

Fine-tune corner rounding, item padding, alpha blending, and custom color accents.

imgui.push_style_color(idx: number, r: number, g: number, b: number, [a: number = 1.0])

Pushes a temporary RGBA color override onto the style stack for the specified element type.

imgui.push_style_color(imgui.col.Button, 0.15, 0.15, 0.22, 0.9)
imgui.push_style_color(imgui.col.ButtonHovered, 0.35, 0.45, 0.95, 1.0)
imgui.button("Stylized Accent Button", 200, 32)
imgui.pop_style_color(2)
imgui.pop_style_color([count: number = 1])

Pops one or more style color overrides from the style stack.

imgui.push_style_var(idx: number, val: number | table) / imgui.pop_style_var([count: number = 1])

Pushes a style numeric or vector variable (e.g., FrameRounding, WindowPadding, ItemSpacing).

imgui.col.ColorName / imgui.var.VarName

Color indices: Text, WindowBg, ChildBg, PopupBg, Border, FrameBg, FrameBgHovered, FrameBgActive, TitleBg, TitleBgActive, CheckMark, SliderGrab, SliderGrabActive, Button, ButtonHovered, ButtonActive, Header, HeaderHovered, HeaderActive, Separator, Tab, TabHovered, TabActive.

Interactive Widgets & Form Controls

Native controls for building rich interactive script configurations.

imgui.checkbox(label: string, state: boolean) -> boolean, boolean

Renders an interactive checkbox. Returns new_state, clicked.

aimbot_enabled = imgui.checkbox("Enable Silent Aim", aimbot_enabled)
imgui.checkbox_with_picker(label: string, state: boolean, color_table: table) -> boolean, table, boolean

Renders a checkbox integrated with a color picker square on the right side.

imgui.slider_float(label: string, val: number, min: number, max: number, [format: string = "%.1f"]) -> number, boolean

Renders a smooth float slider bar. Returns new_value, changed.

imgui.slider_int(label: string, val: number, min: number, max: number, [format: string = "%d"]) -> number, boolean

Renders an integer slider bar.

imgui.combo(label: string, selected_idx: number, items: table) -> number, boolean

Renders a dropdown selection combo box.

local target_parts = { "Head", "HumanoidRootPart", "Torso" }
local selected_part = 0
selected_part = imgui.combo("Target Hitbox", selected_part, target_parts)
imgui.color_picker(label: string, color: table) -> table

Renders an RGBA color picker widget. Accepts and returns { r, g, b, [a] } normalized 0.0 to 1.0.

imgui.keybind(label: string, key_val: number, [mode: number = 0]) -> number, number, boolean / keybind(label, ...)

Renders an interactive keybind selector box (Click + press any key to bind).

imgui.button(label: string, [width: number = 0, height: number = 0]) -> boolean

Renders a clickable push button. Returns true on click.

imgui.input_text(label: string, buffer: string, [max_len: number = 256]) -> string, boolean

Single-line text input field.

imgui.input_text_multiline(label: string, buffer: string, width: number, height: number) -> string

Multi-line code/text editor input area.

imgui.text(text: string) / imgui.text_colored(r: number, g: number, b: number, a: number, text: string)

Renders plain or formatted colored text.

imgui.badge(label: string, [color_table: table]) / imgui.icon(icon_name: string)

Draws stylized pill badges or native UI glyph icons.

Tabs, Layout Groups & Child Windows

Organize controls into grouped cards, scrollable sub-frames, and multi-tab pages.

imgui.begin_child(name: string, [width: number = 0, height: number = 0, border: boolean = true]) -> boolean

Creates an embedded sub-window frame with independent scrolling and clipping.

imgui.end_child()

Closes the active child window frame.

imgui.begin_group() / imgui.end_group()

Locks bounding coordinates of child items into a single logical group for multi-column layouts.

imgui.same_line([offset_x: number = 0, spacing: number = -1.0])

Positions the subsequent item horizontally on the same line as the previous item.

imgui.separator() / imgui.spacing()

Draws a subtle horizontal divider line or adds vertical spacing.

DirectX 11 Drawing.new OOP Pipeline

Universal standard Drawing library compatible with standard executor scripts. Objects automatically render on top of the screen each frame.

Drawing.new(type_name: string) -> DrawingObject

Constructs a new persistent Drawing primitive. Supported types: "Line", "Square", "Circle", "Text", "Triangle", "Quad".

  • .Visible: (boolean) Controls rendering visibility.
  • .Color: (Color3) Render color structure (Color3.new or Color3.fromRGB).
  • .Transparency: (number) Alpha transparency (0.0 to 1.0).
  • .Thickness: (number) Border or line stroke thickness in pixels.
  • .Filled: (boolean) For Square, Circle, Triangle, Quad: filled interior.
  • .From / .To: (Vector2) For Line: start and end screen coordinates.
  • .Position / .Size: (Vector2) For Square and Text: screen position and dimensions.
  • .Radius / .NumSides: (number) For Circle: radius and polygon segments.
  • .PointA / .PointB / .PointC / .PointD: (Vector2) For Triangle and Quad: vertex coordinates.
  • .Text / .Center / .Outline / .OutlineColor: For Text: string content, centering, and border outline.
  • :Remove() / :Destroy(): Deletes the drawing object and releases GPU resources.
local box = Drawing.new("Square")
box.Visible = true
box.Color = Color3.fromRGB(0, 255, 120)
box.Thickness = 1.5
box.Filled = false
box.Position = Vector2.new(500, 300)
box.Size = Vector2.new(120, 180)
cleardrawcache() / Drawing.clear() / isrenderobj(obj) -> boolean

Utility functions to clear all active drawing objects or test if a table is a valid Drawing instance.

DirectX 11 Immediate Draw Pipeline

Immediate-mode rendering primitives for custom ESP, crosshairs, tracers, and radar overlays. Used inside callbacks:register("paint", fn) or on_paint(fn).

draw.text(x: number, y: number, text: string, [r: number, g: number, b: number, a: number])

Renders crisp text on the DirectX 11 overlay at (x, y).

draw.line(x1: number, y1: number, x2: number, y2: number, [r: number, g: number, b: number, a: number, thickness: number = 1.0])

Draws an anti-aliased line between two screen pixel coordinates.

draw.rect(x: number, y: number, w: number, h: number, [r: number, g: number, b: number, a: number, thickness: number = 1.0]) / draw.rect_filled

Draws an outlined or filled rectangle.

draw.rounded_rect(x: number, y: number, w: number, h: number, rounding: number, [r, g, b, a, thickness]) / draw.rounded_rect_filled

Draws a rectangle with smooth rounded corners.

draw.gradient_rect(x: number, y: number, w: number, h: number, col_tl: table, col_tr: table, col_br: table, col_bl: table)

Draws a 4-point color interpolated gradient rectangle.

draw.circle(x: number, y: number, radius: number, [r, g, b, a, segments = 0, thickness = 1.0]) / draw.circle_filled

Draws an outlined or filled circle.

draw.triangle(x1, y1, x2, y2, x3, y3, [r, g, b, a, thickness]) / draw.triangle_filled

Draws a 3-point polygon triangle.

Camera & 3D World-to-Screen Projection

Hardware-accelerated mathematical projection from 3D world space coordinates to 2D screen pixels.

camera.world_to_screen(x: number, y: number, z: number) -> number, number, boolean / world_to_screen(x, y, z)

Projects a 3D world coordinate (X, Y, Z) using the active ViewMatrix into 2D viewport coordinates. Returns screen_x, screen_y, on_screen.

local sx, sy, on_screen = camera.world_to_screen(head_x, head_y, head_z)
if on_screen then
    draw.circle(sx, sy, 4.0, 1.0, 0.2, 0.2, 1.0)
end
camera.get_pos() -> number, number, number / camera.get_position()

Returns the 3D position (X, Y, Z) of the local camera in world space.

camera.get_look_vector() -> number, number, number

Returns the normalized direction vector (X, Y, Z) the camera is currently facing.

camera.get_viewport() -> number, number

Returns width and height of the rendering viewport.

camera.look_at(x: number, y: number, z: number, [smoothness: number = 1.0]) / camera.aim_at

Smoothly rotates the camera view angle towards target world coordinates.

screen.get_width() -> number / screen.get_height() -> number / screen.get_size() / screen.get_center()

Queries desktop and game client window resolution dimensions and center point coordinates.

Instance OOP Hierarchy & Reflection

Interact with game instances using standard object-oriented Roblox methods.

Instance:FindFirstChild(name: string) -> Instance / Instance:find_first_child(name)

Finds a child instance matching the given name or returns nil.

local char = localplayer:FindFirstChild("Character")
if char then
    local hrp = char:FindFirstChild("HumanoidRootPart")
end
Instance:FindFirstChildOfClass(className: string) -> Instance

Finds a child instance of the specified ClassName.

Instance:GetChildren() -> table / Instance:get_children()

Returns an array table containing all child instances.

Instance:GetDescendants() -> table / Instance:get_descendants()

Recursively returns all descendant instances in the hierarchy tree.

Instance:IsA(className: string) -> boolean / Instance:is_a(className)

Tests if the instance inherits from or matches the specified ClassName.

Instance.Name / Instance.ClassName / Instance._address / Instance:GetPosition() / Instance:WorldToScreen()

Direct field access and helper methods on instance objects.

Game Reflection & Services

Global access to game services, players, and runtime events.

game:GetService(service_name: string) -> Instance / game.ServiceName

Returns service instances (e.g., game:GetService("Players"), game:GetService("Workspace"), game:GetService("RunService")).

workspace / Workspace / workspace.CurrentCamera

Global reference to the Workspace instance and active Camera.

RunService.RenderStepped:Connect(fn) / RunService.Heartbeat:Connect(fn)

Connects callbacks to the frame rendering and physics tick event loop.

UserInputService:IsKeyDown(key) / UserInputService:GetMouseLocation()

Standard service helpers for keyboard and mouse input querying.

Entities, Players & Radar Containers

Direct high-speed entity iteration from Selyn's cached memory pipeline.

entities.get_players() -> table / get_players()

Returns a table of all active player objects populated from memory with fields: name, address, pos_x, pos_y, pos_z, health, max_health, team, is_alive.

for i, ply in ipairs(entities.get_players()) do
    if ply.is_alive then
        local sx, sy, on_screen = camera.world_to_screen(ply.pos_x, ply.pos_y, ply.pos_z)
        if on_screen then
            draw.text(sx, sy, ply.name, 1.0, 1.0, 1.0, 1.0)
        end
    end
end
entities.get_local_player() -> table / get_local_player()

Returns the LocalPlayer entity table.

entities.add_custom_container(name: string, folder_address: number)

Registers a custom instance folder in memory to be automatically indexed by Selyn's multi-threaded entity pipeline.

entities.get_custom(container_name: string) -> table

Returns all active entities within a custom registered container.

Event Callbacks & Frame Hooks

Register hooks executed automatically by the rendering and update loops.

callbacks.register("paint", fn: function) / callbacks.paint(fn) / on_paint(fn)

Registers a per-frame DirectX 11 rendering callback.

callbacks.paint(function()
    draw.text(20, 20, "Selyn Lua VM Active", 0.4, 1.0, 0.5, 1.0)
end)
callbacks.register("tick", fn: function) / callbacks.tick(fn) / on_tick(fn)

Registers a background update tick callback executed independent of overlay frame rate.

Universal Executor & Environment APIs

Standard executor APIs for environment manipulation, metatable hooking, and runtime inspection.

getgenv() -> table / getrenv() -> table / getreg() -> table

Returns the global shared execution environment table.

getrawmetatable(tbl: table) -> table / setrawmetatable(tbl: table, meta: table)

Retrieves or overrides the metatable of an object bypassing readonly protections.

setreadonly(tbl: table, readonly: boolean) / isreadonly(tbl: table) -> boolean

Toggles the readonly state flag on a table.

hookfunction(old_fn: function, new_fn: function) -> function / hookmetamethod(tbl, method, fn)

Hooks a Lua function or metamethod with a custom replacement and returns the original trampoline.

newcclosure(fn: function) -> function / iscclosure(fn) -> boolean / islclosure(fn) -> boolean

Wraps a Lua closure to simulate a C function.

checkcaller() -> boolean / getcallingscript() -> table / identifyexecutor() -> string, string

Returns caller authentication and identifies the executor as ("Selyn", "1.5").

Math, Types, Filesystem & Globals

Datatype constructors, mathematical utilities, filesystem I/O operations, and runtime globals.

readfile(path: string) -> string / writefile(path, content) / appendfile(path, content) / isfile(path) -> boolean

Direct filesystem I/O in the Selyn workspace directory.

if not isfile("config.json") then
    writefile("config.json", '{"fov": 90, "speed": 16}')
end
local saved = readfile("config.json")
delfile(path) / makefolder(path) / delfolder(path) / isfolder(path) / listfiles(folder) -> table

Folder and file lifecycle management operations.

rconsoleprint(text) / rconsolewarn(text) / rconsoleerr(text) / rconsoleclear()

Dispatches colored log messages and alerts directly into Selyn's built-in Lua Console view.

Vector3.new(x: number, y: number, z: number) -> Vector3 / Vector2.new(x, y) / Color3.fromRGB(r, g, b) / Color3.new(r, g, b)

Constructs standard mathematical vector and color structures with full arithmetic operator support.

CFrame.new(x, y, z) / CFrame.Angles(rx, ry, rz) / UDim2.new(sx, ox, sy, oy) / Ray.new(origin, direction)

Coordinate frame matrix and geometric ray constructors.

clamp(val, min, max) / lerp(a, b, t) / round(val, [decimals])

Global numeric utility helpers.

task.wait(seconds: number) -> number / task.spawn(fn) / task.defer(fn) / task.delay(sec, fn) / tick() / time()

Timing primitives, asynchronous task scheduling, and high-precision execution pauses.

Input Simulation & Hardware State

Query physical keystrokes and dispatch synthetic cursor operations.

input.is_key_down(key: number | string) -> boolean / iskeydown(key) / is_key_down(key)

Queries asynchronous physical key state. Accepts virtual key codes or strings ("SHIFT", "CTRL", "ALT", "SPACE", "LBUTTON", "RBUTTON", "MBUTTON", "X", etc.).

mouse.get_pos() -> number, number / mouse.get_cursor_pos()

Returns desktop cursor X and Y pixel coordinates.

mouse.move(dx: number, dy: number) / mousemoverel(dx, dy)

Performs relative mouse delta movement via native mouse_event.

mouse.set_pos(x: number, y: number)

Sets absolute desktop cursor pixel coordinates.

mouse.aim_at(target_screen_x: number, target_screen_y: number, [smoothness: number = 1.0])

Smoothly pans the mouse cursor towards target screen coordinates using configurable interpolation.

mouse.click([button: number = 1]) / mouse1click() / mouse2click() / mouse1press() / mouse1release()

Dispatches mouse button click, press down, and release up events (1: Left, 2: Right).

mouse.scroll(delta: number)

Simulates vertical mouse wheel rotation delta (positive = forward/up, negative = backward/down).

setclipboard(text: string) / getclipboard() -> string / toclipboard(text)

Sets or reads text data from the Windows system clipboard.

Local Key-Value Storage

Persistent local storage system for saving script profiles, keys, and configurations across game sessions.

storage.set(key: string, value: any) / storage.get(key: string, [default_val: any]) -> any

Sets or retrieves values in the local script storage map.

storage.set("aimbot_fov", 120.0)
local fov = storage.get("aimbot_fov", 90.0)
storage.save() / storage.load() / storage.clear() / storage.all() -> table

Flushes storage changes to disk, reloads saved values, clears the map, or dumps all key-value entries as a Lua table.

Selyn Client Controls

Control Selyn client notifications, sound effects, and client version queries.

selyn.notify(title: string, message: string, [duration_ms: number = 2500], [color_table: table])

Triggers an animated glassmorphic toast notification in Selyn's notification manager.

selyn.notify("Lua Engine", "Aimbot script loaded successfully!", 3000, { 0.2, 0.8, 1.0, 1.0 })
selyn.play_sound(sound_name: string)

Plays an audio feedback cue from Selyn's built-in sound effects.

selyn.get_version() -> string / setfpscap(fps: number) / getfpscap() -> number

Queries Selyn version string or sets the overlay maximum frame rate cap.

Security Sandboxing & HTTP Primitives

Network requests and dynamic compilation are guarded by Selyn's security policy.

http.get(url: string) -> string / game:HttpGet(url: string) / request(opt) UNRESTRICTED VM

Performs a synchronous native HTTPS GET request using WinHttp and returns the response body string.

local script_code = game:HttpGet("https://raw.githubusercontent.com/.../script.lua")
loadstring(script_code)()
loadstring(source: string, [chunkname: string]) -> function UNRESTRICTED VM

Compiles dynamic Lua bytecode at runtime into executable function chunks.

Security Policy: To execute scripts utilizing http.get, memory.write_*, or loadstring, enable "Allow Unrestricted VM Operations" in Selyn Settings.