:mushroom: Full stack voxel engine
Town, a live multiplayer world running on Voxelize in production.
Voxelize powers persistent, multiplayer voxel worlds that run in any modern browser. No installs, no plugins.
Custom blocks, instanced creatures, water, and voxel lighting in the browser.
Both the server and the client are extremely optimized for performance and scalability. The server is written in Rust, and the client is written in TypeScript.
…voxelize runs ECS-driven worlds: chunk generation, physics, entities, and events all live server-side.@voxelize/core renders worlds in the browser and stays in sync over WebSocket.@voxelize/protocol defines the protobuf messages; @voxelize/transport moves them.voxelize-wasm-mesher compiles the server's mesher to WebAssembly, so client-side remeshing follows the same geometry rules as server-side meshing.@voxelize/agent drives real browser clients headlessly for testing, measurement, and bots.Town is a live, persistent multiplayer building world built on Voxelize, with custom textures, entities, and more.
Server-driven creature behavior and particle VFX over emissive volcanic terrain
Instanced creatures with server-driven behavior (capybaras)
A basalt golem on Mars
Obsidian golem with an emissive core
Colored glass, voxel lighting, and custom block geometry
Tropical fish and clams in my coral garden
Hologram block using custom block entities
A 4-bit copper adder driving a block-built hex display
Under the sea, kelpPrerequisites: Rust, Node.js, pnpm, cargo-watch, wasm-pack, and protoc.
git clone https://github.com/voxelize/voxelize.git
cd voxelize
pnpm install # install dependencies
pnpm proto # generate protocol buffers
pnpm build # build WASM mesher + all packages
pnpm demo # run the demo server and clientThen open http://localhost:3000.
I strongly recommend using Voxelize as a submodule of the workspace you're building.
| Package | Description |
|---|---|
@voxelize/core |
The client engine: rendering, world sync, inputs, and utilities on Three.js |
@voxelize/agent |
Headless puppeteer-backed agent SDK for Voxelize worlds |
@voxelize/transport |
WebSocket transport for Voxelize protocol messages |
@voxelize/protocol |
Shared protobuf message definitions |
@voxelize/physics-engine |
Voxel-aware AABB physics with auto-stepping |
@voxelize/raycast |
Voxel raycasting |
@voxelize/debug |
In-game debug panels |
@voxelize/aabb |
Axis-aligned bounding box math |
| Crate | Description |
|---|---|
voxelize |
The authoritative multiplayer server engine |
voxelize-core |
Core types and utilities — the single source of truth for voxel data encoding |
voxelize-gen |
Deterministic, content-free world generation: seed streams, bit-stable noise, compiled field programs, climate partitions, surface rules, carvers, hydrology, plan-sliced structures, and diagnostics |
voxelize-mesher |
Chunk meshing logic |
voxelize-wasm-mesher |
WebAssembly wrapper around the mesher for client-side use |
Useful workspace commands:
pnpm watch # rebuild TS packages and WASM mesher on change
pnpm test # TypeScript tests (vitest)
pnpm test:rust # Rust mesher and lighting tests
pnpm bench # criterion benchmarks (mesher, lights)
pnpm check # cargo check across all targets
pnpm lint # eslint with autofixNotes on faster local builds:
pnpm demo:rs) builds with the release-dev profile: the same opt-level = 3 runtime performance as release, but with incremental compilation and minimal debug info for much faster edit-rebuild cycles. Published builds should keep using --release.Cargo.toml — copy the [profile.release-dev] block there to get the same fast iteration.rust-lld on x86_64 Linux out of the box; see .cargo/config.toml for opt-in lld linking on other platforms and an opt-in sccache shared cache.Questions, showcases, and engine discussion happen on Discord. Issues and pull requests are welcome on GitHub.
Voxelize is an independent open-source project. It is not affiliated with, endorsed by, or connected to any commercial voxel game or its publishers.
No open issues yet, or sync has not completed.