{{ t('systemUpdate.subtitle') }}
{{ t('common.version') }}
{{ $ver(currentVersion) }}
{{ t('systemUpdate.lastChecked') }}
{{ lastCheckDisplay }}
{{ t('common.status') }}
{{ statusLabel }}
Version {{ updateInfo.version }} — {{ updateInfo.release_date }}
Served by {{ manifestMirrorLabel }}
{{ t('systemUpdate.componentsToUpdate', { count: updateInfo.components }) }}
{{ t('systemUpdate.gitMethodHint') }}
{{ t('systemUpdate.upToDateMessage') }}
{{ downloadStalled ? t('systemUpdate.downloadStalled') : downloadFinishing ? t('systemUpdate.finishingDownload') : t('systemUpdate.percentComplete', { percent: downloadPercentFormatted }) }}
{{ t('systemUpdate.applyWarning') }}
{{ t('systemUpdate.subtitle') }}
Where this node fetches updates and apps. Stable origin is the known-good default. DHT swarm pulls content-addressed blobs from peers first and falls back to the origin automatically — use it to live-test the swarm; flip back any time.
This build doesn't include the swarm engine, so DHT mode currently behaves exactly like origin. A swarm-enabled build is required for true peer fetching.
Provide to the swarm
Let other nodes fetch updates and apps from this one (seeding). On by default so the network has providers. Turn off if this node shouldn't serve content to peers — it won't change how this node fetches.
Servers this node checks for updates. The primary is tried first; if it's slow or unreachable, the next one in the list is tried automatically. Downloads always come from the mirror that served the manifest — switching primary switches where files come from.
{{ m.label || `Mirror ${i + 1}` }}
PRIMARY{{ m.url }}
{{ t('systemUpdate.overlayTarget', { version: installTargetVersion }) }}
{{ installElapsedLabel }}
The URL should point directly at a manifest.json served by a Gitea mirror or equivalent. It's added to the end of the list; use "Make primary" to change order.
{{ confirmAction === 'rollback' ? t('systemUpdate.rollbackMessage') : confirmAction === 'git-apply' ? t('systemUpdate.gitApplyMessage') : confirmAction === 'cancel-download' ? t('systemUpdate.cancelDownloadConfirm') : t('systemUpdate.applyMessage') }}