@startuml overview title Mullvad VPN Android app overview skinparam SequenceMessageAlign center skinparam componentStyle rectangle skinparam linetype polyline package "App process" as AppProcess { package "Android App" { component "Middle layer (Repositories, UseCases etc)" as AppMiddleLayer component "TileService" as TileService component "App UI (compose, VMs etc)" as AppUI component "MullvadVpnService" as VpnService component "ManagementService" as GrpcClient } package "Daemon (Rust)" as DaemonApp { component "Mullvad JNI" as MullvadJNI component "ManagementServiceInterface" as GrpcServer } } ' gRPC connections. [GrpcClient] <-[#blue]r-> [GrpcServer] : gRPC (protobuf) ' App connections AppUI <-d-> AppMiddleLayer TileService <-d-> AppMiddleLayer VpnService <-d-> AppMiddleLayer AppMiddleLayer <-r-> GrpcClient ' Vpn service connections VpnService <-[#red]r-> MullvadJNI : FFI [AppUI] <-r-> [VpnService] : Binder ' Fix alignment MullvadJNI <-[hidden]d-> GrpcServer TileService <-[hidden]r-> AppUI @enduml