> For the complete documentation index, see [llms.txt](https://docs.coherence.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coherence.io/2.3/single-player-to-multiplayer.md).

# Why choose coherence?

Our main goal is to make multiplayer **accessible** for teams and individuals that wouldn't consider it otherwise because multiplayer is scary, expensive, requires dedicated expertise and overall is a risk you cannot take.

We know how it feels, because we're a bunch of gamedevs that have been there before.

This article explores what we bring to the table.

### Porting to multiplayer at any stage — including post-release

It is generally believed that converting an existing single-player game to multiplayer is next to impossible. We've proven this wrong time and time again. We've ported projects, small and big, from proof-of-concept within days, to finished full-blown multiplayer within a few months.

The following features help understand why it can happen when leveraging **coherence**.

### Composition, not inheritance

coherence networks GameObjects by adding a [CoherenceSync](/2.3/manual/components/coherence-sync.md) component — as simple as that. There is no need to derive your scripts from any base class, which is especially painful when your architecture already relies on your objects deriving from a base class of your choice.

<figure><img src="/files/g2MDrNFwzDAtx3DBVTYC" alt="" width="398"><figcaption></figcaption></figure>

### Sync what you already have

No `NetVars`, no custom serialization code. [Syncing variables](/2.3/getting-started/samples-and-tutorials/first-steps-tutorial/1-basic-syncing.md) is super easy. No code involved—choose what you want to sync, and you're good to go.

<figure><img src="/files/SlvoJeNHb9vIElthNkJ3" alt="" width="397"><figcaption></figcaption></figure>

This makes the transition to multiplayer smooth and quick, as you don't have to rewrite the networked components nor other parts of the codebase which rely on those variables.

### Instantiate and destroy as you usually would

No special calls like `netManager.Instantiate()` or `netManager.Destroy()` needed. We handle all the networking bits of the [object lifetime](/2.3/manual/networking-state-changes/instantiate-and-destroy-objects.md) behind the scenes so that you can focus on the fun stuff.

<figure><img src="/files/fKYEwj4aZYblP1bpRPT8" alt="" width="563"><figcaption></figcaption></figure>

### Use your prefabs in single-player and multiplayer

Due to our flexible [Component Actions](/2.3/getting-started/samples-and-tutorials/first-steps-tutorial/1-basic-syncing.md#component-actions) system, you can choose what should happen when a given component is used in multiplayer. This makes it trivial to reuse the same Prefab in both single-player and multiplayer modes. Got a PlayerController, which should be enabled only for your player and not remote ones? Easy-peasy. Need a RigidBody to be kinematic on the remote player? One click away.

<figure><img src="/files/dTtYr7zehnUC9hIr2hva" alt="" width="397"><figcaption></figcaption></figure>

### RPCs without branching

Whether online or offline, sending a [command](/2.3/manual/networking-state-changes/commands.md) will have the same effect. Due to our Authority system, this works even if the command would normally be received by another Client—in single-player, you have the [authority](/2.3/manual/networking-state-changes/authority.md) over all entities, and so the function will still be called. Neat!

```csharp
CoherenceSync sync;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        // Works both in single-player and multiplayer
        sync.SendCommand(SpawnFireworks, MessageTarget.All, transform.position);
    }
}

public void SpawnFireworks(Vector3 position)
{
    Instantiate(FireworkPrefab, position, Quaternion.identity);
}
```

### Effortless bandwidth optimization

Even if porting initially goes smoothly, you might soon discover that the game feels extremely laggy. This fabulous horde of zombies is using too much bandwidth; yikes! You're left with a choice - redesign the game to be less cool or spend precious hours on handcrafting bandwidth optimizations for your networked objects.

We give you a third choice—keep the game cool and [optimize](/2.3/manual/optimization/level-of-detail-lod.md) within minutes. Trim your floats, limit your ints, remove whole components for objects at a distance—all with just a few clicks in our network LODing system. You are in control of every single bit!

<figure><img src="/files/sUcCRiWvqjy0DuVo5QWU" alt=""><figcaption></figcaption></figure>

### Hierarchy and physics that *just work*

[Hierarchy](/2.3/manual/networking-state-changes/child-gameobjects.md) and [physics](/2.3/manual/networking-state-changes/rigid-bodies.md) are among the hardest elements to sync. We made sure you can be unbothered by them by making them work out-of-the-box.&#x20;

<figure><img src="/files/nNzUGuzG9bN4EgflYK0E" alt="" width="563"><figcaption></figcaption></figure>

### Built-in interpolation

Even with the best netcode in the world, interpolation is what makes the difference between a smooth multiplayer experience and a choppy, rubber-banding slide show. We prefer the former, and thus, we provide you with a solid, yet flexible, state-of-the-art interpolation system.

While position, rotation, and scale are interpolated by default, you can enable interpolation for any synced variable with just one click. Choose between different forms of interpolation, tweak settings, or provide your own.

<figure><img src="/files/qJgEgxqt17CzdmDKts0c" alt="" width="535"><figcaption></figcaption></figure>

### Quick iterations

Testing multiplayer can be extremely time-consuming, especially if it requires building a game client. Being mindful of this, we've made coherence compatible with [ParrelSync](/2.3/getting-started/setup-a-project/local-development/local-testing-via-parrelsync.md) and [Multiplayer Play Mode](/2.3/getting-started/setup-a-project/local-development/multiplayer-play-mode.md)  out-of-the-box. These two solutions let you run multiple editor instances of your project, so you can skip the build process.

It's also possible to [run multiple clients from within the same Unity editor](/2.3/manual/multiple-connections-within-a-game-instance.md), for an extremely fast prototyping worflow.

<figure><img src="/files/dlkLYaqbVseRh2g2rijF" alt="" width="563"><figcaption></figcaption></figure>

### Flexible topology

Games have different networking needs. Coop games are usually played with friends and rarely need cheat prevention. Some games require cross-play, and others need persistent, cheat-proof worlds hosted on game servers.

coherence doesn't force you into a single networking topology. We don't follow the traditional client-server formula. Due to our flexible authority system, you can adjust topology at any stage of development rather easily.

Why overspend on dedicated servers early on if you can start with [peer-to-peer](/2.3/hosting/client-hosting.md) at no infrastructure cost, test the waters, and move to a more secure option at any point?

{% embed url="<https://www.youtube.com/watch?v=EpIlyg164w8>" %}

### An infrastructure built for coherence

Alongside all the tools you get for Unity development, you can opt-in to use coherence Cloud. We offer a very generous free tier with no compromise.

coherence Cloud is tightly integrated within the editor tools, and grants you quick and cost-effective access to a backend infrastructure to host your game on, allowing for **cross-play**, easy scaling, and services such as [player accounts](/2.3/hosting/coherence-cloud/authentication-service-player-accounts.md), [lobbies](/2.3/hosting/coherence-cloud/game-services/lobbies.md) or [data storage](/2.3/hosting/coherence-cloud/game-services/cloud-storage.md).

This platform is also very useful in development stages, to get prototypes and ideas going among teams, and to organize playtest sessions with external users. We offer a game portal that hosts game builds to players — both web (playable from within the portal) and desktop builds (downloadable) gives zero-hassle access to your games, in a minutes-away deployment process.

### Give it a shot!

You're now ready to tackle your first try at networking your game with coherence. We have all the tutorials and resources you need, as [videos](/2.3/getting-started/video-tutorials.md) or interactive [step-by-step demos](/2.3/getting-started/samples-and-tutorials.md), whichever you prefer. Good luck!


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.coherence.io/2.3/single-player-to-multiplayer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
