# mikekuriger/metarmap architecture

> Architecture diagram of the GitHub repository mikekuriger/metarmap, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mikekuriger/metarmap
- Repository: https://github.com/mikekuriger/metarmap

## Overview

MetarMap is an Android aviation map and flight-planning app. The principal workflow is to view the live map, search or select waypoints, build a flight plan, and consult navigation-log and weather information. Separate capabilities cover chart downloads, airspace overlays, Stratux GPS/traffic, and aircraft profiles. The map activity is a large coordinating surface; the available excerpts do not show all of its wiring, so uncertain relationships are dashed rather than presented as verified calls.

Main entry points: [`app/src/main/java/com/airportweather/map/MainActivity.kt`](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/MainActivity.kt) (Map screen), [`app/src/main/java/com/airportweather/map/FlightPlanActivity.kt`](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/FlightPlanActivity.kt) (Flight planner), [`app/src/main/java/com/airportweather/map/Endpoints.kt`](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/Endpoints.kt) (Service endpoints), [`app/src/main/java/com/airportweather/map/aircraft/AircraftListActivity.kt`](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/aircraft/AircraftListActivity.kt) (Aircraft list)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_map["Map and flight"]
  node_map_ui["Map screen<br/>[MainActivity.kt]"]
  node_viewmodel["Map state<br/>[MainViewModel.kt]"]
  node_flightplan["Flight planner"]
  node_flightcalc["Plan calculations<br/>[FlightPlanUtils.kt]"]
  node_navlog["Navigation log<br/>[NavLogActivity.kt]"]
  node_waypoints["User waypoints<br/>[UserWaypoints.kt]"]
end

subgraph group_aviation["Aviation data"]
  node_airportdb[("Airport lookup")]
  node_weather["Weather feeds"]
  node_winds["Winds aloft"]
  node_tfr["TFR data<br/>[TfrRepository.kt]"]
  node_sua["Special-use airspace<br/>[SuaRepository.kt]"]
  node_endpoints["Service endpoints<br/>[Endpoints.kt]"]
end

subgraph group_charts["Charts and databases"]
  node_chart_download["Chart downloads"]
  node_chart_catalog["Chart catalog"]
  node_db_sync["Database sync"]
  node_chart_service["Chart and DB host"]
end

subgraph group_aircraft["Aircraft profiles"]
  node_aircraft_list["Aircraft list"]
  node_aircraft_edit["Aircraft editor"]
  node_aircraft_store[("Aircraft records")]
  node_selection[("Active selection")]
end

subgraph group_stratux["Stratux integration"]
  node_stratux_manager["Stratux sockets<br/>[StratuxManager.kt]"]
  node_traffic["Traffic repository"]
end

node_pilot(("Pilot"))
node_stratux_device["Stratux device"]

node_pilot -.->|"opens"| node_map_ui
node_map_ui -.->|"observes"| node_viewmodel
node_pilot -.->|"plans route"| node_flightplan
node_flightplan -.->|"uses calculations"| node_flightcalc
node_flightplan -.->|"looks up waypoints"| node_airportdb
node_flightplan -.->|"opens"| node_navlog
node_flightplan -.->|"requests forecast"| node_winds
node_map_ui -.->|"opens"| node_flightplan
node_map_ui -.->|"queries"| node_airportdb
node_map_ui -.->|"uses waypoints"| node_waypoints
node_map_ui -.->|"refreshes weather"| node_weather
node_map_ui -.->|"loads overlays"| node_tfr
node_map_ui -.->|"loads overlays"| node_sua
node_weather -->|"uses URLs"| node_endpoints
node_winds -->|"uses URL"| node_endpoints
node_tfr -->|"uses URL"| node_endpoints
node_sua -->|"uses URL"| node_endpoints
node_pilot -.->|"downloads charts"| node_chart_download
node_chart_download -->|"loads catalog"| node_chart_catalog
node_chart_catalog -->|"uses URL"| node_endpoints
node_chart_download -->|"syncs databases"| node_db_sync
node_db_sync -->|"uses manifest URL"| node_endpoints
node_endpoints -->|"defines chart and DB URLs"| node_chart_service
node_pilot -.->|"manages aircraft"| node_aircraft_list
node_aircraft_list -->|"opens editor"| node_aircraft_edit
node_aircraft_list -->|"saves aircraft"| node_aircraft_store
node_aircraft_edit -.->|"updates records"| node_aircraft_store
node_aircraft_list -->|"sets active profile"| node_selection
node_flightplan -.->|"resolves active aircraft"| node_selection
node_map_ui -.->|"connects"| node_stratux_manager
node_stratux_manager -.->|"exchanges GPS and traffic"| node_stratux_device
node_traffic -->|"reads targets"| node_stratux_manager

