Appearance {#if $authStore.authEnabled} These settings apply to the login page and as defaults. Personal preferences can be configured in your profile. {:else} Theme and font settings are global when authentication is disabled. {/if}
{ appSettings.setShowStoppedContainers(checked); toast.success(checked ? 'Stopped containers shown' : 'Stopped containers hidden'); }} disabled={!$canAccess('settings', 'edit')} />

Display stopped and exited containers in lists

{ appSettings.setHighlightUpdates(checked); toast.success(checked ? 'Update highlighting enabled' : 'Update highlighting disabled'); }} disabled={!$canAccess('settings', 'edit')} />

Highlight container rows in amber when updates are available

{ appSettings.setCompactPorts(checked); toast.success(checked ? 'Compact port display enabled' : 'Showing all ports'); }} disabled={!$canAccess('settings', 'edit')} />

Show first port with +N count instead of all ports

Shows internal container ports (from EXPOSE directives) that are not published to the host. These appear in the container list with an amber badge to distinguish them from published port mappings.

{ appSettings.setShowExposedPorts(checked); toast.success(checked ? 'Showing exposed ports in container list' : 'Exposed ports hidden from container list'); }} disabled={!$canAccess('settings', 'edit')} />

Display internal container ports in the container list grid

{ appSettings.setTimeFormat(newFormat as '12h' | '24h'); toast.success(`Time format set to ${newFormat === '12h' ? '12-hour (AM/PM)' : '24-hour'}`); }} disabled={!$canAccess('settings', 'edit')} />

Display timestamps in 12-hour (AM/PM) or 24-hour format

{ if (value) { appSettings.setDateFormat(value as DateFormat); toast.success(`Date format set to ${value}`); } }} disabled={!$canAccess('settings', 'edit')} > {dateFormat} {#each dateFormatOptions as option}
{option.label} {option.example}
{/each}

How dates are displayed throughout the app

{#if $authStore.authEnabled}

Personal theme preferences can be configured in your profile.

{/if}
Scheduling
{ appSettings.setDefaultTimezone(value); toast.success(`Default timezone set to ${value}`); }} class="w-[320px]" />

Default timezone for new environments. Used for scheduled tasks like auto-updates.

Confirmations
{ appSettings.setConfirmDestructive(checked); toast.success(checked ? 'Confirmations enabled' : 'Confirmations disabled'); }} disabled={!$canAccess('settings', 'edit')} />

Show confirmation dialogs before deleting resources

Logs & files
{logMaxLines.toLocaleString()} lines {#each logMaxLinesOptions as opt} {opt.label} {/each}

Maximum number of log lines kept per container panel. Older lines are dropped when the limit is exceeded.

{ appSettings.setDownloadFormat(newFormat as DownloadFormat); toast.success(`Download format set to ${newFormat}`); }} disabled={!$canAccess('settings', 'edit')} />

Archive format when downloading files from containers

{ appSettings.setFormatLogTimestamps(checked); toast.success(checked ? 'Log timestamp formatting enabled' : 'Log timestamp formatting disabled'); }} disabled={!$canAccess('settings', 'edit')} />

Convert ISO timestamps in logs to your configured date/time format

Docker logs use UTC timestamps by default. When enabled, timestamps like 2026-01-12T07:47:44Z are converted to local time using your date/time settings.

Compose template

Default YAML content when creating a new stack.

{ composeTemplateWIP = v; }} language="yaml" readonly={!$canAccess('settings', 'edit')} class="h-full rounded-md overflow-hidden border border-zinc-200 dark:border-zinc-700" />
{#if $canAccess('settings', 'edit')}
{/if}
Vulnerability scanners

Docker image for Grype scanner. Pin to a specific version for supply chain security.

Docker image for Trivy scanner. Pin to a specific version for supply chain security.

Use {'{image}'} as placeholder for the image name

Use {'{image}'} as placeholder for the image name

Scanner cache

Remove cached vulnerability databases to free disk space. Next scan will re-download fresh data (~200MB).

System jobs

Stream: Continuous event stream from Docker, instant notifications, higher CPU usage
Poll: Periodic checks for new events, slight notification delay, lower CPU usage

every v && handleEventPollIntervalChange({ value: parseInt(v) })} disabled={!$canAccess('settings', 'edit') || (eventCollectionMode || 'stream') !== 'poll'} > {(eventPollInterval || 60000) === 30000 ? '30s' : (eventPollInterval || 60000) === 60000 ? '60s' : (eventPollInterval || 60000) === 120000 ? '120s' : '300s'} 30s 60s 120s 300s

How often to collect CPU/memory metrics from running containers. Lower intervals provide more frequent updates but increase CPU usage.

v && handleMetricsIntervalChange({ value: parseInt(v) })} disabled={!$canAccess('settings', 'edit')} > {(metricsCollectionInterval || 30000) === 10000 ? '10s' : (metricsCollectionInterval || 30000) === 30000 ? '30s' : (metricsCollectionInterval || 30000) === 60000 ? '60s' : '120s'} 10s 30s 60s 120s

Delete executions older than specified days

days

Delete events older than specified days

days
Always enabled

Automatically removes temporary containers used for browsing volume contents. Runs every 30 minutes and on startup.

Remove cached vulnerability databases to reclaim disk space

Dashboard

Controls how multiple selected labels filter environments on the dashboard. "Any": shows environments that have at least one of the selected labels. "All": shows only environments that have every selected label.

appSettings.setLabelFilterMode(mode as LabelFilterMode)} disabled={!$canAccess('settings', 'edit')} />