| Crates.io | packer-3d |
| lib.rs | packer-3d |
| version | 0.3.0 |
| created_at | 2025-10-28 21:24:41.85894+00 |
| updated_at | 2025-11-07 09:00:07.29145+00 |
| description | Packing algorithm for 3D container packing which optimizes for width, height, length, or all three. |
| homepage | |
| repository | https://github.com/R-Besson/n-dimensional-strip-packing |
| max_upload_size | |
| id | 1905684 |
| size | 778,030 |
Example of what you can make. Rendered using the Bevy data-driven game engine.

Run this in your rust project to add packer-3d to your dependencies.
cargo add packer-3d
After adding the dependency, you can test it with this example:
use packer_3d::{box3d::Box3D, sorting::Sorting, vector3d::Vector3D, PackerInstance};
fn main() {
let my_boxes = vec![
Box3D::from_xyz_whl(0, 0, 0, 100, 200, 300, 1, 0),
Box3D::from_xyz_whl(0, 0, 0, 100, 200, 300, 2, 0),
Box3D::from_xyz_whl(0, 0, 0, 100, 200, 300, 3, 0),
];
let mut my_instance = PackerInstance::new(
my_boxes.clone(), // Our boxes
Vector3D::new(500, 0, 500), // Our container size
true, // No rotations
(false, true, false), // Minimize height only
Sorting::descending_volume, // Our initial sorting heuristic
);
// for _ in 0..3 {
// match my_instance.pack_next() {
// Err(error) => println!("Error: {}", error),
// Ok(()) => {}
// }
// }
match my_instance.pack_all() {
Err(errors) => println!("Errors: {:#?}", errors),
Ok(()) => {}
}
println!("{:#?}", my_instance.boxes());
}
Which should output:
[
Box3D {
position: Vector3D {
x: 0,
y: 0,
z: 0,
},
size: Vector3D {
x: 300,
y: 100,
z: 200,
},
id: 1,
origin: 0,
},
Box3D {
position: Vector3D {
x: 300,
y: 0,
z: 0,
},
size: Vector3D {
x: 200,
y: 100,
z: 300,
},
id: 2,
origin: 0,
},
Box3D {
position: Vector3D {
x: 0,
y: 0,
z: 200,
},
size: Vector3D {
x: 300,
y: 100,
z: 200,
},
id: 3,
origin: 0,
},
]