Skip to content

LocalStorage Schema

Marco edited this page Oct 13, 2026 · 32 revisions

🇮🇱 עברית

Local storage schema

All application-owned browser keys use the navaid.* prefix. This page is a human-readable map; the complete enforceable registry is GDRIVE_SETTINGS_KEYS plus NOT_A_SYNCED_SETTING in tests/settings-sync-allowlist.spec.js, which scans current app source.

Main families

  • navaid.route, navaid.routes, navaid.view, navaid.layer — working route/library and map state. Not the language: nothing stores one any more, and a navaid.lang left by an older version is ignored — see Bilingual UI.
  • navaid.show*, opacity/size/color keys, navaid.navDataPrefix, navaid.imsPwx, navaid.sigwxOv, navaid.wxTime, and wind-field keys — active layer/display choices.
  • navaid.etd — the planned departure {date, time}, local, shared by the flight plan and the filing dialog. Device-local: a fact about one flight, not a setting. navaid.etaZulu — show times in UTC (synced).
  • navaid.fpl.<field>, navaid.aircraft, navaid.profileVS — flight-plan and aircraft profile values. aisEmail is device-local because it controls the filing destination; the user's replyTo may sync. The checkbox says so in place: ticking Sync settings too names the pilot details (name, licence, phone) and aircraft profile it uploads, since "settings" otherwise reads as layers and opacities.
  • navaid.ai.* — provider/model/key/base URL. Provider and model choices may sync when Sync settings too is enabled. API keys and the base URL stay device-local. A successful settings sync removes any API-key copy left in Drive by an older version — see AI Assistant.
  • navaid.*Pos, navaid.sec.*, collapse/hint/search state — device-local UI geometry and one-time presentation state. Language-specific widgets use families such as navaid.clockPos.<lang>.
  • navaid.settingsSyncedAt, navaid.settingsSnapshot, navaid.settingsSnapKeys, navaid.syncSettings — settings-sync bookkeeping.
  • navaid.gistCache — the last remote config seen on this device, applied at boot so the first frame is already configured (see Tuning Panel). Device-local: it is a copy of a remote file, refetched on every load.
  • navaid.magVarAuto, navaid.magVarManual — magnetic variation: automatic (World Magnetic Model) or the manual value, signed as the app uses it (magnetic = true + value, so -5 is 5°E). They outrank the gist, like navaid.defaultSpeed, and sync with Sync settings too.
  • navaid.pressureUnit — inHg or hPa. Synced with the other pilot settings.
  • navaid.altSource, navaid.brightness — altitude from GPS or barometer, and screen brightness. Device-local: whether a phone has a usable barometer, and how bright its screen should be in this cockpit, are facts about that phone.
  • navaid.offlinePacks — which charts and OpenFlightMaps areas this device keeps offline. Device-local: it describes storage on this device.
  • navaid.commFail — a comm failure in progress, with the route from before it, so it survives a reload or language switch. Device-local, cleared when it ends.
  • navaid.headingUp, navaid.gpsFollow — the in-flight map controls (heading-up orientation, follow lock). Per device, like the rest of the map state.
  • navaid.followMeSession, navaid.followMeCode — the live-share session (topic, key, aircraft code) and the code last typed. Never synced: the session is a capability to watch this aircraft right now, not a preference, and syncing it would put two devices on one topic and hand the key to every device on the account. See Follow me.
  • navaid.navlog — the flight planning form's own inputs: the met table, the compass card, and ONLY those settings the pilot typed over. Everything else is re-derived each time, which is what lets an untouched field elevation follow the route. Device-local and never synced: a met table from another day is worse than none. navaid.navlogPos is the window's position, like every other *Pos. See Flight planning form.
  • navaid.followVerified — the signing key this device has seen for each aircraft it has followed (up to 32), so a link with the verify key stripped out cannot downgrade a viewer that was already checking signatures. Never synced, for the same reason as the session below.
  • navaid.tourSeen — the map tour has played on this device. Device-local: a new phone gets the tour too.
  • navaid.notamModalSize — the size the NOTAM sheet was dragged to. Device-local geometry.
  • navaid.notamListPos, navaid.sigmetListPos, navaid.airmetListPos (each .en / .he) — where the NOTAM, SIGMET and AIRMET lists were dragged to. Device-local, like every *Pos.
  • navaid.inspSize — the inspector's size per kind of panel (waypoint, leg, airfield, bubble…). Device-local.
  • navaid.showSigmet, navaid.showAdc — the SIGMET map layer and the aerodrome-chart plate type. Synced with the other navaid.show* keys.
  • navaid.notamSeen — NOTAM ids this device has already been shown, with the time each was first seen, so the list can badge what is new. Marked on closing the sheet; entries older than notamSeenDays (90) are dropped. Device-local: it records what this pilot has read.
  • navaid.routeLibraryFilter — which half of the saved-route library is on screen (all / route / gps). A view choice made on this device while looking for something, not a setting worth carrying to another.
  • navaid.selected, navaid.fpOpen, navaid.openChartModal — session-only restoration keys. So are navaid.buildNoticeFor (which build this tab has already been told about) and navaid.apkReloadedForBuild (the once-per-build guard that stops an APK reload loop): both are per tab on purpose, so a page that cannot pick a new build up asks once rather than on every check.
  • navaid.otaInstalling — the bundle id the embedded iOS build is currently trying to install, so a bundle that does not come up is attempted once and then left alone. Device-local, and cleared as soon as the install succeeds. See Offline and PWA.

Settings-sync protocol

Drive settings use a separate app-data document from saved routes. null is a deletion tombstone; an absent key means no information. Timestamps are monotonic, snapshots use canonical allowlist order, first sync unions non-conflicting values, conflicts require a user decision, and applying a remote snapshot is all-or-nothing. API keys, destination endpoints, working route, route library, caches, and device geometry are excluded.

When adding a key, update code, the allowlist or device-local reason, and this page in the same PR.

NavAid · 🇮🇱 עברית

For pilots

For developers


🇮🇱 עברית

לטייסים

למפתחים


🌐 Live 🧪 Staging 📦 Repo 💡 Ideas / bugs

Clone this wiki locally