Roblox · Luau module for players and servers · MIT

Glitchless for Roblox

A Luau module that records how your Roblox experience runs for the people playing it, on their devices and on your game servers: where they lag and why, which errors they hit, how long they wait to load, and where they quit. Your coding agent reads the same data over MCP and fixes what they hit.

What it records in a Roblox experience

  • Lag on players' devices, with a cause

    Every frame on every player's device is timed, with render, GPU and physics time. Each stutter names what likely held it up: assets still downloading, hundreds of new instances in one frame, physics, rendering or your scripts.

  • Your game servers

    Each server sends its own heartbeat (the server's frame rate), late frames, players and memory. So you can tell a whole server lagging for everyone in it from one player on a bad connection.

  • Errors, client and server

    Every error in your LocalScripts and server Scripts, with its script, line and function, grouped into issues, and what the player had just done. Players' names and user IDs are taken out of the error text before it leaves your server.

  • Loading and ping

    How long each player waits on the loading screen before the first frame, and each player's round trip to the server, so a slow join or a laggy region shows up in players, not in guesses.

  • Where players get stuck and quit

    Rounds, races, obbies or stages as levels: starts, wins, fails, deaths and players leaving mid-round, with your own events and properties (a mode, a car class, a rank tier) to compare by.

  • Devices in Roblox's words

    Computer, Phone, Tablet, Console or VR, with the graphics quality and screen size, so you know which players' devices struggle and by how much.

Set it up.

One module, one server Script and HTTP requests turned on. Only Roblox servers can make HTTP requests, so players' devices hand their data to your server, which sends it on.

  1. Install

    Download Glitchless.rbxm from the newest Roblox release and, in Studio, right-click ReplicatedStorage → Insert from File. With Rojo, copy roblox/src from the repository as a folder named Glitchless under ReplicatedStorage.

  2. Set up

    Turn on Allow HTTP Requests (Game Settings → Security), then start Glitchless from one server Script with your game's name and client token.

  3. Play

    Start a play test in Studio, then publish. Sessions show on your dashboard, with the server's next to its players'.

ServerScriptService, one server Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Glitchless = require(ReplicatedStorage.Glitchless)

Glitchless.init({
	service = "my-game",      -- your game's name in Glitchless
	clientToken = "gl_pub_…", -- from glitchless_create_game, or Settings → Games in Glitchless Cloud
})

Built for working with a coding agent

Glitchless's MCP server gives Claude Code, Codex, Cursor or any other agent the findings, frame times, server heartbeat, errors and level funnel from your players, so it can find what to fix and check the result.

Ask it in plain words: which devices lag in the new map, whether the lobby server keeps up when it fills, where players quit the first race, whether last week's update fixed an error. It answers in players, with the usual value next to the number.

Your agent can measure a play test in Roblox Studio before players get the update, then compare the published version with the one before it once players have played it.

Tested

  • 35 Luau tests under Lune, against a stand-in for Roblox's services and against the JavaScript SDK's own sketch, fingerprints and property rules.
  • 8 end-to-end tests over real HTTP to a local Glitchless server.
  • Play tests in Roblox Studio, driven over Studio's own MCP server: the players' and the server's sessions arrive, with no player name or user ID anywhere.

Not yet

  • Players are always anonymous: no user ID, name or display name, and no saved player ID, so Glitchless doesn't count returning players on Roblox. Retention is on your Creator Hub dashboard.
  • Bug reports with a screenshot from inside the experience aren't in the Roblox module yet.
  • Playtest bots don't play Roblox experiences: measure a change with a play test in Studio, then compare versions with real players.

Fixing a problem in Roblox

Questions

How can a Roblox experience send data to Glitchless?

From its servers. Roblox only lets server scripts make HTTP requests, so the module's client half passes each player's frames and errors to your server over a RemoteEvent, and the server half sends them on with HttpService. The client token stays in your server Script, out of players' reach.

Is it free?

The module and the server are open source under the MIT licence. Glitchless Cloud is free for 5,000 play sessions a month, or you can run the server yourself with Docker. See pricing.

How is it different from Roblox's own analytics?

The Creator Hub tells you how your whole experience is doing: retention, revenue, and frame rate, crashes and server health across everyone. Glitchless records each session, so a stutter comes with its likely cause, the map and the device, and an error comes with the events that led to it, and your agent gets all of it. Most games use both: Glitchless vs Roblox's analytics.

What does it send about players?

Nothing that identifies them: no user ID, name or display name. Your server takes every player's name and user ID out of what it sends, errors included. PRIVACY.md lists every field.

Ship it glitchless.

Paste one prompt into Claude Code, Codex or Cursor. It adds Glitchless to your game and builds a dashboard for it.