Skip to main content

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.


Crates.io npm PyPI


Features

Core

  • Multi-format support: .schematic, .litematic, .nbt, .mcstructure, and more
  • Memory-safe Rust core with zero-copy deserialization
  • Cross-platform: Linux, macOS, Windows (x86_64 + ARM64)
  • Multi-language: Rust, JavaScript/TypeScript (WASM), Python, C/FFI

Schematic Building

  • SchematicBuilder: Create schematics with ASCII art and Unicode characters
  • Compositional Design: Build circuits hierarchically from smaller components
  • Unicode Palettes: Visual circuit design with intuitive characters (, , , etc.)
  • Template System: Define circuits in human-readable text format
  • CLI Tool: Build schematics from command line (schematic-builder)

Circuit Simulation

  • Redstone simulation via MCHPRS integration (optional simulation feature)
  • TypedCircuitExecutor: High-level API with typed inputs/outputs (Bool, U32, Ascii, etc.)
  • CircuitBuilder: Fluent API for streamlined executor creation
  • DefinitionRegion: Advanced region manipulation with boolean ops, filtering, and connectivity analysis
  • Custom IO: Inject and monitor signal strengths at specific positions
  • Execution Modes: Fixed ticks, until condition, until stable, until change
  • State Management: Stateless, stateful, or manual tick control

Developer Experience

  • Bracket notation for blocks: "minecraft:lever[facing=east,powered=false]"
  • Feature parity across all language bindings
  • Comprehensive documentation in docs/
  • 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

Loading and Saving Schematics

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());

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())

Building Schematics with ASCII Art

use nucleation::SchematicBuilder;

// Use Unicode characters for visual circuit design!
let circuit = SchematicBuilder::new()
    .from_template(r#"
        # Base layer
        ccc
        ccc

        # Logic layer
        ─→─
        │█│
        "#)
    .build()?;

// Save as litematic
let bytes = nucleation::litematic::to_litematic(&circuit)?;
std::fs::write("circuit.litematic", bytes)?;

Available in Rust, JavaScript, and Python! See SchematicBuilder Guide.

Compositional Circuit Design

// Build a basic gate
let and_gate = create_and_gate();

// Use it in a larger circuit
let half_adder = SchematicBuilder::new()
    .map_schematic('A', and_gate)  // Use entire schematic as palette entry!
    .map_schematic('X', xor_gate)
    .layers(&[&["AX"]])  // Place side-by-side
    .build()?;

// Stack multiple copies
let four_bit_adder = SchematicBuilder::new()
    .map_schematic('F', full_adder)
    .layers(&[&["FFFF"]])  // 4 full-adders in a row
    .build()?;

See 4-Bit Adder Example for a complete hierarchical design.

CLI Tool

# Build schematic from text template
cat circuit.txt | schematic-builder -o circuit.litematic

# From file
schematic-builder -i circuit.txt -o circuit.litematic

# Choose format
schematic-builder -i circuit.txt -o circuit.schem --format schem

# Export as mcstructure
schematic-builder -i circuit.txt -o circuit.mcstructure --format mcstructure

Advanced Examples

Setting Blocks with Properties

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]"
);

More in examples/rust.md

Redstone Circuit 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

High-Level Typed Executor

use nucleation::{TypedCircuitExecutor, IoType, Value, ExecutionMode};

// Create executor with typed IO
let mut executor = TypedCircuitExecutor::new(world, inputs, outputs);

// Execute with typed values
let mut input_values = HashMap::new();
input_values.insert("a".to_string(), Value::Bool(true));
input_values.insert("b".to_string(), Value::Bool(true));

let result = executor.execute(
    input_values,
    ExecutionMode::FixedTicks { ticks: 100 }
)?;

// Get typed output
let output = result.outputs.get("result").unwrap();
assert_eq!(*output, Value::Bool(true));  // AND gate result

Supported types: Bool, U8, U16, U32, I8, I16, I32, Float32, Ascii, Array, Matrix, Struct

See TypedCircuitExecutor Guide for execution modes, state management, and more.


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

Documentation

📖 Language-Specific Documentation

Choose your language for complete API reference and examples:

📚 Shared Guides

These guides apply to all languages:

🎯 Quick Links


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

nucleation-0.1.147.tar.gz (11.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nucleation-0.1.147-cp312-cp312-manylinux_2_35_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

File details

Details for the file nucleation-0.1.147.tar.gz.

File metadata

  • Download URL: nucleation-0.1.147.tar.gz
  • Upload date:
  • Size: 11.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.11.5

File hashes

Hashes for nucleation-0.1.147.tar.gz
Algorithm Hash digest
SHA256 b1e205898b48de8846de264225e5a92f1ebcc5261dd69366da359771253a9b9f
MD5 bb0d54cf216f67810481261f330081de
BLAKE2b-256 2e44b8199d640850e28f7d46caff331de7f98fb4d9ab81f5b0710e6c47bdebd1

See more details on using hashes here.

File details

Details for the file nucleation-0.1.147-cp312-cp312-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for nucleation-0.1.147-cp312-cp312-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 50ff493527d9b43d3c7de1712ed150fcc51827e42afcf05a945044a18d35c425
MD5 fd4c3ac843c59e7e265e31e55935f529
BLAKE2b-256 9fb9f0672033deff70a62e329f326904cc2b91245652425b23e915f33858c641

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page