terminalCode Example

Multiplayer and Networking

calendar_today May 3, 2026 schedule ~1 min read person patrickjr verified 50

Complete guide to multiplayer setup in s&box.

Creating a Lobby

CSHARP
Networking.CreateLobby(new LobbyConfig()
{
    MaxPlayers = 8,
    Privacy = LobbyPrivacy.Public,
    Name = "My Game Server"
});

Joining a Lobby

CSHARP
// Query lobbies
var lobbies = await Networking.QueryLobbies();

// Join by ID
Networking.Connect(lobbyId);

Spawning Networked Players

CSHARP
public class GameManager : Component, INetworkListener
{
    [Property] public GameObject PlayerPrefab { get; set; }
    [Property] public Transform[] SpawnPoints { get; set; }

    void INetworkListener.OnActive(Connection channel)
    {
        if (!Networking.IsHost) return;
        
        var spawn = SpawnPoints[Random.Shared.Next(SpawnPoints.Length)];
        var player = PlayerPrefab.Clone(spawn.WorldPosition);
        
        // Spawn for specific connection
        player.NetworkSpawn(channel.SteamId);
    }
}

Host/Client Checks

CSHARP
if (Networking.IsHost)
{
    // Server-side only code
}

if (Networking.IsClient)
{
    // Client-side only code
}

// Check if running in multiplayer
if (Networking.IsActive)
{
    // Any network mode
}

Connection Events

CSHARP
public class NetworkManager : Component, INetworkListener
{
    void INetworkListener.OnActive(Connection channel)
    {
        Log.Info($"Player joined: {channel.DisplayName}");
    }

    void INetworkListener.OnDisconnected(Connection channel, Connection.Reason reason)
    {
        Log.Info($"Player left: {channel.DisplayName}");
    }
}

Networked Object Spawning

CSHARP
void SpawnProjectile()
{
    var projectile = ProjectilePrefab.Clone(WorldPosition);
    projectile.WorldRotation = WorldRotation;
    
    // Spawn for all clients
    projectile.NetworkSpawn();
    
    // Set velocity if Rigidbody exists
    if (projectile.Components.TryGet<Rigidbody>(out var rb))
    {
        rb.Velocity = WorldRotation.Forward * 1000f;
    }
}

Testing Multiplayer

Use F5 → Multiplayer Preview to test locally with multiple clients.

Was this helpful?