# abuyi39/chirpstack architecture

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

- Interactive diagram: https://gitdiagram.com/abuyi39/chirpstack
- Repository: https://github.com/abuyi39/chirpstack

## Overview

ChirpStack is a LoRaWAN network server with a web management UI, gRPC API, gateway connectivity, protocol processing, persistent state, and configurable application-data integrations. A typical operational flow carries gateway traffic through uplink processing and stored device state; downlink scheduling sends responses back through the gateway backend, while application events can be delivered to configured integrations. The tree and README establish these major capabilities, but sampled excerpts do not expose all runtime wiring, so uncertain call edges are omitted.

Main entry points: [`chirpstack/src/uplink/mod.rs`](https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/uplink/mod.rs) (Uplink processing), [`chirpstack/src/gateway/backend/mod.rs`](https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/gateway/backend/mod.rs) (Gateway transport), [`chirpstack/src/api/mod.rs`](https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/api/mod.rs) (gRPC services), [`ui/src/App.tsx`](https://github.com/abuyi39/chirpstack/blob/master/ui/src/App.tsx) (Web console)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_management["Management UI"]
  node_webui["Web console<br/>[App.tsx]"]
  node_ui_stores["UI stores"]
end

subgraph group_api["Service API"]
  node_grpc_api["gRPC services<br/>[mod.rs]"]
  node_api_contract["API contract"]
end

subgraph group_network["LoRaWAN Network"]
  node_gateway_backend["Gateway transport<br/>[mod.rs]"]
  node_uplink["Uplink processing<br/>[mod.rs]"]
  node_protocol["LoRaWAN protocol<br/>[lib.rs]"]
  node_adr["Rate adaptation<br/>[mod.rs]"]
  node_downlink["Downlink scheduling<br/>[mod.rs]"]
end

subgraph group_state["Persistent State"]
  node_db[("Network database<br/>[mod.rs]")]
  node_device_state["Device state<br/>[device_session.rs]"]
end

subgraph group_delivery["Event Delivery"]
  node_event_stream["Integration events<br/>[event.rs]"]
  node_integration_dispatch["Integration dispatch<br/>[mod.rs]"]
  node_cloud_connectors["Cloud connectors"]
end

node_operator(("Network operator"))
node_grpc_client(("API client"))
node_gateway(("LoRaWAN gateway"))
node_external_services(("Cloud services"))

node_operator -->|"manages network"| node_webui
node_webui -->|"requests data"| node_ui_stores
node_ui_stores -->|"calls services"| node_grpc_api
node_grpc_client -->|"calls services"| node_grpc_api
node_api_contract -->|"defines RPCs"| node_grpc_api
node_grpc_api -->|"reads and writes"| node_db
node_gateway -->|"sends frames"| node_gateway_backend
node_gateway_backend -->|"forwards uplinks"| node_uplink
node_uplink -->|"decodes frames"| node_protocol
node_uplink -->|"uses session state"| node_device_state
node_device_state -->|"persists state"| node_db
node_uplink -->|"adapts data rate"| node_adr
node_downlink -->|"sends downlinks"| node_gateway_backend
node_gateway_backend -->|"transmits frames"| node_gateway
node_event_stream -->|"dispatches events"| node_integration_dispatch
node_integration_dispatch -->|"selects connector"| node_cloud_connectors
node_cloud_connectors -.->|"publishes events"| node_external_services

click node_webui "https://github.com/abuyi39/chirpstack/blob/master/ui/src/App.tsx"
click node_ui_stores "https://github.com/abuyi39/chirpstack/tree/master/ui/src/stores"
click node_grpc_api "https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/api/mod.rs"
click node_api_contract "https://github.com/abuyi39/chirpstack/tree/master/api/proto/api"
click node_gateway_backend "https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/gateway/backend/mod.rs"
click node_uplink "https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/uplink/mod.rs"
click node_protocol "https://github.com/abuyi39/chirpstack/blob/master/lrwn/src/lib.rs"
click node_adr "https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/adr/mod.rs"
click node_downlink "https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/downlink/mod.rs"
click node_db "https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/storage/mod.rs"
click node_device_state "https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/storage/device_session.rs"
click node_event_stream "https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/stream/event.rs"
click node_integration_dispatch "https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/integration/mod.rs"
click node_cloud_connectors "https://github.com/abuyi39/chirpstack/tree/master/chirpstack/src/integration"

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_webui,node_ui_stores,node_grpc_client toneBlue
class node_grpc_api,node_api_contract toneAmber
class node_gateway_backend,node_uplink,node_protocol,node_adr,node_downlink toneMint
class node_db,node_device_state toneRose
class node_event_stream,node_integration_dispatch,node_cloud_connectors,node_operator,node_gateway,node_external_services toneIndigo
```

## Components

### Management UI

- [Web console](https://github.com/abuyi39/chirpstack/blob/master/ui/src/App.tsx): `ui/src/App.tsx`
- [UI stores](https://github.com/abuyi39/chirpstack/tree/master/ui/src/stores): `ui/src/stores`

### Service API

- [gRPC services](https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/api/mod.rs): `chirpstack/src/api/mod.rs`
- [API contract](https://github.com/abuyi39/chirpstack/tree/master/api/proto/api): `api/proto/api`

### LoRaWAN Network

- [Gateway transport](https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/gateway/backend/mod.rs): `chirpstack/src/gateway/backend/mod.rs`
- [Uplink processing](https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/uplink/mod.rs): `chirpstack/src/uplink/mod.rs`
- [LoRaWAN protocol](https://github.com/abuyi39/chirpstack/blob/master/lrwn/src/lib.rs): `lrwn/src/lib.rs`
- [Rate adaptation](https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/adr/mod.rs): `chirpstack/src/adr/mod.rs`
- [Downlink scheduling](https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/downlink/mod.rs): `chirpstack/src/downlink/mod.rs`

### Persistent State

- [Network database](https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/storage/mod.rs): `chirpstack/src/storage/mod.rs`
- [Device state](https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/storage/device_session.rs): `chirpstack/src/storage/device_session.rs`

### Event Delivery

- [Integration events](https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/stream/event.rs): `chirpstack/src/stream/event.rs`
- [Integration dispatch](https://github.com/abuyi39/chirpstack/blob/master/chirpstack/src/integration/mod.rs): `chirpstack/src/integration/mod.rs`
- [Cloud connectors](https://github.com/abuyi39/chirpstack/tree/master/chirpstack/src/integration): `chirpstack/src/integration`

### Other components

- **Network operator**
- **API client**
- **LoRaWAN gateway**
- **Cloud services**

## Connections

- Network operator → Web console: manages network
- Web console → UI stores: requests data
- UI stores → gRPC services: calls services
- API client → gRPC services: calls services
- API contract → gRPC services: defines RPCs
- gRPC services → Network database: reads and writes
- LoRaWAN gateway → Gateway transport: sends frames
- Gateway transport → Uplink processing: forwards uplinks
- Uplink processing → LoRaWAN protocol: decodes frames
- Uplink processing → Device state: uses session state
- Device state → Network database: persists state
- Uplink processing → Rate adaptation: adapts data rate
- Downlink scheduling → Gateway transport: sends downlinks
- Gateway transport → LoRaWAN gateway: transmits frames
- Integration events → Integration dispatch: dispatches events
- Integration dispatch → Cloud connectors: selects connector
- Cloud connectors → Cloud services: publishes events
