{#if server}

{server.name}

0}> {effectivePlayers ?? '—'}
players
{#if destroyError}

{destroyError}

{/if} {#if destroyWarnings.length > 0} {/if}
map {effectiveMap ?? '—'} {#if gametypeLabel(effectiveGametype)} mode {gametypeLabel(effectiveGametype)} {/if} {#if effectiveHealth !== 'online'} status {effectiveHealth} last seen {ago(effectiveSeen)} {/if}
{#if effectiveHealth !== 'online' && integrations}

RCON diagnostic

endpoint
{endpointLabel(effectiveEndpoint)}
RCON password
{integrations.rcon ? 'configured' : 'missing'}
Komodo
{integrations.komodo ? 'configured' : 'missing'}
timeout
{integrations.rconTimeoutMs}ms
{#if effectiveReason}
{effectiveReason} {errorDetail}
{rconFixHint(effectiveReason)}
{:else if effectiveErr}
error {effectiveErr}
{/if} {#if effectiveSnippet}
raw reply ({effectiveSnippet.split('\n').length - 1} lines)
{effectiveSnippet}
{/if} {#if effectiveEndpoint}
Send a fresh RCON getstatus to {effectiveEndpoint.host}:{effectiveEndpoint.port} now.
{/if} {#if rconProbe?.ok}
connected {rconProbe.status?.players ?? '?'} players {#if rconProbe.status?.map} · map {rconProbe.status.map}{/if} {#if rconProbe.status?.gametype} · {rconProbe.status.gametype}{/if}
{/if} {#if !effectiveEndpoint && integrations.komodo}
Ask Komodo for this server's UDP port now.
{/if}
Raw TCP reachability probe across candidate hosts.
{#if netDiagnosis} {#if netDiagnosis.ok && netDiagnosis.results} {#each netDiagnosis.results as r (r.label)} {/each}
trial resolved outcome elapsed detail
{r.label} {r.resolvedIp ?? '—'} {r.outcome} {r.elapsedMs}ms {r.detail ?? ''}
{#if netDiagnosis.config}
KOMODO_ADDRESS = {netDiagnosis.config.komodoAddress ?? '(unset)'}  ·  RCON_HOST = {netDiagnosis.config.rconHost}  ·  probe timeout = {netDiagnosis.config.probeTimeoutMs}ms
{/if} {:else}
error {netDiagnosis.error ?? 'network diagnostic failed'}
{/if} {/if} {#if komodoProbe} {#if komodoProbe.ok}
resolved Port {komodoProbe.port} cached to server row — RCON will retry on the next tick.
{#if komodoProbe.snippet}
show response snippet
{komodoProbe.snippet}
{/if} {:else}
{komodoProbe.reason} {komodoProbe.detail} {#if komodoProbe.httpStatus} · HTTP {komodoProbe.httpStatus}{/if}
{#if komodoProbe.url}
tried {komodoProbe.url}
{/if} {#if komodoProbe.reason}
{komodoFixHint(komodoProbe.reason, komodoProbe.httpStatus)}
{/if} {#if komodoProbe.snippet}
{komodoProbe.snippet}
{/if} {/if} {/if}
{/if}

Roster

Logs

Config

komodo
{server.komodo_type} · {server.komodo_name}
rcon override
{server.rcon_host ?? '(default)'}
game_port
{server.game_port ?? '(unresolved)'}
game
{server.game ?? '(unset)'}
map
{server.map ?? '(unset)'}
{#if server.held.length > 0}
held by beta
{server.held.map((h) => `${h.target} (beta ${h.betaId})`).join(', ')}
{/if}

Scripts on this server ({inventory.length})

{#if inventory.length === 0}

no scripts tracked — upload one from the Scripts page and open a beta to deploy it here

{:else}
{#each inventory as f (f.relPath)}
{f.relPath} {f.size}B {f.source ?? '—'} {f.sha256.slice(0, 12)}
{/each}
{/if}

Deployment history

{#if history.length === 0}

no deployments recorded on this server

{:else} {#each history as d (d.id)} {@const mine = d.servers.find((s) => s.server === name)!} {d.action} {mine.restart_state}{mine.players !== null && mine.players > 0 ? ` (${mine.players}p)` : ''} {mine.files_changed} file{mine.files_changed === 1 ? '' : 's'} {ago(d.started_at)} {#if mine.error}{mine.error}{/if} {/each} {/if}
{:else}

loading…

{/if}