
Play
One developer's shelf of physics toys, and every one runs real simulation
Saharan's oimo.io works page is a grid of browser toys backed by actual numerics: SIMD water drops, GPGPU fur, MLS-MPM fluid, and a physics engine he wrote himself.
A water droplet rolls down the screen, meets another, and the two merge with that fat wobble real droplets have. That is the first toy. There is a whole wall of them.
oimo.io/works is the personal shelf of Saharan, a Japanese developer and competitive programmer, and it holds years of browser physics toys hung in a grid like paintings. Wet cloth you drag through water. A blob you fling around a room. Marimo balls with fur that parts under the cursor. A working digital clock whose numerals are soft bodies you can slap out of shape. Each one loads in a few seconds and runs at interactive rates on an ordinary laptop, with no installs, no accounts, and no video anywhere faking the motion.
the engine underneath is his too
Where most portfolio sites embed somebody else's physics library, this one embeds the author's. OimoPhysics is Saharan's own 3D engine: 954 stars on GitHub, MIT licensed, currently at version 1.2.5. Rigid bodies, a catalogue of joints, and collision detection organized as a bounding volume hierarchy, which is the trick where every object sits inside a box, boxes nest inside bigger boxes, and the engine discards thousands of impossible collision pairs by rejecting one parent box.
It is written in Haxe, a language whose whole purpose is compiling out to other languages, so a single engine codebase becomes the JavaScript your browser runs.
the workbench is public too
The toys are not sealed exhibits either. A repository called simply works holds the source of eight of them, Drops, Marimo, Life Universe, Bubbles, Jelly, Clock, Water and Chill, and at 1.5k stars it has quietly outgrown the 954-star engine it rides on.
The readme carries my favorite caveat in all of open source: he often lands breaking changes in his personal libraries, so do not always expect successful compilations. To build any of it you need Haxe 4.3.1 or later plus his personal libraries copied in from a separate repository. This is a working bench with sawdust on it, not a museum case.
The GitHub bio under all this, with 1.6 thousand followers reading it, is eleven words of shrug: a software engineer in Japan, sometimes making fun stuff at oimo.io. The shelf is the loud one in the relationship.
Keep pulling the thread and the tools underneath keep turning out to be homemade. When he needed shaders with type checking and completions, he built HGSL, his own shading language that compiles to GLSL ES 3.0 for WebGL 2, with inheritance and modularization GLSL never had, sitting at 156 stars. Somewhere on the same profile is GraphSynth, a node-based graphical synthesizer, at 248. The pattern holds at every layer: where most of us would reach for a library, he reaches for a compiler.
three different ways to cheat time
The individual toys each pick a different accelerator, and a showcase writeup on the collection names them.
Drops leans on WebAssembly SIMD, where one instruction performs the same arithmetic on four numbers at once. Droplet surfaces are thousands of near-identical sums, so four lanes is close to four times the water.
Marimo moves its fur onto the GPU with GPGPU: strand positions live in textures, and the graphics card advances every strand in the same pass instead of looping over them. I loaded it and counted the exposed controls: size, hair amount, hair length, hair volume, and a gravity direction you can push around in colour.
Water3D runs MLS-MPM, the material point method. Particles carry the water, a background grid resolves the forces between them each step, and the grid hands the result back to the particles, which is how the simulation gets sloshing and splashing without tracking every particle pair. The sliders expose surface tension, gravity and particle count.
That is a different lineage from the fragment-shader fluid sighted here before, which solves a velocity field across a fixed grid. These push the particles and let the water emerge from them. Life Universe abandons physics entirely for recursion: a Game of Life whose cells are themselves Games of Life, all the way down, a cousin of the continuous creatures from last week.
the same solver, other people's water
MLS-MPM is having a browser moment well past this shelf, and the siblings are worth their own afternoon. The method's appeal is the same everywhere: because particles talk to each other through the grid rather than directly, nobody has to run the expensive find-my-neighbors search that particle-only methods like SPH choke on, and the whole step parallelizes beautifully.
webgpu-ocean, by the developer behind the handle matsuoka-601, moves the whole method onto WebGPU compute shaders: around 100,000 particles in real time on integrated graphics and 300,000 on a decent GPU, with the water surface reconstructed by screen-space fluid rendering, a technique out of a GDC 2010 talk. The repo sits at 556 stars and the readme explains the ugly clever part, scattering particle data to the grid with atomicAdd and fixed-point encoding because floating-point atomics do not exist there yet.
Then it mutated. flow by holtsetio started, by its own readme's admission, as an MLS-MPM water clone of webgpu-ocean, drifted into Refik Anadol territory, and is now a particle system on the three.js WebGPURenderer that looks like a museum installation escaped into a tab.
And if the itch is to write one rather than watch one, the trailhead is nialltl's material point method guide: single-file examples building from moving particles to elastic blobs to a 40,000-particle fluid, self-described as hand-wavey, which is exactly the right altitude for a first implementation.
the door
Start at the shelf and lose the minutes you were always going to lose. Then open the OimoPhysics API documentation and see how one person organizes a world: bodies, shapes, joints, and a single step function ticking the whole thing forward. The toys are the demo reel. The engine is the resume.

Next up
The chip on screen is simulated, the firmware running on it is real