An authorable, deterministic combat simulation engine for your games and applications. Built AI-first, for you and your agents alike.
Invent a new combat system, or rebuild one. Tune it, share it, or run it on our cloud.



$20 every 30 days
Design a battle simulator and share models
Get the editorfrom $15 one-off
Use models to optimize roster and strategy
Get the packs*Usage limits apply. Prices shown don't include applicable tax. Prices and plans are subject to change at SimEngine's discretion.
It is the unit a cloud run is billed in: one deployed body simulated for one exported frame. Internally, and on every receipt and API response, that quantity is called a unit-tick — simken is simply the friendlier name for the same thing, and the two are always equal. Nothing is converted between them, because there is only one quantity.
It is the unit that predicts the work, which is why battles are not sold by the “simulation”: two runs that would both be described as one simulation can be thousands of times apart. The pricing page has the arithmetic and an estimator that takes a battle directly.
On the machine it runs on: completely. The same model at the same seed is re-run on every build — twice, across a reinstall, and repeatedly against one resident copy — and the playbacks are compared byte-identical, not similar, the same file. The engine reads no environment variable at all, so no switch in a shell can change a battle.
The shipped template library is pinned separately, and not to bytes. Every verified template is replayed on every build and must match. What is matched is each run's verdict, its events and its elapsed sim-seconds. And this is a claim about the machine it runs on: no result on another platform is claimed, because that has not been measured. The intro says exactly what is proven.
Yes, and the design suits it. Content is plain declarative JSON that the validator checks before anything runs, so a model can author or edit a simulation model and be told exactly where it is wrong — a refusal points at the failing field with a code from a published catalogue, and the accepted shapes are published documents.
Runs are equally scriptable: a published simulation model has an id, a sim-model spec is a JSON document posted against it, and the API is JSON over HTTPS with no SDK to install. Because the same inputs always produce the same bytes, a sweep or an optimisation loop measures the change that was made rather than the noise of a different seed — which is the property that makes automated tuning worth doing at all.