World Executor · Roblox VM

Developer Dash

Live internals — framerate, execution count, memory, API status and the logs of what ran and where.

The metrics

The dash is the screen to open when something feels wrong and you want numbers rather than a guess.

WPF framerate

How fast the client UI itself is rendering. A collapse here is the client struggling, not the game.

Execution count

How many scripts have been executed this session. Handy for spotting a loop that is re-executing something.

Active clients

How many Roblox processes the client is currently attached to.

Memory use

Client-side memory. A steady climb while a script runs usually means something is leaking connections or Drawing objects.

API status

Whether the World API the client talks to is reachable. Red here explains most "nothing works" reports.

The logs

Two rolling logs sit under the metrics: scripts executed, and games joined. Between them you can usually reconstruct what happened before a crash — which script ran, in which place, in what order.

  • Executed scripts — name, time, and whether the execution returned or errored.
  • Games joined — place ID and job ID per join, which is what you want when a bug only shows up in one server.

Using it to debug

A few patterns worth knowing:

What you seeWhat it usually means
Memory climbing, framerate fallingSomething is creating objects per frame without removing them — check Drawing.new calls and RenderStepped connections.
Execution count jumping on its ownAn auto-execute script or a hub loader is re-running. Check autoexec/.
API status redThe client cannot reach the World API. Scripts that already loaded keep working; new attaches will not.
Active clients above oneYou are attached to more than one Roblox process. Scripts go to the focused one.

For per-script measurement, debug.profilebegin and debug.profileend bracket a region and report against Roblox's own profiler rather than the dash.

Profiling a hot path
debug.profilebegin("esp-update")
for _, player in ipairs(game:GetService("Players"):GetPlayers()) do
    -- ... per-player work
end
debug.profileend()