A high-performance Minecraft schematic parser and utility library
Project description
Nucleation
Nucleation is a high-performance Minecraft schematic engine written in Rust with full support for Rust, WebAssembly/JavaScript, Python, and FFI-based integrations like PHP and C.
Built for performance, portability, and parity across ecosystems.
Features
- Multi-format support:
.schematic,.litematic,.nbt, etc. - Memory-safe Rust core with zero-copy deserialization
- WASM module for browser + Node.js with simulation support
- Native Python bindings (
pip install nucleation) - C-compatible FFI for PHP, C, Go, etc.
- Redstone circuit simulation via MCHPRS integration (optional
simulationfeature) - Bracket notation for setting blocks with properties:
"minecraft:lever[facing=east,powered=false]" - Feature parity across all interfaces
- Binary builds for Linux, macOS, Windows (x86_64 + ARM64)
- Seamless integration with Cubane
Installation
Rust
cargo add nucleation
JavaScript / TypeScript (WASM)
npm install nucleation
Python
pip install nucleation
C / PHP / FFI
Download prebuilt .so / .dylib / .dll from Releases
or build locally using:
./build-ffi.sh
Quick Examples
Rust
use nucleation::UniversalSchematic;
let bytes = std::fs::read("example.litematic")?;
let mut schematic = UniversalSchematic::new("my_schematic");
schematic.load_from_data(&bytes)?;
println!("{:?}", schematic.get_info());
JavaScript (WASM)
import { SchematicParser } from "nucleation";
const bytes = await fetch("example.litematic").then(r => r.arrayBuffer());
const parser = new SchematicParser();
await parser.fromData(new Uint8Array(bytes));
console.log(parser.getDimensions());
Setting blocks with properties (bracket notation):
const schematic = new SchematicWrapper();
schematic.set_block(0, 1, 0, "minecraft:lever[facing=east,powered=false,face=floor]");
schematic.set_block(5, 1, 0, "minecraft:redstone_wire[power=15,east=side,west=side]");
Redstone simulation:
const simWorld = schematic.create_simulation_world();
simWorld.on_use_block(0, 1, 0); // Toggle lever
simWorld.tick(2);
simWorld.flush();
const isLit = simWorld.is_lit(15, 1, 0); // Check if lamp is lit
Custom IO signal injection/monitoring:
// Configure custom IO nodes for precise signal control
const options = new SimulationOptions();
options.addCustomIo(5, 1, 0); // Mark position as custom IO node
const simWorld = schematic.create_simulation_world_with_options(options);
// Inject custom signal strength
simWorld.setSignalStrength(5, 1, 0, 12); // Set signal to 12
simWorld.tick(5);
simWorld.flush();
// Read signal strength
const strength = simWorld.getSignalStrength(5, 1, 0);
console.log(`Signal strength: ${strength}`);
Python
from nucleation import Schematic
with open("example.litematic", "rb") as f:
data = f.read()
schem = Schematic("my_schematic")
schem.load_from_bytes(data)
print(schem.get_info())
FFI (PHP/C)
#include "nucleation.h"
SchematicHandle* handle = schematic_new("MySchem");
schematic_load_data(handle, data_ptr, data_len);
CSchematicInfo info;
schematic_get_info(handle, &info);
printf("Size: %dx%dx%d\n", info.width, info.height, info.depth);
schematic_free(handle);
Development
# Build the Rust core
cargo build --release
# Build with simulation support
cargo build --release --features simulation
# Build WASM module (includes simulation)
./build-wasm.sh
# Build Python bindings locally
maturin develop --features python
# Build FFI libs
./build-ffi.sh
# Run tests
cargo test
cargo test --features simulation
./test-wasm.sh # WASM tests with simulation
# Pre-push verification (recommended before pushing)
./pre-push.sh # Runs all checks that CI runs
Submodules & Bindings
Rust
JavaScript/TypeScript
Python
FFI (C/PHP)
License
Licensed under the GNU AGPL-3.0-only.
See LICENSE for full terms.
Made by @Nano112
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nucleation-0.1.90.tar.gz.
File metadata
- Download URL: nucleation-0.1.90.tar.gz
- Upload date:
- Size: 6.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e00b1abca57d3a287761258e49c6c8702eb734112ba06a1b0a8f5223496cebff
|
|
| MD5 |
0f198f7f756847405d630ab9e6028137
|
|
| BLAKE2b-256 |
d259589ffb6bd78f5579bf5115e02fc674c0739c3d48dd9988516f8332d71412
|
File details
Details for the file nucleation-0.1.90-cp312-cp312-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: nucleation-0.1.90-cp312-cp312-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 697.5 kB
- Tags: CPython 3.12, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
86278470a835ca914fd92b596a2d9ecb3dadee3184a1104c7eabefa665509d49
|
|
| MD5 |
754525c568891b880867f12dfea506fc
|
|
| BLAKE2b-256 |
f42bd68eff8e05d0b19238e3e660db1b882890323c150c5170da995fd44cbf41
|