rust-gamedev icon indicating copy to clipboard operation
rust-gamedev copied to clipboard

My curated list of cool/useful crates for game development.

Rust Gamedev

My curated list of cool/useful crates for game development. Crates often have strange names that are difficult to remember or do not make it obvious what they do. This repository is where I keep track of crates I've found that may be useful for certain problems or projects.

Crate Description
mint interoperability layer between math types of different graphics APIs
crunch space-efficient rectangle packer
delaunator triangulation of 2D points, good for mesh/collider gen, or any procedural stuff like that
arboard text/image clipboard support, useful for editors/etc. especially because of the image support
bincode very fast + compact binary serializer, output is nearly same size as in-memory structs, great for simple inline serialization
strum add lots of reflection to enums (names, count, enumerate over their values, etc.), great to remove boilerplate and prepare enums for in-editor dropdown support
glam my current favorite of the fast linear algebra (vectors, matrices, etc.) crates, designed for games/graphics, and has some SIMD-support
euc simple and to-the-point software renderer, good for debugging or tooling, and also as studying material
glow nice OpenGL bindings/wrapper
glsl glsl 450/460 parser, which creates a syntax tree out of opengl shader code, very simple to use and navigate
lyon very nice path tesselation library, for generating meshes from vector contours/paths
msdf generate multi-signed distance fields out of contours, good for generating + baking textures for fast, scalable fonts
rfd rust file-dialogs, useful for native save/load/etc. for editors and tooling
strsim "string simularity" metrics, useful for fuzzy text searching (eg. in an editor when you want to search assets/sprites/etc.)
ulid i like this for guid generation, which uses the ulid specification to generate 128-bit unique IDs that have nice string representations
wgpu extremely powerful+sophisticated web-gpu cross platform rendering library, can output to metal/vulkan/dx/wasm, has its own shader language. the whole deal, very good
naga great companion to wgpu, a shader parser that can parse and translate shaders. i've found it useful for evaluating shaders to automate some of the graphics code, as well as validating shaders' compatibility for engines/targets
winit the de-factor windowing library for rust, quite good compared to what i've used in any other language. feels very much like using SDL
thiserror my favorite library for creating error structs/enums with nice display implementations (reduces lots of boilerplate and can generate from-impls as well, etc.)
bytemuck library with traits/methods for making your structs readable/writable as byte arrays, useful for uploading them into graphics APIs like wgpu or opengl
memoffset nice companion to bytemuck, allows you to get memory offsets of struct fields, useful for setting up vertex attributes or uniform buffers for graphics APIs
gilrs gamepad input library, really great API, controller layout/bindings/event handling, and haptic support
image very full-featured image decoding library with support for lots of common formats
png the image crate is very large, so for merely PNG support, using this directly makes for a faster compile and smaller dependency footprint
approx floating point approximation, great for those times where pesky f32's are deciding to be never quite equal. should be used in place of direct equality checking as often possible
rand_xoshiro very nice random number generators, i specifically like SplitMix64 for being very simple, fast, and with a simple 64-bit state, but it has more sophisticated generators available as well
rusttype great for parsing and rasterizing opentype fonts and generating glyph sets for rendering.
palette provides type-correct color types and conversions (RGB, HSV, LAB, etc.)