# stephendade/rpanion-server architecture

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

- Interactive diagram: https://gitdiagram.com/stephendade/rpanion-server
- Repository: https://github.com/stephendade/rpanion-server

## Overview

Rpanion-server is a companion-computer control plane for MAVLink vehicles, exposing configuration and monitoring through a browser UI and Node.js API. The principal workflow is an authenticated user changing a setting in a page, sending it to the API, and having a manager apply it to a vehicle or host service. Distinct branches cover telemetry, networking, video, logs/media, NTRIP, PPP, VPN and account management. Relationships reflect documented capabilities and sampled calls; some unsampled API-to-manager wiring is omitted.

Main entry points: [`server/index.js`](https://github.com/stephendade/rpanion-server/blob/master/server/index.js) (HTTP API), [`src/AppRouter.jsx`](https://github.com/stephendade/rpanion-server/blob/master/src/AppRouter.jsx) (Page router), [`server/flightController.js`](https://github.com/stephendade/rpanion-server/blob/master/server/flightController.js) (Flight controller manager), [`python/video-server.py`](https://github.com/stephendade/rpanion-server/blob/master/python/video-server.py) (RTSP server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interface"]
  node_router["Page router<br/>[AppRouter.jsx]"]
  node_fcpage["Flight controller UI"]
  node_networkpage["Network UI<br/>[networkconfig.jsx]"]
  node_ntrippage["NTRIP UI"]
  node_logpage["Flight logs UI<br/>[logBrowser.jsx]"]
  node_videopage["Video UI<br/>[video.jsx]"]
  node_cloudpage["Cloud UI<br/>[cloud.jsx]"]
  node_vpnpage["VPN UI<br/>[vpnconfig.jsx]"]
  node_ppppage["PPP UI<br/>[ppp.jsx]"]
  node_userpage["User management UI<br/>[userManagement.jsx]"]
end

subgraph group_api["API and access"]
  node_api["HTTP API<br/>[index.js]"]
  node_auth["Login and access control<br/>[userLogin.js]"]
end

subgraph group_vehicle["Vehicle telemetry"]
  node_fc["Flight controller manager"]
  node_mav["MAVLink processor<br/>[mavManager.js]"]
  node_flightlogs["Flight logging<br/>[flightLogger.js]"]
end

subgraph group_connectivity["Connectivity"]
  node_network["Network manager<br/>[networkManager.js]"]
  node_adhoc["Ad-hoc Wi-Fi manager<br/>[adhocManager.js]"]
  node_clients["Access point clients<br/>[networkClients.js]"]
  node_ntrip["NTRIP service<br/>[ntrip.js]"]
  node_ppp["PPP connection<br/>[pppConnection.js]"]
  node_vpn["VPN manager<br/>[vpn.js]"]
end

subgraph group_media["Media and logs"]
  node_video["Video stream manager<br/>[videostream.js]"]
  node_rtsp["RTSP server<br/>[video-server.py]"]
  node_converter["Log converter<br/>[logConverter.js]"]
end

node_operator(("Operator"))
node_ntripprovider(("NTRIP caster"))
node_vehicleactor(("MAVLink vehicle"))
node_camera(("Camera or RTSP source"))
node_viewer(("Stream viewer"))

node_operator -->|"uses"| node_router
node_router -->|"routes"| node_fcpage
node_router -->|"routes"| node_networkpage
node_router -->|"routes"| node_ntrippage
node_router -->|"routes"| node_logpage
node_router -->|"routes"| node_videopage
node_router -->|"routes"| node_cloudpage
node_router -->|"routes"| node_vpnpage
node_router -->|"routes"| node_ppppage
node_router -->|"routes"| node_userpage
node_router -->|"checks access"| node_auth
node_fcpage -->|"requests settings"| node_api
node_networkpage -->|"requests settings"| node_api
node_ntrippage -->|"submits config"| node_api
node_logpage -->|"requests logs"| node_api
node_videopage -->|"controls recording"| node_api
node_cloudpage -->|"requests config"| node_api
node_vpnpage -->|"requests status"| node_api
node_ppppage -->|"requests config"| node_api
node_userpage -->|"manages accounts"| node_api
node_api -->|"authenticates"| node_auth
node_api -->|"handles telemetry"| node_fc
node_fc -->|"processes MAVLink"| node_mav
node_mav -->|"exchanges telemetry"| node_vehicleactor
node_fc -->|"logs flights"| node_flightlogs
node_api -->|"handles network config"| node_network
node_api -->|"handles ad-hoc Wi-Fi"| node_adhoc
node_api -->|"lists clients"| node_clients
node_api -->|"handles NTRIP config"| node_ntrip
node_ntrip -->|"receives corrections"| node_ntripprovider
node_api -->|"handles PPP config"| node_ppp
node_api -->|"handles VPN status"| node_vpn
node_api -->|"controls streaming"| node_video
node_video -->|"starts server"| node_rtsp
node_rtsp -->|"captures or relays"| node_camera
node_viewer -->|"receives stream"| node_rtsp
node_api -->|"serves log conversion"| node_converter

click node_router "https://github.com/stephendade/rpanion-server/blob/master/src/AppRouter.jsx"
click node_fcpage "https://github.com/stephendade/rpanion-server/blob/master/src/flightcontroller.jsx"
click node_networkpage "https://github.com/stephendade/rpanion-server/blob/master/src/networkconfig.jsx"
click node_ntrippage "https://github.com/stephendade/rpanion-server/blob/master/src/ntripcontroller.jsx"
click node_logpage "https://github.com/stephendade/rpanion-server/blob/master/src/logBrowser.jsx"
click node_videopage "https://github.com/stephendade/rpanion-server/blob/master/src/video.jsx"
click node_cloudpage "https://github.com/stephendade/rpanion-server/blob/master/src/cloud.jsx"
click node_vpnpage "https://github.com/stephendade/rpanion-server/blob/master/src/vpnconfig.jsx"
click node_ppppage "https://github.com/stephendade/rpanion-server/blob/master/src/ppp.jsx"
click node_userpage "https://github.com/stephendade/rpanion-server/blob/master/src/userManagement.jsx"
click node_api "https://github.com/stephendade/rpanion-server/blob/master/server/index.js"
click node_auth "https://github.com/stephendade/rpanion-server/blob/master/server/userLogin.js"
click node_fc "https://github.com/stephendade/rpanion-server/blob/master/server/flightController.js"
click node_mav "https://github.com/stephendade/rpanion-server/blob/master/mavlink/mavManager.js"
click node_flightlogs "https://github.com/stephendade/rpanion-server/blob/master/server/flightLogger.js"
click node_network "https://github.com/stephendade/rpanion-server/blob/master/server/networkManager.js"
click node_adhoc "https://github.com/stephendade/rpanion-server/blob/master/server/adhocManager.js"
click node_clients "https://github.com/stephendade/rpanion-server/blob/master/server/networkClients.js"
click node_ntrip "https://github.com/stephendade/rpanion-server/blob/master/server/ntrip.js"
click node_ppp "https://github.com/stephendade/rpanion-server/blob/master/server/pppConnection.js"
click node_vpn "https://github.com/stephendade/rpanion-server/blob/master/server/vpn.js"
click node_video "https://github.com/stephendade/rpanion-server/blob/master/server/videostream.js"
click node_rtsp "https://github.com/stephendade/rpanion-server/blob/master/python/video-server.py"
click node_converter "https://github.com/stephendade/rpanion-server/blob/master/server/logConverter.js"

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_router,node_fcpage,node_networkpage,node_ntrippage,node_logpage,node_videopage,node_cloudpage,node_vpnpage,node_ppppage,node_userpage,node_viewer toneBlue
class node_api,node_auth toneAmber
class node_fc,node_mav,node_flightlogs toneMint
class node_network,node_adhoc,node_clients,node_ntrip,node_ppp,node_vpn toneRose
class node_video,node_rtsp,node_converter,node_operator,node_ntripprovider,node_vehicleactor,node_camera toneIndigo
```

## Components

### Web interface

- [Page router](https://github.com/stephendade/rpanion-server/blob/master/src/AppRouter.jsx): `src/AppRouter.jsx`
- [Flight controller UI](https://github.com/stephendade/rpanion-server/blob/master/src/flightcontroller.jsx): `src/flightcontroller.jsx`
- [Network UI](https://github.com/stephendade/rpanion-server/blob/master/src/networkconfig.jsx): `src/networkconfig.jsx`
- [NTRIP UI](https://github.com/stephendade/rpanion-server/blob/master/src/ntripcontroller.jsx): `src/ntripcontroller.jsx`
- [Flight logs UI](https://github.com/stephendade/rpanion-server/blob/master/src/logBrowser.jsx): `src/logBrowser.jsx`
- [Video UI](https://github.com/stephendade/rpanion-server/blob/master/src/video.jsx): `src/video.jsx`
- [Cloud UI](https://github.com/stephendade/rpanion-server/blob/master/src/cloud.jsx): `src/cloud.jsx`
- [VPN UI](https://github.com/stephendade/rpanion-server/blob/master/src/vpnconfig.jsx): `src/vpnconfig.jsx`
- [PPP UI](https://github.com/stephendade/rpanion-server/blob/master/src/ppp.jsx): `src/ppp.jsx`
- [User management UI](https://github.com/stephendade/rpanion-server/blob/master/src/userManagement.jsx): `src/userManagement.jsx`

### API and access

- [HTTP API](https://github.com/stephendade/rpanion-server/blob/master/server/index.js): `server/index.js`
- [Login and access control](https://github.com/stephendade/rpanion-server/blob/master/server/userLogin.js): `server/userLogin.js`

### Vehicle telemetry

- [Flight controller manager](https://github.com/stephendade/rpanion-server/blob/master/server/flightController.js): `server/flightController.js`
- [MAVLink processor](https://github.com/stephendade/rpanion-server/blob/master/mavlink/mavManager.js): `mavlink/mavManager.js`
- [Flight logging](https://github.com/stephendade/rpanion-server/blob/master/server/flightLogger.js): `server/flightLogger.js`

### Connectivity

- [Network manager](https://github.com/stephendade/rpanion-server/blob/master/server/networkManager.js): `server/networkManager.js`
- [Ad-hoc Wi-Fi manager](https://github.com/stephendade/rpanion-server/blob/master/server/adhocManager.js): `server/adhocManager.js`
- [Access point clients](https://github.com/stephendade/rpanion-server/blob/master/server/networkClients.js): `server/networkClients.js`
- [NTRIP service](https://github.com/stephendade/rpanion-server/blob/master/server/ntrip.js): `server/ntrip.js`
- [PPP connection](https://github.com/stephendade/rpanion-server/blob/master/server/pppConnection.js): `server/pppConnection.js`
- [VPN manager](https://github.com/stephendade/rpanion-server/blob/master/server/vpn.js): `server/vpn.js`

### Media and logs

- [Video stream manager](https://github.com/stephendade/rpanion-server/blob/master/server/videostream.js): `server/videostream.js`
- [RTSP server](https://github.com/stephendade/rpanion-server/blob/master/python/video-server.py): `python/video-server.py`
- [Log converter](https://github.com/stephendade/rpanion-server/blob/master/server/logConverter.js): `server/logConverter.js`

### Other components

- **Operator**
- **NTRIP caster**
- **MAVLink vehicle**
- **Camera or RTSP source**
- **Stream viewer**

## Connections

- Operator → Page router: uses
- Page router → Flight controller UI: routes
- Page router → Network UI: routes
- Page router → NTRIP UI: routes
- Page router → Flight logs UI: routes
- Page router → Video UI: routes
- Page router → Cloud UI: routes
- Page router → VPN UI: routes
- Page router → PPP UI: routes
- Page router → User management UI: routes
- Page router → Login and access control: checks access
- Flight controller UI → HTTP API: requests settings
- Network UI → HTTP API: requests settings
- NTRIP UI → HTTP API: submits config
- Flight logs UI → HTTP API: requests logs
- Video UI → HTTP API: controls recording
- Cloud UI → HTTP API: requests config
- VPN UI → HTTP API: requests status
- PPP UI → HTTP API: requests config
- User management UI → HTTP API: manages accounts
- HTTP API → Login and access control: authenticates
- HTTP API → Flight controller manager: handles telemetry
- Flight controller manager → MAVLink processor: processes MAVLink
- MAVLink processor → MAVLink vehicle: exchanges telemetry
- Flight controller manager → Flight logging: logs flights
- HTTP API → Network manager: handles network config
- HTTP API → Ad-hoc Wi-Fi manager: handles ad-hoc Wi-Fi
- HTTP API → Access point clients: lists clients
- HTTP API → NTRIP service: handles NTRIP config
- NTRIP service → NTRIP caster: receives corrections
- HTTP API → PPP connection: handles PPP config
- HTTP API → VPN manager: handles VPN status
- HTTP API → Video stream manager: controls streaming
- Video stream manager → RTSP server: starts server
- RTSP server → Camera or RTSP source: captures or relays
- Stream viewer → RTSP server: receives stream
- HTTP API → Log converter: serves log conversion
