RUST PLUGINLagSnitch
Your server is at 12 FPS and the console tells you nothing useful. LagSnitch names the grid square, the player, the entity type and the plugin responsible — in one in-game app, on a HUD, and in your Discord.
## 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?
And when a plugin breaks instead of lagging, it is worse. The console fills with stack traces nobody can read, the same error five hundred times, and no word on what it means or whose fault it is.
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.
## One app, seventeen pages
`/lagsnitch` opens the whole thing in a window in game. Three sections down the side:
**Overview** — **Overview** ranks what is wrong right now and links you to it. **Live** shows every number at once, refreshing in place. **Errors** catches broken plugins (more below). **Charts** puts each area — performance, memory, network and the rest — on a graph over time.
**Profilers** — **Lag spikes**, **Plugins** (hook time per plugin, most expensive first), **Subsystems**, **Work queues**, **Entities**, **Grids**, **Network** and **Players**.
**Server** — **Memory**, **Saves**, **Snapshots**, a live **Console**, and **Settings**, where every option below can be changed in game.
Staff with `lagsnitch.view` get the read-only pages. Work queues, Console and Settings need `lagsnitch.admin`.
## What LagSnitch watches
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.** 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 plugin.** The hook time each plugin costs, so "a plugin is lagging" becomes a name.
**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.
## Errors, explained in plain words
The Errors page reads the server log and catches every plugin error, slow hook warning and compile error. Three tabs: **Errors**, **Slow hooks**, **Compile**.
The same error five hundred times is one row with "x500" on it, coloured by how often it fires, so a plugin spamming errors (which also makes lag) stands out from one that failed once.
Open a row and it tells you what happened, what it means, the usual cause, why it broke in that hook, what to do about it and who to contact — then the plugin, the method it crashed in and the full stack trace. Print it to your F1 console, or (admins) send it to Discord in one click.
Slow hooks get a verdict — fine, watch it, or a problem — with the reason in one line. A compile error shows the file, the line and a plain-words tip for that error code, and clears itself when the plugin loads.
New problems can alert in chat to staff with `lagsnitch.alerts`, go to a log file, and post to Discord — each switched on its own. `/lagsnitch errors test` makes a harmless test error so you can see it work.
## A live console in game
The Console page is the server console, live: errors in red, warnings in yellow, pause, errors only, page back through the last 500 lines.
With `lagsnitch.console` you also get a command box and quick buttons for the commands you run most. Admin does not include it, so you decide exactly who can run server commands from the game. Every command run is logged to a file with the player's name and Steam ID.
## 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 that stays out of the way
`/lagsnitch ui` shows a small HUD with the numbers you watch all the time, updating in place. Drag it where you want it; `/lagsnitch reset` puts it back. The full detail lives on the Live page.
## Features
- In-game app with 17 pages, opened with `/lagsnitch`
- Continuous monitoring on an interval you set
- Top grids, top owners and top entity types, all ranked
- Per-plugin hook time, per-player footprint and ping
- 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
- Charts for every area, over time
- Memory and GC report, save timing report
- Errors page: plugin errors, slow hooks and compile errors, grouped and explained
- Error alerts in chat, to a log file and to Discord, each on its own switch
- Live console with a command box, quick buttons and a log of every command run
- Manual and automatic snapshots, with history you can page back through
- Discord webhook alerts on critical events
- Small movable HUD with per-player positions
- Every setting editable in game on the Settings page
- Four permissions, so read-only staff never get the destructive commands
- Oxide and Carbon
## Commands
`/lagsnitch` on its own opens the app. `/lagsnitch help` prints the list. The same reports work from the server console or RCON as `lagsnitch <command>`.
| Command | Access | Description |
|---|---|---|
| `/lagsnitch` | view | Open the app |
| `/lagsnitch health` | view | Tick rate, frame rate, entity counts against your thresholds |
| `/lagsnitch grid` | view | Top offending grid squares |
| `/lagsnitch player <name\|steamid>` | view | One player's entity footprint and ping |
| `/lagsnitch entities` | view | Entity types ranked by cost |
| `/lagsnitch subsystems` | view | Millisecond cost per server subsystem |
| `/lagsnitch spikes` | view | Recent lag spikes and what caused them |
| `/lagsnitch network` | view | Network and per-connection stats |
| `/lagsnitch memory` | view | Memory use and GC collections |
| `/lagsnitch saves` | view | Save duration history |
| `/lagsnitch errors` | view | Open the Errors page |
| `/lagsnitch ui` | view | Toggle the HUD |
| `/lagsnitch reset` | view | Move your HUD back to the top |
| `/lagsnitch snapshot` | admin | Take a full snapshot now |
| `/lagsnitch queues` | admin | Work queue report |
| `/lagsnitch packetcapture [seconds]` | admin | Capture network packets for a few seconds |
| `/lagsnitch wipe` | admin | Record the wipe date |
| `/lagsnitch errors test` | admin | Make a harmless test error |
## Permissions
| Permission | Effect |
|---|---|
| `lagsnitch.admin` | Everything, including snapshots, profiler controls, Console (view) and Settings |
| `lagsnitch.view` | Read-only pages, reports and the HUD |
| `lagsnitch.alerts` | Receives in-game alerts: thresholds crossed, new plugin errors |
| `lagsnitch.console` | Runs server commands from the Console page. Not included in admin |
## Configuration
```json
{
"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
},
"Errors": {
"Enabled": true,
"TrackNonPlugin": false,
"MaxIssues": 200,
"AlertInChat": true,
"LogToFile": true,
"DiscordNewIssues": false,
"DiscordCompileErrors": false,
"DiscordSlowHookProblems": false
},
"LiveConsole": {
"Enabled": true,
"QuickCommands": [ "server.save", "oxide.plugins", "status", "server.fps" ]
}
}
```
`Errors.TrackNonPlugin` also keeps errors that come from Rust itself rather than a plugin; it is off because those are rarely yours to fix. `LiveConsole.QuickCommands` is the list of buttons on the Console page.
## 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, plus the free Paradox extension (`Oxide.Ext.Paradox.dll`), which checks your licence key. One copy of the extension covers every Paradox plugin you own; download it from the Extension page in your account. No other plugins needed.
## 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.
$19.99 $15.99 −20% ends in 10 days · v1.1.0