Pixel physics in 2D and 3D.
A falling-sand sandbox built entirely with Geometry Nodes. Pour sand, water, oil and lava, set fires and dissolve stone with acid, in a 2D pixel canvas or a 3D voxel box. No add-on, no Python: open the .blend and press Play.
Brushes are ordinary objects with an FS Emitter modifier. Press Play, select one and move it with G: it paints its element into the simulation as you go.

Each element has its own density and behaviour, and they interact: lava boils water and cools into stone, fire spreads through wood, oil and gunpowder, acid eats away the ground.

The 3D version runs the same rules on a voxel box: sand piles up in every direction, water and oil spread and level out in X and Y, smoke and steam rise.

Two collections drive each simulation. Objects in Level are stamped in on the first frame; objects in Emitters emit every frame.

Movement uses 2×2 block rules, so every move is a swap and nothing gets lost or duplicated. The rules run only where something can change, and the look-up tables live in a small point cloud instead of big switch nodes.
Simulation time per frame in Blender 5.2 on a Ryzen 9 7950X, measured without the viewport. Blender 4.5 is about 10–15% slower. Drawing the viewport comes on top and depends on your GPU.
The whole simulation is a node tree: a Simulation Zone holds the state, a Repeat Zone runs the sub-steps, and readable node groups do the rest. Nothing is hidden in Python and nothing has to be installed.

Press Play, paint with brushes, switch elements in the modifier, set things on fire.
Everything you need to know is in the documentation.