Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

vanilla-mcdoc

Pydantic models for every file in Minecraft: Java Edition's data packs and resource packs: recipes, advancements, loot tables, worldgen, item models, and the rest. They're generated from vanilla-mcdoc, the schemas that Spyglass uses to validate packs, so they follow every Minecraft release and snapshot.

from vanilla_mcdoc.data import Smelting

recipe = Smelting.model_validate({
    "type": "minecraft:smelting",
    "ingredient": "minecraft:iron_ore",
    "result": {"id": "minecraft:iron_ingot"},
    "experience": 0.7,
    "cookingtime": 200,
})
recipe.experience  # 0.7
recipe.model_dump(mode="json", exclude_none=True)  # Back to the JSON that goes in the pack

Installing

Requires Python 3.14 or later.

pip install vanilla-mcdoc

Each Minecraft version is its own package version, so you can install the one your pack targets:

You want Install
The newest release of Minecraft pip install vanilla-mcdoc
The newest snapshot, pre-release or RC pip install --pre vanilla-mcdoc
A particular version, e.g. 26.1.2 pip install "vanilla-mcdoc==26.1.2.*"

The package's version is the Minecraft version, padded to three numbers: 26.3 is 26.3.0, and the snapshot 26.4-snapshot-3 is 26.4.0a3 (pre-releases are b, release candidates rc). When the schemas are fixed or the generator improves, that Minecraft version gets a new build: 26.3.0.post1, 26.3.0.post2, and so on. ==26.3.0.* always gets the newest build of 26.3. To check which one you have:

import vanilla_mcdoc

vanilla_mcdoc.__minecraft_version__  # "26.3"
vanilla_mcdoc.__mcdoc_commit__       # The vanilla-mcdoc commit it was generated from

Using it

Every schema is importable from a module that mirrors where vanilla-mcdoc defines it, e.g. vanilla_mcdoc.data.recipe.Smelting, vanilla_mcdoc.assets.item_definition.ItemModel, or vanilla_mcdoc.world.item.ItemStackTemplate. Names that only one module uses can also be imported straight from vanilla_mcdoc.data or vanilla_mcdoc.assets, as in the example above.

Models (classes) validate with Model.model_validate(data), or Model(...) with keyword arguments, like any pydantic model. Invalid data raises pydantic's ValidationError, saying where and why:

1 validation error for Smelting
cookingtime
  Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='slow', input_type=str]

Unions are type aliases rather than classes, e.g. a loot function can be any one of dozens of kinds, so they're validated with a TypeAdapter, which gives you back the right model:

from pydantic import TypeAdapter
from vanilla_mcdoc.data.loot.function.LootFunction import LootFunction

function = TypeAdapter(LootFunction).validate_python({"type": "minecraft:set_count", "count": 3})
type(function).__name__  # "LootFunctionSetCount"

Root resources, the ones that are files of their own in a pack, know which folder they go in, e.g. Smelting.__resource_dir__ == "recipe". vanilla_mcdoc.root_resource_registry lists all of them, in ROOT_DATAPACK_CLASSES and ROOT_RESOURCE_PACK_CLASSES.

A few more things worth knowing:

  • Unknown keys are kept, not dropped, so data the schemas don't cover yet survives a round trip.
  • Fields renamed to be valid Python (e.g. from becomes from_) still read and write the real JSON key.
  • Resource locations accept both forms: "minecraft:stone" and "stone". Where vanilla-mcdoc lists a registry's entries, they're in its type too (e.g. KnownItemId), so your editor can autocomplete them.
  • The first time you use a model type in a program, it takes a second or two, while pydantic builds that type's validator. After that, validating is fast.

Where it comes from

The generator, and how the package gets published, live at UP929312/vanilla_mcdoc_to_python. It reads vanilla-mcdoc's symbols.json (with the list of Minecraft versions from misode/mcmeta), and checks for updates every hour, so a new snapshot is usually on PyPI shortly after Spyglass has updated its schemas.

If something doesn't match what Minecraft accepts, it's either a gap in vanilla-mcdoc or a bug in the generator. Issues are welcome at the generator's repository.

This project isn't affiliated with Mojang, Microsoft or the Spyglass team.

Metadata

Release files for vanilla-mcdoc 26.4.0a3.post1

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

Source distribution (sdist)

Source distribution for vanilla-mcdoc 26.4.0a3.post1
File Size Uploaded
vanilla_mcdoc-26.4.0a3.post1.tar.gz 301.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vanilla-mcdoc 26.4.0a3.post1
File Interpreter ABI Platform
vanilla_mcdoc-26.4.0a3.post1-py3-none-any.whl Python 3 none any Details

Total release size: 1.4 MB

Release files / vanilla_mcdoc-26.4.0a3.post1.tar.gz

Download URL vanilla_mcdoc-26.4.0a3.post1.tar.gz
Size 301.5 kB
Tags Source
SHA-256 checksum
How to use checksums
d6e91574e68b129f24a74c446f68d89edd3f8f217199ea364be4f612c18572c5
BLAKE2b-256 checksum
How to use checksums
02dc79bb033b8461919f08963e830deabc03329530d5278c570a8c7415f999e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.

Transparency log

Release files / vanilla_mcdoc-26.4.0a3.post1-py3-none-any.whl

Download URL vanilla_mcdoc-26.4.0a3.post1-py3-none-any.whl
Size 1.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
35e32caf7af0dca74c8de2b3fdc98fa586152d7c84918495836788dd2cec0c85
BLAKE2b-256 checksum
How to use checksums
28351f20b6c0d2b8dfea655ae391825f151976f75759c96fcba97683763b1038
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.

Transparency log
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