Utomata

An instrument for field-based computation.

#Fields compute.
~Formations project.
^Viewports render.

Utomata runs parallel systems of interacting units that update as you type.

Explore procedural and emergent systems

Utomata’s field-based computational model can enact — and combine — a wide range of algorithms.

Run hardware accelerated experiments

Explore large parallel systems in realtime, test behavior quickly, and run simulations at high update rates.

Make systems, not software.

Programs are tiny. And the entire language fits in a single A4 spread.

Make systems, not software.

Batch your work offline

Deterministic and scriptable. Automate experiments, explore seeded systems, sweep parameters, import and export structured run data.

Share your work online

Utomata works anywhere WebGPU is available. Export a project as a standalone webpage or publish it on uto.run.

////////////////////////////////////////////////
// particles-bounce
// simple 3D particle system
////////////////////////////////////////////////
&dim = (128, 128);
// per-channel boolean for crossing the bounds
&hit = lrg(abs(add(#positions, #velocities)), 1.0);

#colors{
   dim = (8);
   set = rand(1,2,3);
} 

#positions {
   dim = &dim;
   set = srand(4,5,6); // initial random position
   run = add(#, #velocities); // move each particle
}

#velocities {
   dim = &dim;
   set = mlt(srand(7,8,9), 0.003);  // random initial velocity
   run = mlt(#, sub(1, mlt(&hit, 2))); // flip on wall hit
}

~particles {
   dim = &dim; 
   shape = ICO;
   col = #colors;
   i_pos = #positions;
   i_scl = (0.75);
}

Status

The Utomata JavaScript/WebGPU library is scheduled for open source release under MPL 2.0 on 1 January 2027.

The desktop authoring environment is in public beta and available from the Download page.

Utomata is in active development. Pull requests are not currently accepted; bug reports, questions and feedback are welcome.

Read More

Issues / contact →