Capabilities

data class Capabilities(val firmwareVersion: String?, forceEnableAll: Boolean = isDebug)(source)

Defines the capabilities and feature support based on the device firmware version.

This class provides a centralized way to check if specific features are supported by the connected node's firmware. Add new features here to ensure consistency across the app.

Note: Properties are calculated once during initialization for efficiency.

Constructors

Link copied to clipboard
constructor(firmwareVersion: String?, forceEnableAll: Boolean = isDebug)

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard

Ability to mute notifications from specific nodes via admin messages.

Link copied to clipboard

Ability to request neighbor information from other nodes. Gated to UNRELEASED until working reliably.

Link copied to clipboard

Ability to send verified shared contacts. Supported since firmware v2.7.12.

Link copied to clipboard

Ability to toggle the 'is_unmessageable' flag in user config. Supported since firmware v2.6.9.

Link copied to clipboard
Link copied to clipboard

Whether a coding_rate above the modem preset's own raises it while use_preset is on. Supported since firmware v2.7.18 (meshtastic/firmware#9155); older firmware uses the preset's rate whatever is stored. coding_rate is far older than that, so its schema gates cannot answer this.

Link copied to clipboard

Support for ESP32 Unified OTA. Supported since firmware v2.7.18.

Link copied to clipboard

Whether the node reports NodeInfo.heard_on_current_lora - whether it has heard each node over RF on the LoRa configuration it is using now. Gated to UNRELEASED until the firmware side ships. Older firmware never sends the field, and a proto3 bool defaults to false, so an ungated read marks every node as unheard.

Link copied to clipboard

Support for runtime lockdown mode (per-connection passphrase auth). Supported since firmware v2.8.0. Note: lockdown is also hardware-gated (nRF52 only) — the device advertises real support by sending a LockdownStatus, which is the authoritative signal and drives the actual UI state.

Link copied to clipboard

Support for the LoRa region→preset compatibility map. Supported since firmware v2.8.0. Older firmware never sends the map, so the UI keeps the preset list unconstrained (preset availability is supportsPreset).

Link copied to clipboard

Support for the Mesh Beacon module (ModuleConfig.MeshBeaconConfig broadcast/listen), from the since_firmware its ModuleConfig field declares. The proto is upstream but the firmware module traces to a community fork, so an older radio would silently ignore the config the editor writes.

Link copied to clipboard

Support for sharing contact information via QR codes. Supported since firmware v2.6.8.

Link copied to clipboard

Support for location sharing on secondary channels. Supported since firmware v2.6.10.

Link copied to clipboard

Support for the Status Message module, from the since_firmware its ModuleConfig field declares.

Link copied to clipboard

Support for TAK (ATAK) module configuration, from the since_firmware its ModuleConfig field declares.

Link copied to clipboard

Support for the v2 TAK port (ATAK_PLUGIN_V2 = 78) with TAKPacketV2 + zstd dictionary compression. Supported since firmware v2.8.0. Firmware v2.7.x and earlier only support the legacy ATAK_PLUGIN port (72) with the original TAKPacket schema (PLI + GeoChat only, no compression), so the bridge falls back to that path for older nodes.

Functions

Link copied to clipboard
fun offers(field: FieldMetadata, isSet: Boolean = false): Boolean

Whether a config field is worth offering on this firmware, from the version gates its schema declares. Below since_firmware the node ignores the field. At or above deprecated_since it is shown only while isSet, so a value the node still holds stays visible instead of being silently kept.

Link copied to clipboard

Whether this firmware's preset table contains preset (ChannelOption.minFirmware); older firmware silently falls back to LONG_FAST when sent an unknown preset, so the picker hides it.

Link copied to clipboard

Whether this firmware's region table contains region. Regions declare the release that introduced them via RegionInfo.minFirmware; older firmware would treat an unknown region code as UNSET, so the picker hides it.