diff --git a/public/assets/sunny.json b/public/assets/sunny.json
index 3eb59d48f..40cfc02a1 100644
--- a/public/assets/sunny.json
+++ b/public/assets/sunny.json
@@ -7,7 +7,7 @@
"attribution": "Protomaps © OpenStreetMap",
"type": "vector",
"tiles": [
- "https://127.0.0.1:1234/service-worker/offline-basemap/{z}-{x}-{y}.mvt?fallback=true"
+ "https://127.0.0.1:1234/service-worker/offline-basemap/{z}-{x}-{y}.mvt?fallback=true&auto=true"
],
"maxzoom": 15,
"minzoom": 0
diff --git a/src/service-worker/OfflineBasemapManager.ts b/src/service-worker/OfflineBasemapManager.ts
index a6b2a1f83..534d64af6 100644
--- a/src/service-worker/OfflineBasemapManager.ts
+++ b/src/service-worker/OfflineBasemapManager.ts
@@ -321,7 +321,18 @@ export class OfflineBasemapManager {
if (this.metaCached.length === 0) {
await this.updateCachedMeta()
}
- const area = this.determineArea(z, x, y)
+ let area = this.determineArea(z, x, y)
+
+ if (options?.autoInstall && !area) {
+ // We attempt to install the local files
+ const candidates = this.getInstallCandidates({ z, x, y })
+ for (const candidate of candidates) {
+ await this.installArea(candidate)
+ }
+ await this.updateCachedMeta()
+ area = this.determineArea(z, x, y)
+ }
+
if (!area) {
if (options?.fallback) {
return this.getFallback(z, x, y)