Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time



Inspired by voxel-engine and voxel.js, this is a multiplayer sandbox (like Minecraft creative mode) implemented in WebGL with very few dependencies. Very much a work in progress.

Demo: (Google Chrome and Firefox 46+)

Project blog:

Preferred texture set:

Past textures provided by:

Player skins from:

Gameplay Features

  • Multiplayer, with maxogden, substack and viking skins
  • Block creation and destruction (batch operations via click-and-drag)
  • Jumping and flying
  • First-person, over-shoulder, third person camera views (these need some love, though)
  • Building materials and material picker dialog
  • Gamepad support (80% complete)
  • Adjustable draw distance (change it according to your GPU speed and memory)
  • World state is saved to files or mysql (install mysql npm module)

What I'm working on

  • Optimizations, always and forever
  • Point light sources and shadow mapping

Technical Features

  • Client and Server (ported bits from my voxel-client and voxel-server forks)
  • Simple physics engine for player movements
  • My own "horizonal merge" meshing algorithm
  • Sample world generators
  • Websocket connection for chat messages, player positions, world changes
  • Chunk data is fetched via AJAX and gzipped
  • Object pool to reduce memory allocations and garbage-collection pauses
  • voxel-highlight replacement
  • Uses hashlru for minimizing trips to the file-system or database for frequently requested chunks
  • Relatively flat architecture means it's easy to get a WebGL handle and the inverse camera matrix for drawing
  • All IO and chunk meshing is done in a web worker, which keeps the framerate very high
  • Directional lighting
  • Day and night cycle (still needs some love)

See it in action in the demo (Google Chrome or Firefox):

Or follow the installation instructions below to run it locally.


In terminal 1:

# git clone the repo into voxeling folder
cd /path/to/voxeling
# Download textures from (256x256 version)
# Extract to www/testbdcraft

# Generate combined texture file (cuts down on WebGL bindTexture calls)
# You'll need PHP with gd/imagemagick. Once I get node version working, you won't need PHP
cd scripts
# This generates www/textures.png and texture-offsets.js
php textures.php

npm install

# create folder for world chunks
mkdir -p chunks/your-world

# copy the default config and customize
cp config-example.js config.js
# Be sure to change websocketBindAddress to the address of the interface you want to listen on
# The server config key tells the browser where to connect for a websocket connection.
# Use the "wss://" protocol for secure websocket connection from the browser, "ws://" otherwise
# TODO: put note about server vs httpServer params in config
# Also sample Caddy config for running websocket through same domain assets are served through
vim config.js

# Build and bundle the client code into a single file
node node_modules/browserify/bin/cmd.js src/client.js -o www/bundle.js
# dO the same for the web worker code
node node_modules/browserify/bin/cmd.js src/client-worker.js -o www/client-worker.js

# start server
node src/server.js

In terminal 2:

cd /path/to/voxeling
# Start Caddy to serve the HTML, JavaScript, CSS and chunk files
caddy -conf ./third-party/Caddyfile

Now, point your browser to Read the introduction for controls and keybindings. Enjoy!




MIT License


Creative mode WebGL voxel game. Runs in Chrome, with multiplayer functionality and very few dependencies





No releases published


You can’t perform that action at this time.