A Rubik's Cube which I made in WebAssembly so I could learn how to render 3D objects with WebGL. To prevent glitchy animations from pressing the buttons way too fast, I made it so animations are queued up and executed asynchronously, in such a way that they run in parallel where possible, and sequentially when they would conflict with each other.
Drag on the canvas to rotate the cube, and use the buttons or keyboard keys to make a move. Hold Shift to make anti-clockwise moves. The bottom row of buttons preforms some algorithms which look best when the cube is in a solved position.