# Overview

### What is a Simulator?

A **Simulation Server** or a **Simulator** is a version of the Game Client without the graphics ("headless client") optimized and configured to perform a server-side simulation of the Game World. When we say something is simulated on the server, we mean it is simulated on one or several Simulators.

{% hint style="success" %}
Simulators can also be independent from the game code. A Simulator could be a standalone application written in any language, including **C#,** **Go** or **C++** , for instance. We will post more information about how to achieve this here in the future. For now, if you would like to create a Simulator outside of Unity, please [contact our developer relations team](mailto:devrel@coherence.io).
{% endhint %}

### Why do you need a Simulator?

A Simulator can have various uses, including:

* Server-side simulation of game logic that cannot be tampered with
* Offloading processing from Game Clients
* Splitting up a large Game World with many Entities between them

Here are some examples of things a Simulator could be taking care of:

* Running all the important game logic
* Running NPC AI
* Simulating the player character (by receiving only inputs from the Clients through [Input Queues](https://docs.coherence.io/0.9/authority/input-queues))

### Associating Simulators with Rooms and Worlds

Although it is possible to upload many Simulator binaries with different versions of the **coherence** SDK and your game logic, currently our cloud services support associating one running Simulator per World or Room. This will be extended in the near future.

See [Room Simulators](https://docs.coherence.io/0.9/simulators/room-simulators) and [World Simulators](https://docs.coherence.io/0.9/simulators/world-simulators).
