Hosts · Electric Cherry
{#snippet actions()}{/snippet} {#if error}{/if} {#if notice}

{notice}

{/if} {#if canManage}

Add host

Run the installation command on a Debian 12 or 13 amd64 machine. Each host connects to this controller over HTTPS, then prepares its runtime and published game files automatically.

{#if enrollment}

Install the agent

This single-use command expires {new Date(enrollment.expiresAt).toLocaleString()}. Run it with administrator access on your game host.

{enrollment.command}
Open host setup →
{/if}
{:else}

Administrators enroll hosts and manage their settings and credentials.

{/if} {#if loading}

Loading hosts…

{:else if !hosts.length}

No hosts connected yet.{canManage ? ' Add a host to begin.' : ''}

{:else}
{#each hosts as host (host.id)}

{host.name}

{hostReadinessLabel(host.readiness)}

{host.hostname || 'Awaiting enrollment'} · {host.connectionState}

{host.inventory.os ?? 'OS pending'} · {host.inventory.architecture ?? 'Architecture pending'}

Game ports {host.portMin}–{host.portMax}

{#if host.enrolled}

Agent {host.inventory.agentVersion ?? 'unknown'} · Auto updates: {hostAgentUpdateLabel(host.inventory)}

{/if}{#if host.decommission}

{hostDeletionMessage(host)}

{#if host.decommission.error}

{host.decommission.error}

{/if}{:else}{#if host.preparation}

Automatic setup: {host.preparation.state === 'preparing' ? 'In progress' : host.preparation.state === 'blocked' ? 'Needs attention' : host.preparation.state === 'ready' ? 'Ready' : 'Waiting'}

{#if host.preparation.state === 'blocked'}

{host.preparation.items.find(item => item.state === 'blocked')?.detail}

{/if}{/if}{#if host.readinessReasons.length}

{host.readinessReasons[0]}

{/if}{/if}
{#if canManage && (!host.decommission || host.decommission.retryable)}{/if}
{/each}
{/if}