Repository navigation
Features
🇮🇱 עברית
A guided tour of what NavAid can do, organised by toolbar section.

The toolbar (top-left, draggable) is grouped into collapsible sections:
| Section | Purpose |
|---|---|
| Edit | Add waypoint, add note, search, reverse, undo, clear, fit, reset all marker positions, reset all waypoint names |
| Map | Base layer, Show Nav-WP / Show Airfields / Show VOR stations + VOR ref / Show/Add Freq Changes, Show cumulative time, Show drift lines, Show mandatory reports, hotspots, Force snap, magnifier, Show leg dist, Highlight diff |
| Display | Light mode (default), label transparency, map opacity, waypoint size, leg arrow size, leg line width, drift line width |
| Flight plan | Opens the flight plan table (+ CSV export) — see Flight Plan |
| Charts | Route templates, flight planning form, airport approach charts viewer, SIGWX charts, wind/temp charts, SIGMET and AIRMET lists, route check, NOTAM list, LSA bubbles (Low Alt), offline CVFR |
| Extra layers | Show NOTAMs (areas/lines/badges, decoded text, timeline), Show AIRMETs, Show SIGMETs, wind effect + field, Show wind/temp (PWX, FL030–FL180), Show SIGWX, airfield plates (incl. the aerodrome chart), IFR chart, traffic, NavAid pilots, terrain, airspace, Show LSA bubbles (Low Alt) — see Extra layers |
| Export/import | Export / import JSON / GPX / PLN, |
| A3 / A4 page frame + ▭/▯ orientation toggle + Save PNG | |
| Settings | Language, default speed, magnetic variation, pressure unit, altitude from (GPS / barometer + QNH), frequency-defaults table, altitude-pairs table, the tour, screen brightness and Bluetooth GPS (APK), app version |
| Simulator (✈) | Footer ✈ icon → panel: live aircraft from SimConnect bridge, heading-rotated icon, Connect / Follow / Center — see Simulator Connect |
| GPS | ⏺ Record / ⏹ Stop, 📍 Location (on a phone, tabs in the bottom bar) — see GPS track recording |
The language picker (🌐) sits above the sections; it's a quick toggle, not part of any section.
Below the sections you'll see live totals — Waypoints, Legs, Distance, Total time — and the app version.
- Add Waypoint — click the map to drop a numbered waypoint; legs are drawn between them automatically.
- Edit — with no mode active, click or drag any existing waypoint, leg, or note to select it; the inspector opens on the right.
-
Split leg — double-click a route leg to insert a blank
WP #waypoint at that exact coordinate. The original leg's speed, altitude pair, return / one-way flags and per-leg VOR reference are copied to both new legs. - Reverse Route — invert direction. Each leg's altitude pair swaps and waypoint name text is rotated 180° so a chart held the other way still reads upright.
- Snap to published points - drop or drag a waypoint near a published Israeli VFR reporting point or airfield and NavAid snaps it to the exact coordinates. Airfields adopt the ICAO code; nav-waypoints adopt the localized name.
- Fit — frame the entire route in the visible area.
- Clear map — remove all waypoints and notes (with a confirmation prompt).
- ↶ Undo (Ctrl-Z) — step back the last edit, move, or delete.
- ↺ Reset all marker positions — return every leg's info-marker offset (heading / altitude / time kite) to its default spot.
- ↺ Reset all waypoint names — set each name to its nearest reference point, or clear it when off-grid.
- 🔍 Magnifier (M) — see Magnifier below.
-
Go to coordinates — click the bottom-right coordinate readout and type or paste a coordinate (e.g.
32°00'17"N 34°43'38"E, or plain decimals) to recentre the map there.
- Add Note — drop a free-text annotation box at the click point.
- Inspector lets you change the shape (rectangle or oval), colour, and text.
- Notes can be dragged anywhere; their colour follows the same yellow-with-opacity styling as label backgrounds, or you can pick a custom colour.
- CVFR (default) — Israeli combined VFR chart from flight-maps.com.
- CVFR (AIP) — the same chart, cut from the CAA's own two vector CVFR sheets, so it keeps the leg distances, magnetic tracks and altitude flags the extracted set drops. Ours, on our own tile mirror.
- Navigation, Low Alt — additional flight-maps.com chart series. (Helicopters is built but not offered on the live site; see Map Layers.)
- Satellite (Esri) — World Imagery.
- OpenStreetMap.
The selected layer is remembered across reloads. See Map Layers for details.
- Show Navigation Waypoints overlays 170 active Israeli VFR reporting points, each with Hebrew + English names, in the CVFR chart's symbols: ▲ filled = compulsory reporting point, △ open = on request.
- Show Airfields overlays 27 published Israeli airfields as the CVFR chart's legend draws them: a civil field is its runways outlined in blue (one outline per runway, along its designator) with the ARP ⊕ at the centre, or the ⊕ alone where no runways are listed; a military field is ◎. Runway lengths are not in the data, so the outlines are a fixed size.
- Show mandatory reports puts a small ▲ beside each compulsory point that is otherwise hidden (a route waypoint on it, or the waypoint layer off).
- Show VOR stations overlays Israeli VOR/DME stations. The adjacent VOR ref selector chooses the reference used for radial/DME readouts, and stays available even when station markers are hidden.
- Show/Add Freq Changes marks known ATC-change reporting points: matching route waypoints get editable lightning callouts with call sign and frequency text.
- The Legend sits as a floating Leaflet control (bottom-left): airfield, military airfield, compulsory and on-request reporting points, hotspot and VOR station. Its swatches are drawn by the same code as the map symbols; in dark mode each sits on a light chip.
- Labels appear at higher zoom; below that you see only the symbol.
- A placed waypoint hides any nav-waypoint or airfield marker sharing its position (proximity-based, so it still works after rename).
- The search opens as a floating overlay (top-center) — press Ctrl-F / Cmd-F anywhere, or click the 🔍 Find button in the Edit menu. Matches nav-waypoint Hebrew / English names and airfield ICAO / English / Hebrew labels; the 12-result budget is split 6/6 between airfields and nav-WPs. Enter jumps to the first match; Escape closes.
- The search also takes a coordinate, and opens the inspector on it: decimal (
32.5, 35.0), degrees and minutes (N32 30 E035 00), seconds (N32 30 30 E035 00 30), either order (E035 00 N32 30), a minus sign instead of a hemisphere, and the packed ICAO form a flight plan carries (3230N03500E). The map flies there, leaves the go-to marker, and the inspector shows where the point falls, the VOR radial it sits on, and the same ➕ Add to route every chart point has. The whole box is read as one coordinate before the space-separated route syntax below, soN32 30 E035 00is a place rather than four waypoints. - Snap-on-drop and snap-on-drag use both datasets; airfields take priority when both are nearby. Force snap toggle (Map menu) makes every click snap to the absolute nearest known point regardless of distance.

See Nav-waypoints dataset and Airfields dataset for source / update procedures.
Selecting a VOR ref enables radial/DME readouts across the app:
- a separate bottom-right VOR readout follows the mouse or map centre;
- waypoint, nav-waypoint and airfield inspectors show a "From
<VOR>" radial/DME row; - the Flight Plan table shows Radial and DME columns, calculated to each leg's start point;
- individual flight-plan legs can override the global VOR reference.
The VOR station overlay is only for showing markers. Radial/DME readouts continue to work when Show VOR stations is off. See VOR and Radial/DME.
Frequency changes use the active docs/data/<prefix>-route-graph.json: a
call-sign catalog plus a per-waypoint list of allowed call signs. Deleted
callouts survive reload through route-level suppression tracking.
The frequency input is validated to the 118 – 136.975 MHz band, and the 📡 Freq table button in the Settings section opens a searchable editor for local frequency defaults: override any call sign's frequency (persisted in localStorage, applied everywhere it is used), reset a single row, or Restore originals to clear all overrides.
Frequencies a NOTAM changed are applied automatically. When the FIR feed carries a NOTAM that states a new tower or clearance frequency in so many words, that frequency becomes the one NavAid offers — in the waypoint's comm-change, the Freq column, the map callouts and the airfield panel alike — and the control is ringed red, with the NOTAM id and the published value in its tooltip. Reset returns to the NOTAM frequency, not the superseded one. Nothing is stored: when the NOTAM leaves the feed the frequency goes back to the AIP's on its own. A NOTAM that merely mentions a frequency without stating a new one is never parsed and still raises the ⚠ pointer badge instead.
See Frequency Changes for the full behavior.
The 🗺️ Charts button in the Charts menu opens a standalone modal listing every airfield that has published charts. Each airfield is a collapsible section; expand it to see chips grouped by category. No waypoint needs to be selected.
Click a waypoint whose name matches an airfield ICAO code (e.g. LLBG, LLHA). If that airfield has published charts in the BYOP dataset, the inspector shows a Charts section with chips grouped by category:
| Category | Meaning |
|---|---|
| Approach | Instrument approach plates (ILS, LOC, VOR, NDB per runway) |
| SID | Standard Instrument Departures |
| STAR | Standard Terminal Arrivals |
| Ground | Ground movement / parking diagrams |
| VFR / Airport | VFR aerodrome chart, circuit pattern, text info |
| Other | ATC / SMAC documents, misc |
Click any chip to open the PDF in a full-screen modal viewer:
- Close (or Esc) — dismiss the viewer and return to the inspector.
- Download — save the PDF locally.
- Open in new tab — open the PDF in a separate browser tab.
The PDFs are served from GitHub Pages CDN (docs/byop/) and rendered in the browser's built-in PDF viewer. Charts are © CAAI / Ministry of Transport.

The View section has toggle switches that apply to every leg:
-
Show return path — also draws the outbound (reverse-direction) tick / arrow. Off by default — the feature ships disabled; set
featureShowReturnin the tuning gist to restore it. In its place, 🧭 Route direction picks which direction's kites to draw once the route has a turning point. - Show leg dist — yellow distance badge in the middle of each leg.
- Highlight diff — purple halo on legs whose altitude OR speed differs from the adjacent leg, marking climb / descent / acceleration points.
- Show cumulative time — a running total-flight-time kite after each leg.
- Show drift lines — 10° drift reference lines at each leg end (thickness set by the Drift line width slider).
- Show mandatory reports — badges route waypoints that are mandatory (חובה) reporting points; the inspector also flags mandatory vs on-request points.
- Force snap — every click snaps to the nearest airfield or nav-waypoint regardless of distance (otherwise snapping uses an 18 px radius).
The 🔍 Magnifying glass (toolbar button or the M key) opens a loupe — a zoomed-in view of the map that follows the cursor, useful for reading dense chart labels. While it's open, + / − adjust the loupe zoom factor; the Magnifier settings panel exposes the same zoom control. Press M again to close.
The 🧭 Templates button in the Charts section opens a list of ready-made routes (from data/route-templates.json). Pick one, set a cruise speed, and Build route replaces the current route with the template (with a confirmation prompt if a route already exists).
A template carries no frequency changes of its own: its callouts are seeded from the chart's
comm-change points exactly as for a route you draw (see Frequency Changes),
so they always match the CVFR map. A template can still skip chart points its route deliberately
passes without calling (commChangeSuppressions).
- Light mode — switch the toolbar and panels to a light theme (persisted).
- Show Waypoint names — when off, waypoints render as plain numbered circles. When on, the name (or the sequence number if no name set) is drawn inside the circle. Snapped nav waypoints carry their published name automatically.
- ⟳ — rotate all waypoint name labels 90° (useful if you want labels reading along the route).
- Label Transparency slider - opacity of every label background.
- Map opacity slider - base map brightness on screen and in PNG export.
- Waypoint size slider — waypoint name / number font + circle size.
- Leg arrow size slider — size of each leg's info marker (heading / altitude / time).
- Leg line width slider — route line thickness.
- Drift line width slider — thickness of the 10° drift reference lines (when Show drift lines is on).
-
Magnetic variation (Settings, under the default speed): Automatic or Manual, on one row. Automatic uses the World Magnetic Model 2025 (NOAA/BGS, computed offline in the app) at the aircraft when a position is live, else the middle of the route, else the map centre — 5°E over Israel, the charts' value; about 10°W in Iceland. The fields show the value in force, in whole degrees, read-only in Automatic; switching to Manual starts from it. Every magnetic number in the app — the data strip, the heading-up button, the dial, the leg and plan headings, the nav log — uses it. Gist defaults:
magVarAuto,magneticVariationDeg. - Pressure unit (Settings): inHg or hPa for the QNH on the strip, the first of the two scales on METAR and airfield lines, and the cabin pressure. Altitude from: GPS or Barometer + QNH (Android app; reads what the altimeter reads, falls back to GPS). See Toolbar.
-
Hidden tuning panel — add
?tune=1to preview every drawing constant. See Tuning Panel.
A small compass dial sits next to the zoom buttons (Google-Earth-style).
- Drag the dial — set any bearing.
- Tap the dial — cycle 0° / 90° / 180° / 270°.
- The route overlay tracks the rotation. Bearing is persisted across reloads.
- PNG export preserves the current map bearing and restores normal map interaction after export.
Clicking a waypoint, leg label, or note opens the inspector on the right edge of the screen. The title doubles as the editable name. Editing a leg's altitude propagates along the same cruise level until a different altitude already exists.
Terrain vs altitude (Extra layers) shades only the ground that reaches the altitude you are planning to fly — red at or above it, amber within the VFR clearance below it, nothing anywhere else — and marks the legs and waypoints the plan does not clear. See Terrain vs altitude.
The same grid gives each leg inspector an MSA (ft) row = ceil((max terrain along the leg + msaBufferFt) / 100) × 100, red when a planned altitude is below it, and draws the ground silhouette under the flight-plan profile. The grid ships as the Israel area (200 × 85 cells, ~1 km each) built from SRTM via scripts/build_terrain.py; with no grid, nothing is shown at all — never a false "safe". Planning aid only — not terrain avoidance.
A waypoint inspector shows a small satellite thumbnail. Clicking it (or Expand) opens a real Leaflet map centred on the point: drag to pan, a black-on-white zoom control bottom-right (matching the main map), a layer dropdown (the same base layers as the Map menu), and a recentre button (⌖) that snaps back to the waypoint. The four flight-maps.com charts are only selectable up to their tile range; past that zoom they're disabled and the view falls back to Satellite. See Map Layers and Inspector.
The 📋 Flight plan button opens a per-leg table modal. Columns:
| # | From | To | Hdg | Dist (NM) | Speed (kt) | Alt (ft) | Time | Fuel | Cum. time | Cum. fuel | Radial | DME |
Speed and altitude are editable inputs; time and totals update live. The modal can be dragged by its title bar, scrolls when tall, and uses a corner ✕ to close. With Show return path on (off by default), a second sub-table appears below the forward route with reciprocal headings and the inverse altitude pair.
A CSV button on the modal downloads the same table as a spreadsheet file (UTF-8 with BOM so Hebrew opens correctly in Excel). See Print and Export.

The 🧭 Alt pairs button in the Charts section opens a searchable table of the learned CVFR altitude pairs (the cruise-altitude conventions NavAid applies as you build a route). Use Copy JSON to copy the dataset to the clipboard.
Live in the 📤 Export section:
- ⬇ Export — a format dropdown: JSON (full route + notes), GPX (route points), or PLN (MSFS / FSX flight plan). The dropdown resets to its placeholder after firing. Filename is timestamped.
-
⬆ Import — load a route from JSON / GPX / PLN. Strict schema check rejects malformed input with a field-path error; file size is capped at 2 MB before parsing.
.plnis parsed from eachATCWaypoint's DMSWorldPosition. - 🔗 Share — copies a self-contained URL of the current route to the clipboard. Polyline-encoded coords + base64url names, fits up to 64 waypoints. Recipient pastes the link, NavAid opens with the same route. Toast confirmation (no popup).
-
✈️ Open route in Google Earth — KML tour (gx:Tour) flying the route at the per-leg altitudes from your flight plan; the route line and waypoints are clamped to the ground. See Google Earth. -
⬇ Save PNG (Print section) — A3 / A4 framed map + route as a high-resolution PNG. Orientation picked via the inline ▭/▯ toggle next to A3/A4 (default portrait, persisted). Map opacity is honored, airfields/nav-waypoints are included when enabled, map interaction is locked during export, and chart tiles outside coverage are skipped silently. Chart export tiles come from the CORS-enabled
navaid-tiles.supino.orgmirror; OSM and Esri support CORS directly. - The View-section legend is interface chrome and is not included in exported PNG files.
NavAid ships a fully translated Hebrew UI (RTL) and English UI. Switch via the language picker in the toolbar. See Bilingual UI.

NavAid can record the path you actually fly from the device GPS. In the toolbar footer:
- ⏺ Record starts recording (label becomes ⏹ Stop); a live readout shows points, elapsed time, ground speed and altitude. Stopping saves the flown line as a track overlay (a coloured polyline, kept separate from the waypoint route) in Saved routes, exportable as GPX.
- 📍 Location shows your live own-ship on the map without recording.
Showing a recorded track (Saved routes → Show, or right after a recording stops) shows one track at a time, fits the map to it, and glows it amber for 10 seconds. On Android the recording holds a screen wake-lock and, in the APK, a foreground service so it keeps running with the phone locked.
While either is on, the map grows two controls of its own — orientation (north-up / heading-up) and a follow lock — the route layout is locked against accidental drags, and NavAid raises in-flight alerts for the next leg, the overhead call, altitude, drift and going off route. Below taxi speed the heading comes from the device compass, since a GPS course means nothing standing still. Full detail in GPS track recording.
The in-flight buttons on the right of the map — voice alerts, orientation (compass, with the track under it), follow, follow me (share) and the edit lock — are round dark buttons with one set of line icons. A button that is on fills with colour: blue = on (voice, heading-up, following), green = sharing (a green ring while connecting), amber = the route is locked or the chart has been turned by hand. Your own aircraft is a blue high-wing silhouette with a white outline.
A short GPS line under the strip shows accuracy, fix rate and (Android) satellites, coloured by quality; tap it for the details, with the barometer. Each alert also shows as a bubble at the bottom of the screen and, in the app, vibrates. The Android app keeps the screen on in flight and offers screen brightness, a battery warning, a cockpit ADS-B receiver and a Bluetooth GPS — see GPS track recording.
📵 Comm fail (footer, and the phone deck) is for a lost radio. It picks the nearest of Herzliya, Haifa and Rosh Pina by the whole distance through each published entry point. It routes you there at the entry's published altitude and turns on that field's comm-failure chart. The card shows Squawk 7600, the tower's phone as a link that dials it, and the tower light signals. It switches Location on and waits for a fix if nothing is giving a position, and NOW follows the aircraft. Inside Herzliya's training areas 3, 8 and 9 it returns via BAZRA at 1,200 ft. A second press, or Cancel, puts back the route and charts you had before. Full detail in Comm failure.
While Location or Record is on, Follow me shares a link that shows someone where you are, live, on the same chart — no account and no server of ours. The position is encrypted before it leaves the aircraft and the key travels in the link's fragment, which browsers never send anywhere; the public relay carries bytes it cannot read. Whoever opens the link sees your aircraft with its code, altitude, speed and track, and is told plainly when the feed stops rather than shown a stale dot. A share now survives the app being killed mid-flight: the same link resumes by itself, and the route travels with the position — the viewer is asked whether to load the plan rather than having it applied to their map. A page opened on someone else's link watches them and does not share; pressing Follow me there offers to leave the flight first. Full detail in Follow me.
A narrow screen gets a data strip along the top (flight, speed, altitude, track), a deck of six targets along the bottom (Map · Menu · Plan · Record · Location · Comm fail) and one sheet at three heights for everything else — with press-and-hold on the chart for what is here, Direct to and Add waypoint. See Phone layout.
On the Low Alt base layer, Show LSA bubbles (Extra layers section) overlays LSA airspace areas as filled rings — green (in force every day) or tan/black-outlined (weekend only), with names shown when zoomed in. The 📋 LSA bubbles list button (Charts section) lists them; click one to zoom to it. See Extra layers.
Extra layers → Controlled & restricted airspace draws 50 areas from the AIP — 15
prohibited (LLP*), 22 restricted (LLR*), the nine Ben-Gurion TMA sectors and the four
CTRs — each labelled with its vertical limits. Tapping one opens a panel that answers what
the outline cannot: whether it is closed, conditional or controlled; whether it is active
now; who to call and on what frequency; live NOTAMs naming it; and, with a route loaded,
whether your route crosses it inside its limits or passes above or below.
Off by default. See Extra layers and Inspector.
The airfield panel's Weather box carries the density altitude beside the elevation it corrects, in red once it is more than 2 000 ft above the field — what the aeroplane thinks the field elevation is once temperature and pressure are counted. A slider runs 24 hours ahead on the hourly forecast, because the question at Haifa in August is rarely what is it now but what time can I get out of here. Hour zero prefers the field's own METAR, and the panel names which source it used. Pressure is shown in both scales (1009 hPa · 29.80″). See Inspector.
Extra layers → Traffic draws the other aeroplanes heard on ADS-B: a top-down aircraft, nose
along its track, with callsign and flight level beside it, and the full read-out on a tap.
It exists in the Android app only — the public feeds refuse browser requests — so in a
browser the switch is shown dimmed with the reason. See
GPS Track Recording. A cockpit ADS-B receiver
(Stratux, SkyEcho, Sentry) can feed it too, over Wi-Fi (featureGdl90, off by default).
Beyond the passive tile cache, ⬇ Download offline maps (Charts section, chart layers only) pre-downloads the current chart layer so the map works with no internet at all, with a progress readout and a 🗑 Delete offline maps counterpart. See Offline and PWA.
The Saved routes dialog has a Sync with Google Drive button (shown when a
Drive client ID is configured). It backs up your saved-route library to your
own Google Drive, using only the private per-app drive.appdata area — a
hidden folder that NavAid can read and write but which cannot see any of your
other Drive files. It's a two-way merge (newest version of each route wins, and
deletes propagate), so several devices can share one library.
- In the web app it uses a Google Identity Services sign-in popup.
- In the Android APK it uses the platform's native Google Sign-In (the browser popup is blocked inside a WebView).
Everything stays client-side — there is no NavAid server, and localStorage
remains the source of truth; Drive is an opt-in mirror.
NavAid registers a service worker and a Web App Manifest, so you can install it to your phone or desktop and use it without an internet connection (the app shell + the last-loaded chart tiles are cached). It also ships as a self-updating Android APK (Capacitor shell loading the live site) from GitHub Releases, which adds lock-screen GPS recording, offline map packs, and native Google Drive sign-in. See Offline and PWA.
For pilots
- Quick Start
- Video tutorials · סרטונים
- Features
- The Map
- Auto zoom
- Toolbar
- Phone layout
- Safety notice
- Route and Legs
- Waypoints and Notes
- Inspector
- AI Assistant
- User Guide
- Frequency Changes
- VOR and Radial/DME
- Map Layers
- Bearing dial
- Extra Layers
- Airport charts
- Flight Plan
- Route check
- Flight planning form
- Submit a flight plan
- Fuel
- Print and Export
- Simulator Connect
- Google Earth
- GPS Track Recording
- Comm failure
- Follow me
- Bilingual UI
- Offline and PWA
- Settings and Persistence
- Keyboard and Touch
- FAQ and Troubleshooting
For developers
- Architecture
- Directory Structure
- Tuning Panel
- Hidden Tools
- LocalStorage Schema
- Nav-waypoints dataset
- Airfields dataset
- Service Worker
- Deployment
- Contributing
- Changelog
🇮🇱 עברית
לטייסים
- התחלה מהירה
- תכונות
- עוזר AI
- מדריך למשתמש
- זום אוטומטי
- שינויי תדר
- VOR ו-Radial/DME
- סרגל הכלים
- פריסת הטלפון
- הודעת הבטיחות
- שכבות מפה
- שכבות נוספות
- תוכנית טיסה
- בדיקת מסלול
- טופס תכנון טיסה
- הגשת תוכנית טיסה
- הדפסה וייצוא
- חיבור סימולטור
- Google Earth
- הקלטת מסלול GPS
- תקלת קשר
- עקבו אחריי
- ממשק דו-לשוני
- לא מקוון ו-PWA
- הגדרות ושמירה
- מקלדת ומגע
- שאלות נפוצות ופתרון תקלות
למפתחים
🌐 Live 🧪 Staging 📦 Repo 💡 Ideas / bugs