DooDesch-Snitch icon

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.

CHANGELOG

Changelog

All notable changes to Snitch are documented here. Format based on Keep a Changelog.

[1.0.2] - 2026-06-22

Less code in mods, more profiling for free. No change to the host data/wire protocol or the bridge ABI, so existing integrations keep working.

Added

  • Auto-instrumentation: while sampling, every other loaded mod's per-frame methods (OnUpdate, OnFixedUpdate, OnLateUpdate, OnGUI) are timed automatically and shown as <Mod>.OnUpdate - per-mod frame cost with zero code on the mod's side. Toggle with the AutoInstrument preference.
  • Zero-wiring registration: a mod's SnitchProbe.Register() is now discovered and called by the host automatically when sampling starts, so a mod no longer wires a registration call into its OnInitializeMelon.

Changed

  • Modder API shim class renamed Snitch.Api.Snitch -> Snitch.Api.Profiler (drops the using Prof = ... alias; just using Snitch.Api; then Profiler.Sample(...)). The bridge contract is unchanged, so previously shipped shims still bind and report.
  • Cheaper no-op path: the shim's pre-bind host lookup no longer scans every loaded assembly each call.

[1.0.1] - 2026-06-22

Internal cleanup. No functional or behavioural changes.

Changed

  • Removed leftover development scaffolding: the dev-only verification probes and all internal "phase"-process references in code comments, console help, and docs.

[1.0.0] - 2026-06-22

Initial release. Feature-complete and verified in-game.

Added

  • Frame-time + GC sampler (the load-bearing measurement layer).
  • Stopwatch section timer (Snitch.Sample), backing both the modder API and vanilla probes.
  • Built-in state providers: NPCs (movement/visibility), trash (physics), quests (state).
  • Vanilla CPU cost attribution via Harmony accumulators (snitch vanilla on) - e.g. NPCMovement.Update/FixedUpdate.
  • Ablation A/B harness with a stability gate + lever registry (snitch ablate <lever>), built-in npc lever.
  • Local HTTP + WebSocket data server (loopback :6140) with CORS/PNA/Origin/token.
  • SnitchWeb live dashboard (React + uPlot), bundled offline at http://localhost:6140/.
  • Zero-overhead modder API (Snitch.Api) - copy-in source or referenced DLL, no hard dependency.
  • In-game HUD, periodic telemetry, and Markdown/CSV report export.