Source-checkedPerformance

Snitch

by DooDesch · for Schedule I

A performance profiler - measure the cost + state of NPCs, trash, quests and your own mods, with an in-game race-standings overlay, a live web dashboard, and a phone remote (scan a QR to drive it).

2.7KDownloads
1d agoLast updated
BepInExLoaders
ThunderstoreSource

About Snitch

From Thunderstore

A performance profiler - measure the cost + state of NPCs, trash, quests and your own mods, with an in-game race-standings overlay, a live web dashboard, and a phone remote (scan a QR to drive it).

Snitch

A performance profiler for Schedule I - find out what's actually slow.

> 🛟 Need help or found a bug? Get support at support.doodesch.de/snitch.

📖 API documentation: docs.doodesch.de/mods/snitch/api/

Snitch measures the cost and state of NPCs, trash, quests, and - through a tiny no-op API - any other mod's systems. Its in-game overlay is a race-standings table (compact, expandable to each mod's panel), alongside a combined log timeline and a live web dashboard so you can see frame times, section costs, and entity-state distributions in real time, and make your mod (or vanilla gameplay) faster.

Version Game MelonLoader S1API

Polyfill

MLVScan Snitch.dll

Snitch 2.0.0 - race standings

Live dashboard · Documentation · Modder example · Support

Features

  • Frame time distribution + fps + GC pressure - the load-bearing, build-independent truth.
  • Section costs - time named code sections (yours, or vanilla hot paths like NPCMovement.Update).
  • Unattributed time - an (unattributed) row for the part of a frame that ran inside no section at all, and how much of your worst frames it cannot explain.
  • Harmony patch timing - snitch patches on times every other mod's prefixes, postfixes and finalizers under the mod that owns them.
  • State distributions - NPCs by movement/visibility, trash by physics state, quests by state, + your own.
  • Per-mod panels - each mod that reports data gets its own toggleable, movable, resizable panel (counters, state, text, buttons, toggles).
  • Log timeline - a combined, chronological view of every mod's log output, filterable per mod.
  • Ablation A/B - toggle a subsystem off and measure the real frame-time delta (causal "total cost").
  • Live web dashboard - opens straight to your local game over WebSocket; telemetry never leaves your PC.
  • Phone remote - scan a QR (dashboard or in-game panel) to drive the profiler from your phone: FPS, Start/Stop/Reset, and every mod's actions and toggles. Same Wi-Fi or across networks, end-to-end encrypted.
  • Honest - every number self-certifies; Snitch even reports its own overhead.
  • Modder API - a zero-overhead no-op when Snitch isn't installed; no hard dependency.

Screenshots

Expanded overlay Web dashboard

Requirements

| Requirement | Notes | |---|---| | MelonLoader | 0.7.x (IL2CPP) | | S1API | ifBars-S1API_Forked | | Sideload 1.36.1+ | Draws the in-game overlay (auto-installed as a dependency). |

Use it

Press F6 (preference OverlayKey) to step the overlay through hidden, compact standings and expanded. Expanded is a set of windows - Standings, States and one per mod - that you drag by the title bar, resize from the bottom-right grip and close or reopen from the Windows strip; the layout is remembered and snitch layout reset restores it. Hold Alt and drag the header to move the compact card. Then snitch start (or the Start button). Or open the web dashboard at snitch.doodesch.de - it auto-connects and shows everything live. Console verbs: layout reset, start, stop, status, frame, top, sections, states, counters, unattributed, patches on|off|list, panels, act, toggle, log, vanilla on|off, ablate <lever>, levers, report. Reports go to Mods/Snitch/runs/.

For modders

Your mod's OnUpdate etc. are auto-timed with zero code (<YourMod>.OnUpdate). For more, drop in Snitch.cs (or reference Snitch.Api.dll) - a no-op when Snitch isn't installed:

using Snitch.Api;   // Profiler, Panel, StateSnapshot
Panel p = Profiler.RegisterPanel("MyMod", "My Mod");             // your own panel in the overlay + dashboard
p.Counter("Queue", () => _q.Count, "items");                     // a gauge
p.Action("Flush", () => Flush());                                // a button (replaces a debug hotkey)
p.Toggle("Verbose", () => _v, x => _v = x);                      // an on/off control
using (Profiler.Sample("MyMod.Work")) { ... }                    // hand-time a sub-section

Or just name a class SnitchProbe with a static Register() - Snitch discovers and calls it automatically. Full example: ScheduleOne-SnitchExample.

Notes

ProfilerRecorder engine counters are inert in Schedule I's IL2CPP build, so Snitch relies on frame-time + GC and self-measured section timing. Profiling is local and safe in multiplayer; state-mutating features run host-only. Everything is idle until you snitch start.

Credits

Built by DooDesch on S1API.

License

DooDesch API License - build on the API, do not copy the code. See LICENSE.md.

This mod is written with help from generative AI tools (Anthropic Claude, OpenAI Codex).

Read the full description on Thunderstore →

Highlights

From source data

Loaders

Runs on BepInEx.

Footprint

Rated a light load on a server.

Dependencies

Needs 3 other projects installed alongside it.

Snitch on Nxeon

From our catalogue
One-click install
Not available. One-click install isn't available for this game's mods yet. Download it and upload it to your server in Files.
Server type needed
BepInEx
Server load
light
Latest build
2.0.0, released 2026-11-02

Game versions by loader

LoaderGame versionsNewest
BepInEx

From 16 recorded builds of Snitch.

Recent builds

BuildReleasedGame versionsLoaders
2.0.02026-11-02n/aBepInEx
1.7.22026-11-02n/aBepInEx
1.7.12026-10-16n/aBepInEx
1.7.02026-09-06n/aBepInEx
1.6.22026-08-08n/aBepInEx
1.6.12026-08-04n/aBepInEx

Dependencies

Declared by the newest build that lists any. Required ones are installed with it on one-click installs.

What kind of mod it is

From the catalog
Listed on Thunderstore as “Content”

Performance

Makes the game or server run faster or lighter without changing how it plays.

Compatibility

Game
Schedule I
Loaders
BepInEx
Requires
One-click install needs a BepInEx server. 3 other projects installed alongside it.

Verified at the source

  • ✓ThunderstoreOfficial listing, checked 2026-11-03Open ↗
  • ✓AuthorDooDesch, as published on Thunderstore
  • ✓LicenseNot published by the sourceFree

Snitch, answered

Generated from the mod’s own source data.

Which loaders does it support?

BepInEx.

Is it free?

Yes. Snitch is free to download from Thunderstore.

How do I add it to my Nxeon server?

NxLabs doesn’t install Schedule I mods for you. Download Snitch free from Thunderstore.

NxLabs

Run Snitch on a Schedule I server.

Free to download from Thunderstore.