Files
Meshtastic-Android/core/model
James Rich 30c35418ca feat(network): this device as a mesh node, served to the app in-process
NodeRadioTransport runs a meshtastic-node-kmp MeshNode inside the app and
speaks the firmware phone API to it over PhoneApiSession, so every screen
works on top of the phone's own node with no radio in the path: BLE
advertisements and mesh-peer GATT to other phones and BLE-mesh radios, and
LoRa through a CH341 stick on the USB-C port. Config writes land in the
node's AdminService and persist; a lora write rebuilds the bearer the way a
radio reboots for one. TX power is capped at 10 dBm for a bus-powered stick.

Offered as "This device as a mesh node" behind the Demo Mode gate, address
prefix 'p'. BLUETOOTH_ADVERTISE joins the manifest and the runtime set, since
the node is a peripheral and an advertiser.

Demo branch for VCF Midwest: depends on node-kmp from ~/.m2
(-PuseMavenLocal=1, 0.1.0-pb2.8.0.35-g3b3df2a-SNAPSHOT, built from e808296
against this app's protobufs pin), so it is not mergeable as-is and skips the
spec lifecycle on purpose. No foreground service yet; Wi-Fi Aware and UDP not
wired in.
2026-09-11 16:51:35 -05:00
..

:core:model (Meshtastic Domain Models)

Overview

The :core:model module is a Kotlin Multiplatform (KMP) library containing the domain models and data classes used throughout the application and its API. These models are platform-agnostic and designed to be shared across Android, JVM, and future supported platforms.

Multiplatform Support

Models are plain commonMain Kotlin types — @Serializable (kotlinx.serialization) data classes and @JvmInline value classes — with no Android Parcelable dependency, so they are shared verbatim across Android, JVM, and iOS.

Key Models

  • DataPacket: Represents a mesh packet (text, telemetry, etc.).
  • Node: Contains detailed information about a node (position, SNR, battery, etc.).
  • NodeAddress / ContactKey: Type-safe node addressing (Broadcast/Local/ByNum/ById) and contact-key parsing, replacing stringly-typed "^all"/"!hex" handling.
  • DeviceHardware: Represents supported Meshtastic hardware devices and their capabilities.
  • Channel: Represents a mesh channel configuration.

Usage

This module is a core dependency of most feature modules.

// In commonMain
implementation(projects.core.model)

Structure

  • commonMain: Contains the majority of domain models and logic.
  • androidMain: Contains Android-specific utilities and implementations for expect declarations.
  • androidUnitTest: Contains unit tests that require Android-specific features (like Parcel testing via Robolectric).

Dependency Graph

graph TB
  :core:model[model]:::kmp-library
  :core:model --> :core:common
  :core:model --> :core:resources
  :core:model -.-> :core:testing

classDef android-application fill:#CAFFBF,stroke:#000,stroke-width:2px,color:#000;
classDef android-application-compose fill:#CAFFBF,stroke:#000,stroke-width:2px,color:#000;
classDef compose-desktop-application fill:#CAFFBF,stroke:#000,stroke-width:2px,color:#000;
classDef android-feature fill:#FFD6A5,stroke:#000,stroke-width:2px,color:#000;
classDef android-library fill:#9BF6FF,stroke:#000,stroke-width:2px,color:#000;
classDef android-library-compose fill:#9BF6FF,stroke:#000,stroke-width:2px,color:#000;
classDef android-test fill:#A0C4FF,stroke:#000,stroke-width:2px,color:#000;
classDef jvm-library fill:#BDB2FF,stroke:#000,stroke-width:2px,color:#000;
classDef kmp-feature fill:#FFD6A5,stroke:#000,stroke-width:2px,color:#000;
classDef kmp-library-compose fill:#FFC1CC,stroke:#000,stroke-width:2px,color:#000;
classDef kmp-library fill:#FFC1CC,stroke:#000,stroke-width:2px,color:#000;
classDef unknown fill:#FFADAD,stroke:#000,stroke-width:2px,color:#000;