Installation
DevSuite ships as a package containing three instances: a server ModuleScript, a client ModuleScript, and the RemoteEvent that connects them. All three come together as a single drop-in Model — insert it once and both SDKs are wired up.
DevSuite.rbxm
Server SDK, client SDK, and the Report RemoteEvent — pre-wired.
What's in the package
| Location | Instance | Purpose |
|---|---|---|
| ServerScriptService.DevSuite | ModuleScript | Server SDK — the only place the project key lives |
| ReplicatedStorage.DevSuiteClient | ModuleScript | Client SDK, for LocalScripts |
| ReplicatedStorage.DevSuiteRemotes.Report | RemoteEvent | Client → server bridge (auto-created) |
The client SDK never talks to the network directly and never sees your project key — it forwards events over the Report RemoteEvent, and the server SDK validates, batches, and ships them.
Insert the package
In Studio, use File → Insert from File… and pick the downloaded DevSuite.rbxm. It unpacks as a single Model — move the DevSuite ModuleScript into ServerScriptService, and DevSuiteClient plus the DevSuiteRemotes folder into ReplicatedStorage.
Initialize on the server
local DevSuite = require(game:GetService("ServerScriptService").DevSuite)
DevSuite.init({
projectKey = "proj_live_xxxxx"
})Use it from a LocalScript
No init call needed on the client — it starts forwarding as soon as it's required.
local DevSuite = require(game:GetService("ReplicatedStorage").DevSuiteClient)
DevSuite.track("button_click", { id = "shop_open" })The server SDK initializes lazily and queues events until init resolves, so require order relative to other systems doesn't matter.