# bannerlord-coop-team/bannerlordcoop architecture

> Architecture diagram of the GitHub repository bannerlord-coop-team/bannerlordcoop, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bannerlord-coop-team/bannerlordcoop
- Repository: https://github.com/bannerlord-coop-team/bannerlordcoop

## Overview

Bannerlord Coop is a Bannerlord mod that turns the single-player campaign into a shared multiplayer campaign. The principal workflow is players joining a hosted session, synchronizing campaign state, and participating together in map activities and battles. Client and server services handle the multiplayer sides; GameInterface provides the game-integration layer, while Common supplies shared messaging and networking primitives. The README documents broad campaign capabilities, but most implementation excerpts concern siege-engine synchronization, so unverified subsystem links are omitted rather than inferred.

Main entry points: [`source/Common/Network/INetwork.cs`](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Common/Network/INetwork.cs) (Network contracts), [`source/Coop.Core/Client/Services/SiegeEngines/Handlers/ClientSiegeEngineHandler.cs`](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Client/Services/SiegeEngines/Handlers/ClientSiegeEngineHandler.cs) (Client siege handler), [`source/Coop.Core/Server/CoopServer.cs`](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Server/CoopServer.cs) (Server runtime), [`source/Coop.Core/Server/Services/SiegeEngines/Handlers/ServerSiegeEngineHandler.cs`](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Server/Services/SiegeEngines/Handlers/ServerSiegeEngineHandler.cs) (Server siege handler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_session["Session and connections"]
  node_hosting["Session hosting<br/>[Session]"]
  node_join["Join and connection<br/>[Session]"]
  node_connections["Server connections<br/>[ConnectionLogic.cs]"]
end

subgraph group_campaign["Shared campaign"]
  node_client["Client runtime<br/>[CoopClient.cs]"]
  node_campaignsync["Campaign synchronization<br/>[Services]"]
  node_world["Campaign world"]
  node_server["Server runtime<br/>[CoopServer.cs]"]
  node_serverdomains["Server campaign services<br/>[Services]"]
  node_clienthandlers["Client siege handler"]
  node_serverhandlers["Server siege handler"]
end

subgraph group_battles["Battles and missions"]
  node_battles["Battle synchronization"]
  node_naval["Naval battles<br/>[NavalShipEngine.cs]"]
  node_spectators["Tournament spectators"]
end

subgraph group_platform["Game integration"]
  node_gamepatches["Game patches"]
  node_objectmanager[("Object identity<br/>[ObjectManager.cs]")]
  node_gameinterface["Patch lifecycle<br/>[GameInterface.cs]"]
end

subgraph group_shared["Shared runtime"]
  node_messaging["Message broker<br/>[MessageBroker.cs]"]
  node_network["Network contracts<br/>[INetwork.cs]"]
  node_logging["Logging<br/>[LogManager.cs]"]
end

node_player(("Players"))

node_player -.->|"joins"| node_join
node_hosting -.->|"hosts"| node_server
node_join -.->|"starts"| node_client
node_client -.->|"synchronizes"| node_campaignsync
node_campaignsync -.->|"updates"| node_world
node_server -.->|"manages"| node_connections
node_server -.->|"coordinates"| node_serverdomains
node_serverdomains -.->|"shares"| node_world
node_world -.->|"supports"| node_battles
node_world -.->|"supports"| node_naval
node_gameinterface -->|"installs"| node_gamepatches
node_gamepatches -->|"publishes"| node_messaging
node_clienthandlers -->|"publishes"| node_messaging
node_clienthandlers -->|"sends requests"| node_network
node_serverhandlers -->|"broadcasts updates"| node_network
node_serverhandlers -->|"resolves objects"| node_objectmanager
node_battles -->|"broadcasts placements"| node_network
node_spectators -->|"sends join info"| node_network
node_naval -.->|"uses object access"| node_objectmanager
node_clienthandlers -.->|"logs"| node_logging

click node_hosting "https://github.com/bannerlord-coop-team/bannerlordcoop/tree/development/source/Coop.Core/Common/Session"
click node_join "https://github.com/bannerlord-coop-team/bannerlordcoop/tree/development/source/Coop.Core/Client/Services/Session"
click node_client "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Client/CoopClient.cs"
click node_campaignsync "https://github.com/bannerlord-coop-team/bannerlordcoop/tree/development/source/Coop.Core/Client/Services"
click node_server "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Server/CoopServer.cs"
click node_connections "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Server/Connections/ConnectionLogic.cs"
click node_serverdomains "https://github.com/bannerlord-coop-team/bannerlordcoop/tree/development/source/Coop.Core/Server/Services"
click node_battles "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Missions/Battles/SiegeEngineDeploymentReplicator.cs"
click node_naval "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Missions.Naval/NavalShipEngine.cs"
click node_spectators "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Missions/Tournaments/Spectators/TournamentSpectatorAgentManager.cs"
click node_gamepatches "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/GameInterface/Services/SiegeEngines/Patches/SiegeEnginesContainerPatches.cs"
click node_objectmanager "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/GameInterface/Services/ObjectManager/ObjectManager.cs"
click node_gameinterface "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/GameInterface/GameInterface.cs"
click node_clienthandlers "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Client/Services/SiegeEngines/Handlers/ClientSiegeEngineHandler.cs"
click node_serverhandlers "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Server/Services/SiegeEngines/Handlers/ServerSiegeEngineHandler.cs"
click node_messaging "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Common/Messaging/MessageBroker.cs"
click node_network "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Common/Network/INetwork.cs"
click node_logging "https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Common/Logging/LogManager.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_hosting,node_join,node_connections toneBlue
class node_client,node_campaignsync,node_world,node_server,node_serverdomains,node_clienthandlers,node_serverhandlers toneAmber
class node_battles,node_naval,node_spectators toneMint
class node_gamepatches,node_objectmanager,node_gameinterface toneRose
class node_messaging,node_network,node_logging,node_player toneIndigo
```

## Components

### Session and connections

- [Session hosting](https://github.com/bannerlord-coop-team/bannerlordcoop/tree/development/source/Coop.Core/Common/Session): `source/Coop.Core/Common/Session`
- [Join and connection](https://github.com/bannerlord-coop-team/bannerlordcoop/tree/development/source/Coop.Core/Client/Services/Session): `source/Coop.Core/Client/Services/Session`
- [Server connections](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Server/Connections/ConnectionLogic.cs): `source/Coop.Core/Server/Connections/ConnectionLogic.cs`

### Shared campaign

- [Client runtime](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Client/CoopClient.cs): `source/Coop.Core/Client/CoopClient.cs`
- [Campaign synchronization](https://github.com/bannerlord-coop-team/bannerlordcoop/tree/development/source/Coop.Core/Client/Services): `source/Coop.Core/Client/Services`
- **Campaign world**
- [Server runtime](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Server/CoopServer.cs): `source/Coop.Core/Server/CoopServer.cs`
- [Server campaign services](https://github.com/bannerlord-coop-team/bannerlordcoop/tree/development/source/Coop.Core/Server/Services): `source/Coop.Core/Server/Services`
- [Client siege handler](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Client/Services/SiegeEngines/Handlers/ClientSiegeEngineHandler.cs): `source/Coop.Core/Client/Services/SiegeEngines/Handlers/ClientSiegeEngineHandler.cs`
- [Server siege handler](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Coop.Core/Server/Services/SiegeEngines/Handlers/ServerSiegeEngineHandler.cs): `source/Coop.Core/Server/Services/SiegeEngines/Handlers/ServerSiegeEngineHandler.cs`

### Battles and missions

- [Battle synchronization](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Missions/Battles/SiegeEngineDeploymentReplicator.cs): `source/Missions/Battles/SiegeEngineDeploymentReplicator.cs`
- [Naval battles](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Missions.Naval/NavalShipEngine.cs): `source/Missions.Naval/NavalShipEngine.cs`
- [Tournament spectators](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Missions/Tournaments/Spectators/TournamentSpectatorAgentManager.cs): `source/Missions/Tournaments/Spectators/TournamentSpectatorAgentManager.cs`

### Game integration

- [Game patches](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/GameInterface/Services/SiegeEngines/Patches/SiegeEnginesContainerPatches.cs): `source/GameInterface/Services/SiegeEngines/Patches/SiegeEnginesContainerPatches.cs`
- [Object identity](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/GameInterface/Services/ObjectManager/ObjectManager.cs): `source/GameInterface/Services/ObjectManager/ObjectManager.cs`
- [Patch lifecycle](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/GameInterface/GameInterface.cs): `source/GameInterface/GameInterface.cs`

### Shared runtime

- [Message broker](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Common/Messaging/MessageBroker.cs): `source/Common/Messaging/MessageBroker.cs`
- [Network contracts](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Common/Network/INetwork.cs): `source/Common/Network/INetwork.cs`
- [Logging](https://github.com/bannerlord-coop-team/bannerlordcoop/blob/development/source/Common/Logging/LogManager.cs): `source/Common/Logging/LogManager.cs`

### Other components

- **Players**

## Connections

- Players → Join and connection: joins (evidence: `README.md`)
- Session hosting → Server runtime: hosts (evidence: `README.md`)
- Join and connection → Client runtime: starts
- Client runtime → Campaign synchronization: synchronizes (evidence: `README.md`)
- Campaign synchronization → Campaign world: updates (evidence: `README.md`)
- Server runtime → Server connections: manages
- Server runtime → Server campaign services: coordinates (evidence: `README.md`)
- Server campaign services → Campaign world: shares (evidence: `README.md`)
- Campaign world → Battle synchronization: supports (evidence: `README.md`)
- Campaign world → Naval battles: supports (evidence: `README.md`)
- Patch lifecycle → Game patches: installs (evidence: `source/GameInterface/GameInterface.cs`)
- Game patches → Message broker: publishes (evidence: `source/GameInterface/Services/SiegeEngines/Patches/SiegeEnginesContainerPatches.cs`)
- Client siege handler → Message broker: publishes (evidence: `source/Coop.Core/Client/Services/SiegeEngines/Handlers/ClientSiegeEngineHandler.cs`)
- Client siege handler → Network contracts: sends requests (evidence: `source/Coop.Core/Client/Services/SiegeEngines/Handlers/ClientSiegeEngineHandler.cs`)
- Server siege handler → Network contracts: broadcasts updates (evidence: `source/Coop.Core/Server/Services/SiegeEngines/Handlers/ServerSiegeEngineHandler.cs`)
- Server siege handler → Object identity: resolves objects (evidence: `source/Coop.Core/Server/Services/SiegeEngines/Handlers/ServerSiegeEngineHandler.cs`)
- Battle synchronization → Network contracts: broadcasts placements (evidence: `source/Missions/Battles/SiegeEngineDeploymentReplicator.cs`)
- Tournament spectators → Network contracts: sends join info (evidence: `source/Missions/Tournaments/Spectators/TournamentSpectatorAgentManager.cs`)
- Naval battles → Object identity: uses object access (evidence: `source/Missions.Naval/NavalShipEngine.cs`)
- Client siege handler → Logging: logs (evidence: `source/Coop.Core/Client/Services/SiegeEngines/Handlers/ClientSiegeEngineHandler.cs`)
