#wgsl-shader #wgpu #minify #gamedev #graphics #shader #wgsl

bin+lib wgsl-minifier

A command-line tool for minifying WGSL shaders

11 releases (6 breaking)

new 0.7.0 Apr 10, 2025
0.6.0 Aug 15, 2024
0.5.0 Jun 22, 2024
0.4.1 Mar 11, 2024
0.3.2 Nov 20, 2023

#1305 in Game dev

Download history 10/week @ 2025-01-01 48/week @ 2025-01-08 72/week @ 2025-01-15 4/week @ 2025-01-29 21/week @ 2025-02-05 69/week @ 2025-02-12 8/week @ 2025-02-19 46/week @ 2025-02-26 9/week @ 2025-03-05 10/week @ 2025-03-12 96/week @ 2025-03-19 38/week @ 2025-03-26 240/week @ 2025-04-02 203/week @ 2025-04-09

579 downloads per month
Used in 4 crates (2 directly)

MIT license

17KB
312 lines

WGSL Minifier

crates.io docs.rs crates.io

A small tool built on top of Naga that makes WGSL shaders smaller by performing simple dead code elimination, stripping names of non-exported functions and local variables, and removing as much whitespace as possible.

Usage

To minify your WGSL shader, simply run the following:

cargo install --features 'bin' wgsl-minifier
wgsl-minifier path/to/your/shader.wgsl path/to/minified/output.wgsl

As a library

To use this crate as a library, for example in a game engine or larger preprocessor, two calls must be made. The first strips identifiers to smaller ones where possible. The second removes unnecessary whitespace, commas, and parentheses in a source string:

let mut module = /* your source here, or */ naga::Module::default();

// Now minify!
wgsl_minifier::minify_module(&mut module);

// Write to WGSL string
let mut validator = naga::valid::Validator::new(
    naga::valid::ValidationFlags::all(),
    naga::valid::Capabilities::all(),
);
let info = validator.validate(&module).unwrap();
let output = naga::back::wgsl::write_string(&module, &info, naga::back::wgsl::WriterFlags::empty()).unwrap();

// Minify string
let output = wgsl_minifier::minify_wgsl_source(&output);

Dependencies

~7–14MB
~176K SLoC