What this is

SimEngine is a battle simulator defined entirely by its content: units, skills, element channels and arena are declared, not coded. Identical inputs always produce an identical battle, which is what makes the three uses below practical.

What it is used for

Balancing a roster

Change one value and re-run the same fixture. Any difference in the result comes from that change, not from a different seed.

Sweeping a parameter

Run one battle across a range of values and read the curve. Sweeps run locally, at the speed of the machine running them.

Publishing a playable model

A published simulation model has an id. Callers send a spec against that id and receive a playback. No server code is involved.

Trying an idea before you build it

Describe an ability in a sentence and watch the fight it produces a moment later, without waiting for anyone to build it first.

The editor

The editor runs locally, so changing a value and running again is immediate. It checks the content before running it, and a failed check points at the exact field and names the published rule it broke, rather than failing the file as a whole.

Publishing a simulation model

Publishing is optional. An exported simulation model is uploaded from the account page and receives an id: random bits, immutable. Republishing issues a new id, so a distributed id continues to resolve to the model it was issued for.

Two credentials are involved and only one is secret. That separation is what makes an id safe to publish.

 what it sayssecret?
model idwhich simulator to run — intended to appear in public pagesno
API keywho is calling — it identifies an account, as a password doesyes

Determinism, and exactly what is proven

This is what is proven, and it is proven on every build. The same model at the same seed run twice answers byte-identical bytes — not similar, the same file — including across a reinstall of the model and repeated runs against one resident copy. A spread of seeds is asserted to answer battles that all differ, so an engine that ignored the seed would fail rather than pass for free. And the engine reads no environment variable at all — its own suite scans the sources for one — because a switch in a shell that quietly changed a battle would make every sentence above it worthless.

What is pinned: the template library. Every verified template's recorded runs are replayed on every build and must match exactly, so a change that moved every number consistently would fail there — though the playback bytes themselves are not pinned. No result on a platform other than the one you run it on is claimed here. Determinism is a per-platform claim until it is measured, and that measurement is not done.