Drop one open-source Luau module into ServerScriptService and Baseplate records every session from join to leave — with the reason they quit, the map area they were in, and the GUI window they had open. Live players, retention, funnels, revenue, and A/B tests on a private dashboard for you and your team.
Free for up to 2 games. Connect in Roblox Studio in 2 minutes.local HttpService = game:GetService("HttpService")
local Baseplate = require(game.ServerScriptService.Baseplate)
Baseplate.start({
token = HttpService:GetSecret("baseplate_token"),
})Every session ends with a clear reason — left while loading, bounced in the first minute, declined a purchase, quit in the tutorial, went AFK, poor FPS, script errors — plus the map area and GUI window they were on.
See who is online right now (refreshed every 5 seconds), what area they're in, their device, FPS and ping, and a live feed of joins, leaves, and purchases.
Day 1, 3, 7, 14, and 30 return rates by first-join cohort, session length distribution, and a day × hour play heatmap.
See the exact step where new players drop off — the tutorial, first fight, or path to a first purchase.
Split players into variants with one line (Baseplate.variant) and compare playtime, conversion, Robux per player, and D1/D7 retention with confidence checks.
Robux revenue (gross and net after Roblox's 30% cut), prompt conversion, ARPPU, and soft-currency sources vs. sinks over time.
Server uptime, silent crashes, server and client FPS, memory, ping by device, and grouped script error stack traces.
Each new place version is automatically compared against the previous release across session length, bounce rate, errors, revenue, and D1 retention.
Get pinged when online players drop, script errors spike, servers go silent, or a new version ships — plus a daily summary.
Connect Claude, Claude Code, Cursor, ChatGPT, or the terminal (npx baseplate) and ask questions about your game in plain words.
-- Anything players do, with custom fields
Baseplate.event(player, "QuestComplete", { quest = "Bakery", reward = 100 })
-- Where new players stop in your onboarding
Baseplate.step(player, "Tutorial_PlacedFirstOven")
-- Soft currencies earned and spent
Baseplate.currency(player, "Coins", 250, "DailyReward")
-- Robux purchases inside your ProcessReceipt handler
Baseplate.receipt(receiptInfo)No. Events are buffered in memory and sent in a single batch every 3 minutes, plus a lightweight presence ping every 15 seconds — at most 6 HTTP requests per minute out of Roblox's 500/min limit. Every call is wrapped in pcall, so a network hiccup never interrupts gameplay.
Yes. The SDK uses Roblox's standard HttpService, is 100% open-source Luau with no obfuscation or external asset requires, and never collects chat messages, passwords, or anything outside your game.
Sessions (join, leave, length, new vs. returning, join source, country), leave reason, last actions before leaving, map position and GUI click heatmaps, Game Pass purchases, server and client FPS/memory/ping, and script errors with stack traces.
Studio is off by default. When you enable studio = true to test your setup, Studio sessions are tagged separately and excluded from your live charts, retention, and revenue.
Yes. Invite teammates to your workspace with a one-time link as a member or read-only viewer.