A work-in-progress custom game engine built with WGPU

Interested in working with this project or volunteering to help? Get started here!
Contact Me
Have any questions or concerns? Don't hesitate to reach out!

Coming soon...

NIL is currently a work in progress, and this page will be updated once it reaches a testing phase.


Full Multi-threading

The application uses Rust's thread safety utilities to enable parallel processing of almost all game logic.


Model Instancing

WGPU provides a modern rendering pipeline that enables instancing of model geometry for a performance advantage.


Keyframe Animation

An animation buffer is used to interpolate positions and vertices of any on-screen object.

Open Source

Browse the source code, suggest changes, or develop it yourself!

Git Repo


After installing Rust, the project can be started with either make or cargo run.

Using make fps should display an FPS indicator, which can be useful for performance monitoring.


Files inside assets/ are iterated through recursively to generate the set of items used in the game. A file such as assets/nil/blocks/nullium.yml can be referenced in the codebase with the identifier "nil/blocks/nullium".

YAML format

Each YAML file must specify a default texture key, referencing a PNG texture, and a model key, referencing an OBJ model file.

Additional conditions can be added to these files to swap models or textures when the object is in a particular state.

model: nil/blocks/block
texture: nil/blocks/nullium

OBJ format

OBJ files can be exported from Blender. All vertex positions should be within the range of [-0.5..0.5].

Texture format

Emissive pixels

In this project, "emissive pixels" are defined as pixels which are not subject to any lighting effects (they do not actually emit any light). An emissive pixel can be created by setting its alpha channel to exactly 254.