dimforge/salva

2 and 3-dimensional fluid simulation library in Rust.

Rust

706

176 commits

updated Aug 8, 2026

See the code

See what people are saying

README

crates.io

crates.io (salva2d) crates.io (salva3d) Build status

Users guide | 2D Documentation | 3D Documentation | Discord


Salva is a 2 and 3-dimensional particle-based fluid simulation engine for games and animations. It uses nalgebra for vector/matrix math and can optionally interface with rapier for two-way coupling with rigid bodies, multibodies, and deformable bodies. 2D and 3D implementations both share (mostly) the same code!

Examples are available in the examples2d and examples3d directories. Because those demos are based on WASM and WebGl 1.0 they should work on most modern browsers. Feel free to ask for help and discuss features on the official discord.

Why the name Salva?

The name of this library is inspired from the famous surrealist artist Salvador Dalì. The logo of Salva is inspired from its renown painting The Persistence of Memory.

Features

  • Pressure resolution: DFSPH and IISPH.
  • Viscosity: DFSPH viscosity, Artificial viscosity, and XSPH viscosity.
  • Surface tension: WCSPH surface tension, and methods from He et al. 2014 and Akinci et al. 2013
  • Elasticity: method from Becker et al. 2009
  • Multiphase fluids: mix several fluids with different characteristics (densities, viscosities, etc.)
  • Optional two-way coupling with bodies from rapier.
  • WASM support

Running examples

cargo run --release -p examples2d --bin all_examples2
cargo run --release -p examples3d --bin all_examples3
animation
fluids
gamedev
pbf
physics
rust
sph

dimforge/salva

2 and 3-dimensional fluid simulation library in Rust.

Rust

706

176 commits

updated Aug 8, 2026

See the code

See what people are saying

README

crates.io

crates.io (salva2d) crates.io (salva3d) Build status

Users guide | 2D Documentation | 3D Documentation | Discord


Salva is a 2 and 3-dimensional particle-based fluid simulation engine for games and animations. It uses nalgebra for vector/matrix math and can optionally interface with rapier for two-way coupling with rigid bodies, multibodies, and deformable bodies. 2D and 3D implementations both share (mostly) the same code!

Examples are available in the examples2d and examples3d directories. Because those demos are based on WASM and WebGl 1.0 they should work on most modern browsers. Feel free to ask for help and discuss features on the official discord.

Why the name Salva?

The name of this library is inspired from the famous surrealist artist Salvador Dalì. The logo of Salva is inspired from its renown painting The Persistence of Memory.

Features

  • Pressure resolution: DFSPH and IISPH.
  • Viscosity: DFSPH viscosity, Artificial viscosity, and XSPH viscosity.
  • Surface tension: WCSPH surface tension, and methods from He et al. 2014 and Akinci et al. 2013
  • Elasticity: method from Becker et al. 2009
  • Multiphase fluids: mix several fluids with different characteristics (densities, viscosities, etc.)
  • Optional two-way coupling with bodies from rapier.
  • WASM support

Running examples

cargo run --release -p examples2d --bin all_examples2
cargo run --release -p examples3d --bin all_examples3
animation
fluids
gamedev
pbf
physics
rust
sph

Project health

Overall

3.7/10

Maintained

1/10

Code review

8/10
OpenSSF Scorecard

Significant stargazers

KOGA Mitsuhiro

109 followers · starred May 2025

Alba Mendez

571 followers · starred Aug 2025

Jan-Paul Bultmann

21 followers · starred Jul 2024

Stanislav Tkach

111 followers · starred Jan 2026