LAB/05 — INVENTORY

LagSnitch

Your server is at 12 FPS and the console tells you nothing useful. LagSnitch names the grid square, the player and the entity type responsible — in chat, on a HUD, and in your Discord.
← BACK TO STORE
Price
$19.99
Version
v1.0.4
Author
S³Founding MemberTrusted Dev

Changelog

v1.0.420 Aug 2026

No notes for this release.

LagSnitch screenshot 1
1 / 4

The problem

Rust gives you a tick rate number and nothing else. When it drops, you are left guessing: is it entities, is it turrets, is it one player's industrial spaghetti, is it a plugin, is it the save?

So the usual fix is a restart, then another restart, then a wipe, and you never find out what it was. Meanwhile your players feel every second of it.

What LagSnitch does

Watches the server continuously and attributes the cost.

By grid square. The top offending grids, ranked, so you can fly to the problem instead of guessing at it.

By player. /lagsnitch player <name> gives you one person's entity footprint — what they have built, how much of it costs, and their ping.

By entity type. IO entities, industrial, turrets, storage, vehicles, NPCs, building blocks — counted, ranked, and shown against the thresholds you set.

By subsystem. Server manager update, net cycle, physics sync, player cycle — the millisecond cost of each, so "the server is lagging" becomes "the net cycle is eating 40ms".

By spike. The lag spike profiler records RPCs, commands and RCON calls that blew past your millisecond thresholds, so a one-second freeze leaves evidence instead of a memory.

It tells you before your players do

Set a warning and a critical tick rate. When the server crosses critical, LagSnitch can take an automatic snapshot — the full picture at the moment it went bad — and post to your Discord webhook. You read the diagnosis in the morning instead of reconstructing the night.

A HUD, not just chat spam

/lagsnitch ui opens a live performance HUD you can drag where you want it and expand for detail. Admins get it by default; give your moderators lagsnitch.view and they get it too, without the commands that change anything.

Features

  • Continuous monitoring on an interval you set
  • Top grids, top owners and top entity types, all ranked
  • Per-player entity footprint and ping report
  • Subsystem millisecond breakdown — server manager, net cycle, physics, player cycle
  • Lag spike profiler for RPC, command and RCON calls over your thresholds
  • Work queue profiler
  • Network profiler with per-connection stats and optional packet capture
  • Memory and GC report, save timing report
  • Manual and automatic snapshots, with history you can page back through
  • Discord webhook alerts on critical events
  • Draggable, resettable live HUD with per-player positions
  • Three permissions, so read-only staff never get the destructive commands
  • Oxide and Carbon
  • No dependencies

Commands

/lagsnitch on its own prints the help. Available to lagsnitch.view and lagsnitch.admin.

CommandAccessDescription
/lagsnitch healthviewTick rate, frame rate, entity counts against your thresholds
/lagsnitch gridviewTop offending grid squares
/lagsnitch player <name|steamid>viewOne player's entity footprint and ping
/lagsnitch entitiesviewEntity types ranked by cost
/lagsnitch subsystemsviewMillisecond cost per server subsystem
/lagsnitch spikesviewRecent lag spikes and what caused them
/lagsnitch networkviewNetwork and per-connection stats
/lagsnitch memoryviewMemory use and GC collections
/lagsnitch savesviewSave duration history
/lagsnitch uiviewToggle the live HUD
/lagsnitch resetviewReset your HUD position
/lagsnitch snapshotadminTake a full snapshot now

Permissions

PermissionEffect
lagsnitch.adminEverything, including snapshots and profiler controls
lagsnitch.viewRead-only reports and the HUD
lagsnitch.alertsReceives in-game alerts when thresholds are crossed

Configuration

{
  "Monitoring": {
    "CheckIntervalSeconds": 10.0,
    "TopGridCount": 10,
    "TopOwnerCount": 10,
    "TopEntityTypeCount": 10
  },
  "LagThresholds": {
    "TickRateWarning": 20.0,
    "TickRateCritical": 15.0,
    "FrameRateWarning": 30.0,
    "AutoSnapshotOnCritical": true,
    "HighPingThresholdMs": 150,
    "EntityCountWarning": 400000
  },
  "SnapshotSettings": { "EnableHistory": true, "MaxSnapshotsStored": 50 },
  "DiscordWebhook": { "Enabled": false, "Url": "" },
  "ProfilingFeatures": {
    "EnableLagSpikeProfiler": true,
    "EnableWorkQueueProfiler": true,
    "MaxSpikeEventsShown": 20
  },
  "RuntimeProfiler": {
    "Preset": 1,
    "RpcLagSpikeThresholdMs": 40,
    "CommandLagSpikeThresholdMs": 40,
    "RconLagSpikeThresholdMs": 40
  },
  "NetworkProfiler": {
    "EnablePerConnectionStats": false,
    "ConnectionsPerFrame": 30,
    "EnablePacketCapture": true,
    "PacketCaptureDefaultSecs": 10
  },
  "Hud": {
    "RefreshIntervalSeconds": 3.0,
    "AllowViewPermission": true,
    "AnchorMin": "0.35 0.85",
    "AnchorMax": "0.65 0.85"
  }
}

One thing to decide deliberately

RuntimeProfiler.Preset is 1 out of the box, which turns on Facepunch's own profiler recorders and gives you the GC and allocation detail. Presets 1 and 2 upload performance telemetry to Facepunch's servers. Set it to 0 if that is not something you want, and the rest of the plugin still works.

Requirements

Oxide or Carbon. No dependencies.

Support

Every purchase comes with the private updates channel in our Discord and updates for the life of the plugin. Your licence key and download live on your purchases page the moment payment clears.