Skip to main content

pack-doctor

The IDs in your modpack that silently do nothing

A quest that rewards yourpack:cooked_caned_fish. A diet tag pointing at cooked_canned_rabit_soup. A recipe for an item from a mod you removed last week.

None of these crash. None of them log an error. They quietly give the player nothing, and you find out when someone complains three weeks later.

$ pack-doctor check "MyServer/mods" --against "MyServer/kubejs"

  mods indexed      233
  known IDs         14794  (188 defined by the pack itself)

IDS THAT MATCH NOTHING INSTALLED — 3 ID(s)
------------------------------------------------------------

  yourpack:cooked_caned_fish
      server_scripts/tags/diet.js:45

  yourpack:cooked_canned_rabit_soup
      server_scripts/tags/diet.js:46

  yourpack:stampler
      startup_scripts/removals.js:368

It reads every jar in your mods folder, builds an index of every ID that actually exists, then checks every ID your datapacks, KubeJS scripts, quests and configs reference against it. An ID that matches nothing installed is doing nothing, and you can confirm that yourself in a few seconds.

It also knows that KubeJS startup scripts register new content, so the items your own pack creates are not reported as dead.

It also reports

NAMESPACES WITH NO INSTALLED MOD -- grouped with a reference count rather than listed one by one. Some are genuinely missing mods. Others are group names a mod's own script API invents; KubeJS does this constantly. You judge.

Honest limits

  • IDs come from translation keys. That covers every item, block and entity a player can see, but a registry entry with no lang key cannot be confirmed either way, and lands in UNVERIFIED (--verbose) rather than being called dead.
  • It reads what the files say, not what the game does. It cannot know a recipe is unreachable or a quest unwinnable.
  • forge: and c: are skipped -- those are tag namespaces, and treating them as registries produced nothing but noise.

Install

pip install pack-doctor

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

More

What the paid edition adds: the suggestion engine -- "did you mean cooked_canned_fish?" -- and the confidence tiering that keeps fuzzy-match noise out of the list. On a real 233-mod pack that was the difference between 169 candidates and 63 worth reading. Knowing an ID is dead is worth having for free; being handed the ID you meant, without wading through false positives, is the paid part.

Developed against two real servers: 92 jars / 9,635 IDs and 233 jars / 14,755 IDs. Comparing ID paths rather than whole IDs matters -- a shared namespace inflates every similarity score.

Diagnostic pages for every finding: https://jaakoby.github.io/fix/ Source: https://github.com/jaakoby/pack-doctor Full edition: https://kaiven.gumroad.com/l/pack-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 pack-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 pack-doctor 1.0.0
File Size Uploaded
pack_doctor-1.0.0.tar.gz 10.3 kB Details

Built distribution (wheel)

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

Total release size: 21.3 kB

Release files / pack_doctor-1.0.0.tar.gz

Download URL pack_doctor-1.0.0.tar.gz
Size 10.3 kB
Tags Source
SHA-256 checksum
How to use checksums
95dec398da9a1b8794fccf4551d3f67fdd7569ba93b1c6f8d38dd5311bb07003
BLAKE2b-256 checksum
How to use checksums
33e1f82e2bf591a377fa7725e7fdbde4db25f876658714ca3b260a6b94475bf6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

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

Download URL pack_doctor-1.0.0-py3-none-any.whl
Size 11.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
45e24eb2775e8b1e2f7ff5ad52cd9f01422942cb21e6e073dd280509f9b202cd
BLAKE2b-256 checksum
How to use checksums
1ed03cf716dbaa41d24ad9f42ed1cb8c15f67a731dfd73068c7111c727fa4b70
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