Some mods target the Mono version of the game, which is available by opting into the Steam beta branch "alternate"
Snitch
A performance profiler - measure the cost + state of NPCs, trash, quests and your own mods, with an in-game HUD and a live web dashboard.
| Last updated | a day ago |
| Total downloads | 31 |
| Total rating | 1 |
| Categories | Mods |
| Dependency string | DooDesch-Snitch-1.0.2 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
LavaGang-MelonLoader
The World's First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono
Preferred version: 0.7.3ifBars-S1API_Forked
S1API is an open source collaboration project to help standardize Schedule One modding processes.The goal is to provide a standard place for common functionalities so you can focus on making content versus reverse engineering the game.
Preferred version: 3.0.5README
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 measures the cost and state of NPCs, trash, quests, and - through a tiny no-op API - any other mod's systems. It ships with an in-game HUD 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.
Live dashboard · Wiki / docs · 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). - State distributions - NPCs by movement/visibility, trash by physics state, quests by state, + your own.
- 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.
- 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.
Requirements
| Requirement | Notes |
|---|---|
| MelonLoader | 0.7.x (IL2CPP) |
| S1API | ifBars-S1API_Forked |
Use it
Open the in-game console: snitch start, then snitch hud on. Or open the web dashboard at
snitch.doodesch.de - it auto-connects and shows everything live. Console
verbs: start, stop, status, frame, top, sections, states, counters, hud, vanilla on|off, ablate <lever>, levers, report. Reports are written 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, StateSnapshot
using (Profiler.Sample("MyMod.Work")) { ... } // hand-time a sub-section
Profiler.RegisterCounter("MyMod.Queue", () => _q.Count, "items"); // a gauge
Profiler.RegisterStateProvider("MyMod.Jobs", () => ...); // a distribution
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.