Skip to main content

forge-server-doctor

Why won't my modded Minecraft server start?

A 400-line crash report, a wall of at net.minecraft... frames, and no indication which of your 200 mods caused it. That is the problem this solves.

$ forge-doctor logs/latest.log

ENVIRONMENT
------------------------------------------------------------
  Minecraft        1.21.1
  Loader           21.1.72
  Java             21.0.4
  Mods             214
  Reached 'Done'   no

  CULPRIT (first non-vanilla frame):
    techmod-1.21.1-4.2.0.jar
    in com.example.tech.TechMod.<init>

It names a culprit on any report that has a stack trace, including crashes it does not recognise -- which is the common case, and the part other tools give up on. The method is deliberately simple: walk the trace, skip every frame belonging to Minecraft, the loader or the JDK, and report the first one that is left, along with the jar Forge says it came from.

Constructor frames (TechMod.<init>) and static initialisers (<clinit>) count, because dying in your own constructor is one of the most common startup crashes there is.

What this free edition does

  • Names the culprit mod and the jar it came from, on any trace
  • Six startup failures matched with the fix for each: EULA not accepted, port already in use, wrong Java version, out of memory, locked or corrupt world, and duplicate mod jars
  • Reads plain .log, .log.gz and crash-reports/*.txt
  • When nothing matches, it says so plainly and tells you what to check by hand, instead of implying the log is clean
  • Links each finding to a page on how to be sure it is that, and what it gets mistaken for

Honest limits

  • It reads the log, not the game. It cannot know a mod is merely incompatible if nothing in the log says so.
  • The first non-vanilla frame is a strong heuristic, not proof. A mod that wraps another mod's code will sometimes take the blame for it.
  • Some logs do not annotate frames with a jar name at all. There it reports the Java package instead and says it could not identify the jar, rather than guessing one.
  • Deobfuscated names only. A fully obfuscated trace gives it nothing to read.

Install

pip install forge-server-doctor

One module, Python 3.8+, no dependencies -- it imports nothing outside the standard library.

More

The paid edition adds 18 more failure modes matched in the log with the fix for each, plus --json for scripting. Culprit naming is deliberately in the free edition -- withholding the only hard part would be the wrong way round.

Exit codes are meaningful and non-zero on purpose: 0 nothing fatal, 1 a fatal finding, 2 bad arguments. That lets you gate a start script on it (forge-doctor logs/latest.log || exit). It also fooled my own test harness twice, which is why it is written down here.

Diagnostic pages for every finding: https://jaakoby.github.io/fix/ Source: https://github.com/jaakoby/forge-server-doctor Full edition: https://kaiven.gumroad.com/l/forge-server-doctor


Built by Jakoby Tuckta with Claude. Every claim above is something the tool does on a real log; see the repo's tests.

Metadata

Release files for forge-server-doctor 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for forge-server-doctor 1.0.0
File Size Uploaded
forge_server_doctor-1.0.0.tar.gz 14.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for forge-server-doctor 1.0.0
File Interpreter ABI Platform
forge_server_doctor-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 28.2 kB

Release files / forge_server_doctor-1.0.0.tar.gz

Download URL forge_server_doctor-1.0.0.tar.gz
Size 14.4 kB
Tags Source
SHA-256 checksum
How to use checksums
aba61775c9be05b102dd7642baaf1a85b258bf36f673fb7663cda70b3133c918
BLAKE2b-256 checksum
How to use checksums
048cccd22025ff033e87e064aba51a4253f47f12e7c8d3353a5dcdb1c2b811b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / forge_server_doctor-1.0.0-py3-none-any.whl

Download URL forge_server_doctor-1.0.0-py3-none-any.whl
Size 13.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0fea93c2b5824d41fc2e06a1f0c36f8d830427a24b70d65ec000a05b370b51ae
BLAKE2b-256 checksum
How to use checksums
fa889cfc4983e885959c22f7aff47d8ae469e02f576eac3d278adcb6bc834076
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page