Skip to main content

nucleation

A high-performance Minecraft schematic engine, powered by a native Rust core. Parse, edit, diff, fingerprint, and generate schematics from Python.

Policy-driven normalization, material profiles, content inspection, UUID standardization, bounded decoding, and registry routing are documented in the complete transformation-policy guide.

Wheels are published for CPython 3.12+ (stable ABI) on Linux, macOS, and Windows. They include a py.typed marker and generated .pyi stubs for Mypy, Pyright, and editor completion. The installed package-level __init__.pyi explicitly re-exports every generated native type, followed by the hand-written veneer types; this keeps package exports equally visible to Mypy and Pyright while preserving the native classes' type identities.

Install

pip install nucleation

Quick start

import nucleation

schematic = nucleation.Schematic.create("demo")
schematic.set_block(1, 2, 3, "minecraft:stone")
print(schematic.get_block_name(1, 2, 3))  # "minecraft:stone"

schematic.save_to_file("demo.litematic")
loaded = nucleation.Schematic.load_from_file("demo.litematic")

Normalize imported content

Preview and apply the same versioned policy contract used by every language binding:

from nucleation import Schematic, TransformPlan, inspect_transform, apply_transform

schematic = Schematic.open("incoming.schem")
plan = TransformPlan.registry_safe()
preview = inspect_transform(schematic, plan)

if not preview.rejected and not preview.quarantined:
    report = apply_transform(schematic, plan)
    schematic.save("normalized.schem")

Inspection never mutates the schematic. Apply is atomic: a rejecting rule returns report.rejected == True and leaves the original unchanged. For only lossless palette cleanup, use TransformPlan.canonical().

Split disconnected builds

Keep every meaningful connected machine independent while attaching only tiny, nearby loose parts:

schematic = nucleation.Schematic.open("combined.schem")
pieces = schematic.split_connected_attach_nearby(
    16,  # components this large always remain standalone
    3,   # tiny parts may attach across at most three empty blocks
)

for index in range(pieces.len()):
    pieces.piece(index).save(f"machine-{index + 1}.schem")

Attachment is lossless and non-transitive: fragments cannot form a chain that recombines otherwise independent builds. Whole-world extraction, including the Python control plane and remote Store worker, is documented in the world-segmentation guide.

To emit every disconnected component literally, use a zero standalone threshold. Every component then becomes a core and the gap is ignored:

pieces = schematic.split_connected_attach_nearby(0, 0)

Curate a lossless corpus

Keep raw extraction lossless, then build registry and ranking views with an auditable policy. Every rejected ID and reason is retained:

from pathlib import Path
from nucleation import (
    CurationPolicy,
    curate_corpus,
    write_registry_archives,
    write_top_owner_archives,
)

policy = CurationPolicy.minima(
    min_blocks=2,          # reject standalone blocks
    min_palette_names=2,   # reject one-material schematics
    name="ore-sanity-v1",
)
corpus = curate_corpus(Path("/data/ore"), Path("/data/ore/curation/ore-sanity-v1"), policy)
write_registry_archives(corpus, Path("/data/ore/registry-import"))
write_top_owner_archives(corpus, Path("/data/ore/top-20-owner-archives"))

CurationPolicy also accepts declarative MetricRule entries over analyser or catalogue fields and named Python predicates. The policy receives a stable SHA-256 content ID which is embedded into package indexes and owner manifests. Changing a filter therefore cannot silently reuse an older curated result.

What is included

The published wheel contains the core feature set: schematic editing, all schematic formats, world import and export (including streaming), the schematic builder, the procedural building tool, definition regions, diff and fingerprinting, autostack, NBT helpers, SDF sampling, and the in-memory/filesystem store.

Redstone simulation, mesh generation, GPU rendering, and embedded scripting require building the package from source with the extra cargo features enabled (a Rust toolchain is required):

git clone https://github.com/Schem-at/Nucleation
cd Nucleation
pip install ./bindings/python

