Skip to main content

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.2.0.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.2.0.post1
File Size Uploaded
vanilla_mcdoc-26.2.0.post1.tar.gz 297.5 kB Details

Built distribution (wheel)

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

Total release size: 1.4 MB

Release files / vanilla_mcdoc-26.2.0.post1.tar.gz

Download URL vanilla_mcdoc-26.2.0.post1.tar.gz
Size 297.5 kB
Tags Source
SHA-256 checksum
How to use checksums
f7c9a961d734104d46507dc59050dc1f1f33ddd205e524bb523dd306aae72a8c
BLAKE2b-256 checksum
How to use checksums
01b96e7cba21c99a098932dc36927ddf6d4e5ea755ae4e5c87d0a6907aa9e4cb
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.2.0.post1-py3-none-any.whl

Download URL vanilla_mcdoc-26.2.0.post1-py3-none-any.whl
Size 1.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
48a22980fc44f3cc815a3cd02235898504c621dd959f93f0111dd14bc787066a
BLAKE2b-256 checksum
How to use checksums
597f2972529d63402742ce2ef5b9aba53095c07e8242aba7bcd4da3f80ee1c66
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