Skip to content
upio edited this page Feb 20, 2026 · 8 revisions

RobloxMemoryAPI

RobloxMemoryAPI is a Python library for externally reading and (optionally) writing Roblox client memory to access the DataModel and its instances.

Requirements

  • Windows only. The memory module relies on Windows APIs.
  • Roblox client running. By default it targets RobloxPlayerBeta.exe.
  • Python 3.9+.
  • Internet access on import to fetch current offsets.

Install

pip install robloxmemoryapi

Editable install from source:

pip install -e .

Quickstart

from robloxmemoryapi import RobloxGameClient

client = RobloxGameClient()
if client.failed:
    raise RuntimeError("Failed to attach to Roblox.")

game = client.DataModel
print("PlaceId:", game.PlaceId)
print("JobId:", game.JobId)
print("Loaded:", game.IsLoaded())

client.close()

Writing To Memory

Writing requires passing allow_write=True when creating the client. This requests additional process rights and can fail or be blocked depending on your environment.

from robloxmemoryapi import RobloxGameClient

client = RobloxGameClient(allow_write=True)
if client.failed:
    raise RuntimeError("Failed to attach to Roblox.")

game = client.DataModel
ws = game.Workspace

# Physics
ws.Gravity = 80.0
ws.FallenPartsDestroyHeight = -1000.0

# Atmosphere
print("AirDensity:", ws.AirDensity)
ws.GlobalWind = (0, 0, 50)  # or Vector3(0, 0, 50)

# Lighting
game.Lighting.GlobalShadows = False

client.close()

Navigating Instances

Instances support attribute-style access to find children by name, and utility methods for traversal.

workspace = game.Workspace
part = workspace.FindFirstChild("Part", recursive=True)
if part:
    print(part.ClassName, part.Name)

Auto Refresh

The DataModel can change when the client switches between the home screen and a game. Auto refresh keeps the reference updated and notifies you.

from robloxmemoryapi import RobloxGameClient

client = RobloxGameClient()
game = client.DataModel

def on_refresh(instance):
    if game.is_lua_app():
        print("LuaApp / home screen")
    else:
        print("In-game", game.PlaceId)

game.bind_to_refresh(on_refresh, invoke_if_ready=True)

Fast Flags (FFlags)

Read and write Roblox Fast Flags directly in memory via client.FFlags. Offsets are fetched lazily from the remote offsets server.

from robloxmemoryapi import RobloxGameClient

client = RobloxGameClient(allow_write=True)
fflags = client.FFlags

# Read a flag
flag = fflags.get("DFIntTaskSchedulerTargetFps")
if flag:
    print(flag.name, flag.type, flag.value)

# Attribute-style read
print(fflags.DFIntTaskSchedulerTargetFps.value)

# Write a flag
fflags["DFIntTaskSchedulerTargetFps"] = 240
# or
fflags.DFIntTaskSchedulerTargetFps = 240

# Check existence
if "DFIntTaskSchedulerTargetFps" in fflags:
    print("Flag exists")

# Bulk read
all_flags = fflags.get_all()
for name, flag in all_flags.items():
    print(name, flag.type, flag.value)

client.close()

Notes And Limitations

  • Offsets are fetched at import time from https://imtheo.lol/Offsets. If unreachable or after a Roblox update, reads may return wrong values.
  • Many properties are class-specific. If a property is not supported by the underlying instance, the library returns None or raises an AttributeError.
  • Use client.close() when finished to release the process handle.

Clone this wiki locally