An air-gapped host installed from an artifact bundle could not use Easy
Setup at all, which defeated the point: the bundle had already put the app
images on disk.
Two independent faults.
The Wikipedia catalog was the only one of the page's four catalogs that
threw on a failed fetch rather than degrading, so GET /api/zim/wikipedia
returned 500 offline and the UI showed "An internal error occurred". It now
reads the manifest through CollectionManifestService like the curated
categories, maps and creator packs already do — refresh when reachable,
cached copy when not, empty list when neither. The second, laxer schema for
the same remote file is deleted; having two is what let the offline path
diverge in the first place.
Navigation and completion were gated on a blanket !isOnline check. Stepping
through the wizard needs nothing from the network, and installing an app
whose image is already in the local Docker daemon works air-gapped because
the install path skips the registry pull. The gate is now per-selection:
- The page reports which services have a local image, so offline the
capability cards offer exactly those and badge the rest "Needs internet"
rather than queuing an install that would fail mid-pull.
- Map regions, content tiers, creator packs, AI models and Wikipedia are
genuinely remote, so those steps stay unselectable — but they now say why
instead of leaving dead cards.
- Complete Setup is blocked offline only when a selection actually needs a
download, and names which ones.
The offline decision logic is a pure module with unit tests.
Two gaps found and documented rather than changed here: an AMD host still
can't install Ollama offline (the install swaps to ollama/ollama:rocm, which
--with-apps doesn't bundle), and remote Ollama can't be configured from the
wizard offline since its checkbox lives behind the AI capability card.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>