click node_map_ui "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/MainActivity.kt"
click node_viewmodel "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/MainViewModel.kt"
click node_flightplan "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/FlightPlanActivity.kt"
click node_flightcalc "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/utils/FlightPlanUtils.kt"
click node_navlog "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/NavLogActivity.kt"
click node_waypoints "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/utils/UserWaypoints.kt"
click node_airportdb "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/utils/AirportDatabaseHelper.kt"
click node_weather "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/WeatherRepository.kt"
click node_winds "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/WindsAloftRepository.kt"
click node_tfr "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/TfrRepository.kt"
click node_sua "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/SuaRepository.kt"
click node_endpoints "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/Endpoints.kt"
click node_chart_download "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/DownloadActivity.kt"
click node_chart_catalog "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/ChartCatalogRepository.kt"
click node_db_sync "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/utils/DatabaseSyncUtils.kt"
click node_aircraft_list "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/aircraft/AircraftListActivity.kt"
click node_aircraft_edit "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/aircraft/AircraftEditActivity.kt"
click node_aircraft_store "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/aircraft/AircraftRepository.kt"
click node_selection "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/aircraft/AircraftSelectionStore.kt"
click node_stratux_manager "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/StratuxManager.kt"
click node_traffic "https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/TrafficRepository.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_map_ui,node_viewmodel,node_flightplan,node_flightcalc,node_navlog,node_waypoints toneBlue
class node_airportdb,node_weather,node_winds,node_tfr,node_sua,node_endpoints toneAmber
class node_chart_download,node_chart_catalog,node_db_sync,node_chart_service toneMint
class node_aircraft_list,node_aircraft_edit,node_aircraft_store,node_selection toneRose
class node_stratux_manager,node_traffic,node_pilot,node_stratux_device toneIndigo
```

## Components

### Map and flight

- [Map screen](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/MainActivity.kt): `app/src/main/java/com/airportweather/map/MainActivity.kt`
- [Map state](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/MainViewModel.kt): `app/src/main/java/com/airportweather/map/MainViewModel.kt`
- [Flight planner](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/FlightPlanActivity.kt): `app/src/main/java/com/airportweather/map/FlightPlanActivity.kt`
- [Plan calculations](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/utils/FlightPlanUtils.kt): `app/src/main/java/com/airportweather/map/utils/FlightPlanUtils.kt`
- [Navigation log](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/NavLogActivity.kt): `app/src/main/java/com/airportweather/map/NavLogActivity.kt`
- [User waypoints](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/utils/UserWaypoints.kt): `app/src/main/java/com/airportweather/map/utils/UserWaypoints.kt`

### Aviation data

- [Airport lookup](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/utils/AirportDatabaseHelper.kt): `app/src/main/java/com/airportweather/map/utils/AirportDatabaseHelper.kt`
- [Weather feeds](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/WeatherRepository.kt): `app/src/main/java/com/airportweather/map/WeatherRepository.kt`
- [Winds aloft](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/WindsAloftRepository.kt): `app/src/main/java/com/airportweather/map/WindsAloftRepository.kt`
- [TFR data](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/TfrRepository.kt): `app/src/main/java/com/airportweather/map/TfrRepository.kt`
- [Special-use airspace](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/SuaRepository.kt): `app/src/main/java/com/airportweather/map/SuaRepository.kt`
- [Service endpoints](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/Endpoints.kt): `app/src/main/java/com/airportweather/map/Endpoints.kt`

### Charts and databases

- [Chart downloads](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/DownloadActivity.kt): `app/src/main/java/com/airportweather/map/DownloadActivity.kt`
- [Chart catalog](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/ChartCatalogRepository.kt): `app/src/main/java/com/airportweather/map/ChartCatalogRepository.kt`
- [Database sync](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/utils/DatabaseSyncUtils.kt): `app/src/main/java/com/airportweather/map/utils/DatabaseSyncUtils.kt`
- **Chart and DB host**

### Aircraft profiles

- [Aircraft list](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/aircraft/AircraftListActivity.kt): `app/src/main/java/com/airportweather/map/aircraft/AircraftListActivity.kt`
- [Aircraft editor](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/aircraft/AircraftEditActivity.kt): `app/src/main/java/com/airportweather/map/aircraft/AircraftEditActivity.kt`
- [Aircraft records](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/aircraft/AircraftRepository.kt): `app/src/main/java/com/airportweather/map/aircraft/AircraftRepository.kt`
- [Active selection](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/aircraft/AircraftSelectionStore.kt): `app/src/main/java/com/airportweather/map/aircraft/AircraftSelectionStore.kt`

### Stratux integration

- [Stratux sockets](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/StratuxManager.kt): `app/src/main/java/com/airportweather/map/StratuxManager.kt`
- [Traffic repository](https://github.com/mikekuriger/metarmap/blob/main/app/src/main/java/com/airportweather/map/TrafficRepository.kt): `app/src/main/java/com/airportweather/map/TrafficRepository.kt`

### Other components

- **Pilot**
- **Stratux device**

## Connections

- Pilot → Map screen: opens
- Map screen → Map state: observes (evidence: `app/src/main/java/com/airportweather/map/MainActivity.kt`)
- Pilot → Flight planner: plans route
- Flight planner → Plan calculations: uses calculations (evidence: `app/src/main/java/com/airportweather/map/FlightPlanActivity.kt`)
- Flight planner → Airport lookup: looks up waypoints (evidence: `app/src/main/java/com/airportweather/map/FlightPlanActivity.kt`)
- Flight planner → Navigation log: opens (evidence: `app/src/main/java/com/airportweather/map/FlightPlanActivity.kt`)
- Flight planner → Winds aloft: requests forecast (evidence: `app/src/main/java/com/airportweather/map/FlightPlanActivity.kt`)
- Map screen → Flight planner: opens (evidence: `app/src/main/java/com/airportweather/map/MainActivity.kt`)
- Map screen → Airport lookup: queries (evidence: `app/src/main/java/com/airportweather/map/MainActivity.kt`)
- Map screen → User waypoints: uses waypoints (evidence: `app/src/main/java/com/airportweather/map/MainActivity.kt`)
- Map screen → Weather feeds: refreshes weather
- Map screen → TFR data: loads overlays
- Map screen → Special-use airspace: loads overlays
- Weather feeds → Service endpoints: uses URLs (evidence: `app/src/main/java/com/airportweather/map/WeatherRepository.kt`)
- Winds aloft → Service endpoints: uses URL (evidence: `app/src/main/java/com/airportweather/map/WindsAloftRepository.kt`)
- TFR data → Service endpoints: uses URL (evidence: `app/src/main/java/com/airportweather/map/TfrRepository.kt`)
- Special-use airspace → Service endpoints: uses URL (evidence: `app/src/main/java/com/airportweather/map/SuaRepository.kt`)
- Pilot → Chart downloads: downloads charts
- Chart downloads → Chart catalog: loads catalog (evidence: `app/src/main/java/com/airportweather/map/DownloadActivity.kt`)
- Chart catalog → Service endpoints: uses URL (evidence: `app/src/main/java/com/airportweather/map/ChartCatalogRepository.kt`)
- Chart downloads → Database sync: syncs databases (evidence: `app/src/main/java/com/airportweather/map/DownloadActivity.kt`)
- Database sync → Service endpoints: uses manifest URL (evidence: `app/src/main/java/com/airportweather/map/utils/DatabaseSyncUtils.kt`)
- Service endpoints → Chart and DB host: defines chart and DB URLs (evidence: `app/src/main/java/com/airportweather/map/Endpoints.kt`)
- Pilot → Aircraft list: manages aircraft
- Aircraft list → Aircraft editor: opens editor (evidence: `app/src/main/java/com/airportweather/map/aircraft/AircraftListActivity.kt`)
- Aircraft list → Aircraft records: saves aircraft (evidence: `app/src/main/java/com/airportweather/map/aircraft/AircraftListActivity.kt`)
- Aircraft editor → Aircraft records: updates records (evidence: `app/src/main/java/com/airportweather/map/aircraft/AircraftEditActivity.kt`)
- Aircraft list → Active selection: sets active profile (evidence: `app/src/main/java/com/airportweather/map/aircraft/AircraftListActivity.kt`)
- Flight planner → Active selection: resolves active aircraft (evidence: `app/src/main/java/com/airportweather/map/FlightPlanActivity.kt`)
- Map screen → Stratux sockets: connects (evidence: `app/src/main/java/com/airportweather/map/MainActivity.kt`)
- Stratux sockets → Stratux device: exchanges GPS and traffic
- Traffic repository → Stratux sockets: reads targets (evidence: `app/src/main/java/com/airportweather/map/TrafficRepository.kt`)
