Dockhand Logo {#if showEasterEgg}
Stop already, will you? Coming from r/selfhosted?
{/if}
Version {currentVersion}
{#if BUILD_BRANCH}
{BUILD_BRANCH}
{/if} {#if BUILD_COMMIT}
{BUILD_COMMIT.slice(0, 7)}{#if BUILD_DATE} ({formatBuildDate(BUILD_DATE)}){/if}
{/if} {#if serverUptime !== null}
Uptime {formatUptime(serverUptime)}
{/if}

{TAGLINES[taglineIndex]}

https://dockhand.pro
System information {#if loading}
Loading...
{:else if error}
{error}
{:else if systemInfo}
{#if systemInfo.docker}
Docker
Version {systemInfo.docker.version} | API {systemInfo.docker.apiVersion} | OS/Arch {systemInfo.docker.os}/{systemInfo.docker.arch}
Connection
{#if systemInfo.docker.connection.type === 'socket'} Unix Socket {systemInfo.docker.connection.socketPath} {:else if systemInfo.docker.connection.type === 'https'} HTTPS (TLS) {systemInfo.docker.connection.host}:{systemInfo.docker.connection.port} {:else} HTTP {systemInfo.docker.connection.host}:{systemInfo.docker.connection.port} {/if}
Host
Name {systemInfo.host.name} | CPUs {systemInfo.host.cpus} | Memory {formatBytes(systemInfo.host.memory)}
{/if}
Runtime
{#if systemInfo.runtime.bun} Bun {systemInfo.runtime.bun} {/if} | Platform {systemInfo.runtime.platform}/{systemInfo.runtime.arch} | Memory {formatBytes(systemInfo.runtime.memory.rss)}
{#if systemInfo.runtime.container.inContainer}
{systemInfo.runtime.container.runtime || 'Container'} {#if systemInfo.runtime.ownContainer} {systemInfo.runtime.ownContainer.image} {/if} {#if systemInfo.docker} | Docker {systemInfo.docker.version} {/if}
{/if}
Database
{#if systemInfo.database.type === 'PostgreSQL'} PostgreSQL {#if systemInfo.database.host} | {systemInfo.database.host}:{systemInfo.database.port} {/if} {:else} SQLite {/if}
{#if systemInfo.database.schemaVersion}
Schema {systemInfo.database.schemaVersion} {#if systemInfo.database.schemaDate} ({systemInfo.database.schemaDate}) {/if}
{/if}
{#if $licenseStore.licenseType === 'enterprise'} {:else if $licenseStore.licenseType === 'smb'} {:else} {/if} License
Edition {#if $licenseStore.licenseType === 'enterprise'} Enterprise {:else if $licenseStore.licenseType === 'smb'} SMB {:else} Community {/if} {#if $licenseStore.isLicensed && $licenseStore.licensedTo} | Licensed to {$licenseStore.licensedTo} {/if} | |
Submit issue or idea {#if !$licenseStore.isLicensed} | Buy me a coffee {/if}
{#if !$licenseStore.isLicensed}

Dockhand Community Edition is free and always will be. No strings attached. Like it? Fuel the dev with caffeine.

{/if}
{#if systemInfo.docker}
{systemInfo.stats.containers.total}
Containers
{systemInfo.stats.stacks}
Stacks
{systemInfo.stats.images}
Images
{systemInfo.stats.volumes}
Volumes
{systemInfo.stats.networks}
Networks
{/if}
{/if}
Release notes {changelog.length} Dependencies {dependencies.length}
{#if loadingChangelog}
Loading releases...
{:else if changelogError}
{changelogError}
{:else}
{#each changelog as release, index} {@const isExpanded = expandedReleases.has(index)}
toggleRelease(index)} >
{#if isExpanded} {:else} {/if} v{release.version} {#if index === 0} Latest {/if} {release.changes.length} changes
{formatChangelogDate(release.date)}
{#if isExpanded}
    {#each release.changes as change}
  • {#if change.type === 'feature'} New {:else if change.type === 'fix'} Fix {/if} {change.text}
  • {/each}
{release.imageTag}
{/if}
{/each}
{/if}
{#if loadingDeps}
Loading dependencies...
{:else if depsError}
{depsError}
{:else}
Package
Version
License
{#each filteredDeps as dep}
{dep.name}
{dep.version}
{dep.license}
{#if dep.repository} {/if}
{/each}
{/if}