Plugin Doctor is a local RuneLite performance diagnostic tool for investigating FPS drops, client stalls, client-thread CPU pressure, JVM heap behavior, and garbage-collection activity.
It combines live whole-client measurements with controlled plugin ON/OFF trials. The comparison workflow helps users identify a likely contributor by repeating the same test with one selected plugin enabled and disabled. Results are correlations to verify, not claims of direct per-plugin profiling.
- Live FPS, client-thread CPU, heap, worst client cycle, GameTick interval, active-plugin count, recent garbage-collection time, and stall count.
- Timed diagnostic captures with pause and resume support.
- Matched plugin ON/OFF comparisons with contamination checks.
- Optional, explicitly authorized assisted switching for only the selected plugin.
- Automatic restoration of the selected plugin's original state when possible.
- Ranked comparison results with plain-language conclusions, evidence scores, and confidence labels.
- Basic reports for ordinary users and advanced reports for detailed troubleshooting.
- Responsive RuneLite-native panel designed for the standard 225-pixel sidebar.
- Local-only operation with no telemetry, server, account data, chat data, inventory data, or network capture.
- User guide - every panel control, recommended workflows, settings, reports, and assisted switching.
- Metric reference - exact definitions and calculations for FPS, CPU, p95, client cycles, GameTick timing, heap, GC time, stalls, evidence scores, and confidence.
- Interpreting results - how to distinguish a repeatable plugin cost from ordinary measurement noise and how to read the included examples.
- Basic comparison report example
- Advanced comparison report example
- Open Plugin Doctor and select Compare.
- Choose one suspect plugin under Plugin under test.
- Keep the same location, camera, activity, client size, FPS limit, and client focus for both segments.
- Capture the plugin ON.
- Capture the same plugin OFF without changing anything else.
- Review the ON/OFF values and conclusion.
- Repeat the matched trial at least three times before drawing a strong conclusion.
- Use Copy basic for a readable summary or Copy advanced for every retained field.
Plugin Doctor rejects a pair if another plugin changes during either segment, the selected plugin is in the wrong state, or the remaining enabled-plugin sets do not match.
For a faster but less controlled check, use Start quick capture, wait at least five seconds, change exactly one plugin, wait at least five more seconds, and analyze the resulting before/after correlation.
| Live diagnostics | Plugin comparison |
|---|---|
![]() |
![]() |
| Assisted-switching consent | Settings |
|---|---|
![]() |
![]() |
| Mixed GPU result | No clear Metronome slowdown |
|---|---|
![]() |
![]() |
| World Hopper result |
|---|
![]() |
| Conclusion | Meaning |
|---|---|
| Strong likely contributor | Multiple measured signals improved enough with the plugin OFF to produce an evidence score of at least 60/100. Repeatability is still required. |
| Possible contributor | The averaged evidence score is at least 30/100, but the measured effect is not strong enough for the higher label. |
| Mixed result | Meaningful metrics moved in opposing directions. The environment changed, the plugin has a tradeoff, or the trial was noisy. Repeat under stable conditions. |
| Performance favored the plugin ON | At least two meaningful signals became worse with the plugin OFF. |
| No clear slowdown detected | The measurements did not cross the plugin-impact thresholds. This does not prove the plugin has zero cost. |
The evidence score is a normalized comparison indicator, not a probability, benchmark grade, or percentage of total client lag. See the metric reference for the exact formula.
RuneLite's public plugin API does not expose per-plugin allocation counters or event-handler timings. Directly instrumenting every plugin would require forbidden reflection or RuneLite core changes, which would make this unsuitable as a standalone Plugin Hub plugin.
Plugin Doctor therefore measures the whole client and uses controlled ON/OFF comparisons for attribution. Background applications, location changes, camera changes, FPS caps, GPU/117 HD renderer changes, client focus, game updates, network conditions, and normal JVM garbage collection can affect results. Repeat comparable trials before identifying a plugin as the likely cause.
GameTick interval is client-observed event timing. It is not network ping or server latency. Plugin Doctor does not inspect RuneScape network traffic.
All samples, pending pairs, and rankings remain in memory until cleared, the plugin stops, or RuneLite closes. Reports are placed on the clipboard only when the user presses a copy button.
Reports exclude RuneScape account names, chat, inventory, equipment, friends, clan members, and network data. Advanced reports can optionally include enabled plugin names; disable Include plugin list if that inventory should not be copied.
Assisted switching is disabled by default. When authorized, it uses RuneLite's public plugin-management API and acts only on the selected comparison plugin. It refuses to enable a plugin automatically if doing so would disable an enabled conflicting plugin. An unexpected client or JVM exit can prevent restoration, which is why a warning is shown before consent.
This standalone external-plugin repository targets Java 11.
./gradlew clean test shadowJar
./gradlew runOn Windows, use gradlew.bat. The run task launches a RuneLite development client with assertions enabled. Jagex Account users should follow RuneLite's Using Jagex Accounts instructions.
Build output is generated under build/ and is intentionally excluded from version control.
Plugin Doctor is licensed under the BSD 2-Clause License. See LICENSE.