The source build defaults to the full feature set (bridge-full). Set the NUCLEATION_FEATURES environment variable to choose a different cargo feature list, for example NUCLEATION_FEATURES=bridge,simulation.

Documentation

License

MIT

Building a smaller feature set

Published wheels include bridge-full. A source build can select a smaller Cargo feature set, including transitive dependencies:

NUCLEATION_FEATURES=bridge pip install --no-binary=nucleation nucleation
NUCLEATION_FEATURES=bridge,rendering,mc-tick pip install --no-binary=nucleation nucleation

bridge is required. Cargo's normal default features stay enabled. Disabled features omit their Python types and methods, including animation rendering methods. Enable scripting-lua or scripting-js explicitly when needed; a minimal build requires neither scripting engine. Selection reads the same Cargo feature definitions and Rust bridge gates for checkouts and sdists.

On Android/Termux, the build explicitly links the interpreter library and android/log. Install matching Python development libraries; a missing interpreter library fails configuration. Ordinary Linux/macOS extensions keep nanobind's module linkage, without imposing a new libpython dependency.

Native errors

Catch nucleation.NucleationError for engine failures and inspect error.code against nucleation.NucleationErrorCode constants. This also applies to nucleation.core and the open/save convenience methods. Python argument errors are not converted into engine errors.

Metadata

Release files for nucleation 0.10.26

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

Source distribution (sdist)

Source distribution for nucleation 0.10.26
File Size Uploaded Provenance
nucleation-0.10.26.tar.gz 3.0 MB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for nucleation 0.10.26
File Interpreter ABI Platform
nucleation-0.10.26-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
nucleation-0.10.26-cp312-abi3-manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.28+ x86-64 Details
nucleation-0.10.26-cp312-abi3-macosx_11_0_arm64.whl CPython 3.12 abi3 macOS 11.0+ ARM64 Details

Total release size: 46.6 MB

Release files / nucleation-0.10.26.tar.gz

Download URL nucleation-0.10.26.tar.gz
Size 3.0 MB
Tags Source
SHA-256 checksum
How to use checksums
b561bf63cd4a0eb652c7190cfd50e5f80e432b108cb3bcefe5f39cec526708bf
BLAKE2b-256 checksum
How to use checksums
60478806e3b814964f7dbc2ca8636c7d9e87fa1d2345d288a96df5be05de6c25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / nucleation-0.10.26-cp312-abi3-win_amd64.whl

Download URL nucleation-0.10.26-cp312-abi3-win_amd64.whl
Size 12.1 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
7bf2307f6e6cdc740d2e41bea9b92d8214ae59a6a8c3ab47d71938553930c93f
BLAKE2b-256 checksum
How to use checksums
a0e28294447cfeec8b86331cc8a658b7941712351342f4a46d0eae1ebb545c76
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / nucleation-0.10.26-cp312-abi3-manylinux_2_28_x86_64.whl

Download URL nucleation-0.10.26-cp312-abi3-manylinux_2_28_x86_64.whl
Size 17.2 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
9d9899058dfdd6efb371e52bb7bd49cc43a4071c33d59c64a006f8f1d9f55068
BLAKE2b-256 checksum
How to use checksums
43690b9c97592d0a42e7d0bf81a53fda4d8fe86d3a752f22234fbe3f62a96ab1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / nucleation-0.10.26-cp312-abi3-macosx_11_0_arm64.whl

Download URL nucleation-0.10.26-cp312-abi3-macosx_11_0_arm64.whl
Size 14.3 MB
Tags CPython 3.12 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2f13c7dd3eecd6d491970acd84cbdb74042226c929b549202b64777f18700efe
BLAKE2b-256 checksum
How to use checksums
da58f1a3606474a235b386cd76894f23c692f7ebac57e0acf387a22f3399c1d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Security for nucleation 0.10.26

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.10.26 This release

4 release files No provenance

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