Proto commits in meshtastic/protobufs

These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)

Commit:94cdec4
Author:nomdetom

remove rssi & improve notes

The documentation is generated from this commit.

Commit:3fec03b
Author:nomdetom

Add explicit presence for RSSI: MeshPacket.rx_rssi optional, NodeInfoLite.rssi storage field MeshPacket.rx_rssi was proto3 singular, so an unset value and a genuine 0 dBm reading were byte-identical on the wire (0 is a legal SX126x return, and SX127x's offset+register formula can even go positive). Mark it optional so absence survives encoding, mirroring the precedent already set by NodeInfo.hops_away. NodeInfoLite had no RSSI field at all, so nothing survived a device reboot for replayed history packets to restore - every replay showed RSSI 0 regardless of the real measurement. Add NodeInfoLite.rssi (tag 20, sint32, next free tag) with the same "0 is not automatically unknown" caveat; presence is tracked via NODEINFO_BITFIELD_HAS_RSSI on the firmware side rather than a second wire-level bool, to avoid a RAM cost per stored node. Companion firmware change: meshtastic/firmware, phantom-node-fix-perhaps branch, .notes/plans/plan-executed-snr-rssi-replay-fidelity.md.

Commit:65cf198
Author:James Rich

feat: reject hand-set `deprecated` in the field_metadata annotation The `deprecated` attribute is generator-managed — mirrored from the field's standard `[deprecated = true]` option. A hand-set value inside (meshtastic.field_metadata) previously produced silently divergent output: the Go and Kotlin/Wire generators emitted it while the Swift plugin ignored it (breaking byte-identity), and the schema carried two sources of truth for the same fact. Make it a hard error at generation time in all three generators, with the same message naming the field and the fix. Verified: both protoc plugins reject a hand-set fixture identically; parity over the real schema remains byte-identical; Go tests cover true/false/redundant hand-set cases. Also document the Go plugin's `target=swift` assumption that files set `option swift_prefix = ""` (all meshtastic protos do) — without it, swift-protobuf prefixes generated type names and the emitted extensions would reference nonexistent types; the parity CI catches that divergence. The bundled field_metadata.pb.swift regen picks up the proto comment change (comments only, no functional difference). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Commit:b6ad0e5
Author:Ben Meadors
Committer:GitHub

Merge pull request #983 from RCGV1/feat/packet-signature-policy feat: add packet authenticity policy schema

Commit:39a6670
Author:Ben Meadors

feat: add FAB firmware edition Adds FAB = 20 to FirmwareEdition for FAB26 Boston and future editions of the international Fab Lab digital fabrication conference. Fills the next sequential event slot after HAMVENTION = 19. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Commit:8e82031
Author:vidplace7

2.7: Backport #967 - Rename Seeed Tracker and add SPA06 sensor Backport changes from #967 to 2.7 branch. These changes are already present in the generated protobufs in firmware `master` branch. They should be included here too. This couldn't be cleanly cherrypicked (use squash merge!!!) so simply made the changes manually.

Commit:72e0b39
Author:oscgonfer
Committer:vidplace7

Add HM330X sensor Cherrypick of 7b46dfbf5750093a9fba7469fba10b5bc5be021c

Commit:f5b94bc
Author:Ben Meadors
Committer:GitHub

Merge pull request #987 from sashko/master Deprecate EU_868 region code

Commit:7b46dfb
Author:oscgonfer

Add HM330X sensor

Commit:da4b15c
Author:James Rich

feat: mirror deprecated field option into field-metadata registry Fields marked `[deprecated = true]` carry that flag in FieldOptions, which every protobuf runtime strips — so apps can't read deprecation at runtime, the same gap this registry already closes for custom attributes like diy_only. Mirror the standard `deprecated` option into the registry as a `deprecated` attribute on FieldMetadata, populated by the generators from the field's own `[deprecated = true]` (never set by hand). Every existing and future deprecated field flows in automatically, with no annotation. - field_metadata.proto: add `optional bool deprecated = 6`, documented as generator-managed. It must be a real field (not a synthetic generator attribute) because the KMP registry instantiates the Wire-generated FieldMetadata type. - protoc-gen-fieldmeta (Go): read FieldOptions.deprecated and upsert the attribute; deprecated-only fields now get entries. Emitters stay generic. - protoc-gen-fieldmeta-swift: mirror field.options.deprecated; align entry and accessor ordering to the Go plugin so output stays byte-identical across many message types (previously only trivially identical with one message type). Regenerate the bundled field_metadata.pb.swift. - FieldMetadataRegistryHandler (KMP/Wire): mirror field.isDeprecated. Guard the generators in CI — previously the Go tests never ran there and the Go/Swift byte-identity was hand-checked only: - .github/workflows/field-metadata.yml: run the Go plugin tests + vet, and diff the Go and Swift generators' output to enforce byte-identity. - protoc-gen-fieldmeta-swift/scripts/verify-parity.sh: the reusable parity check. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Commit:5f16928
Author:Oleksandr Kravchuk

Deprecate EU_868 region code Ukrainian legislation* was harmonised with the EU's, and UA_868 is now obsolete as it is identical to the EU_868. * https://zakon.rada.gov.ua/laws/show/262-2026-%D0%BF

Commit:223e20e
Author:Benjamin Faershtein
Committer:Benjamin Faershtein

feat: add packet signature policy schema

Commit:821d89b
Author:Thomas Göttgens
Committer:GitHub

interdevice: SD card mount, eject and format commands (#986)

Commit:da2fc41
Author:Thomas Göttgens
Committer:GitHub

Indicator (#721)

Commit:a505634
Author:Ben Meadors

Add MEDIUM_TURBO modem preset Medium range preset comparable to MEDIUM_FAST but with 500kHz bandwidth.

Commit:c3097e1
Author:Thomas Göttgens
Committer:Thomas Göttgens

interdevice: transaction level I2C bridge, file transfer and directory listing

Commit:1ae3be3
Author:Ben Meadors
Committer:GitHub

Merge pull request #979 from meshtastic/develop Develop dangit

Commit:7f885c3
Author:Jonathan Bennett
Committer:Jonathan Bennett

Add transparent_mode to config.proto Add transparent mode option for LoRa modem functionality.

Commit:678281c
Author:Jonathan Bennett
Committer:GitHub

Fix formatting in portnums.proto (#976)

Commit:9452d3a
Author:Jonathan Bennett
Committer:GitHub

Add transparent_mode to config.proto Add transparent mode option for LoRa modem functionality.

Commit:f68e94f
Author:Quency-D

Add Heltec RC series boards

Commit:40ee668
Author:Ian McEwen

Add is_unmessagable and is_licensed as fields for DeviceProfile exports

Commit:31b56bd
Author:nomdetom

secoond pass beacon bufs

Commit:0b7ab7f
Author:Thomas Göttgens
Committer:GitHub

Add LORA_OTA_APP portnum for firmware updates

Commit:c202aea
Author:Thomas Göttgens
Committer:Thomas Göttgens

Rename Seeed Tracker and add sensor (#967) * Rename Seeed Tracker and add sensor * uh, i'll kill that cat * Dear Copilot, stop messing with me

Commit:032b7df
Author:Thomas Göttgens
Committer:GitHub

Rename Seeed Tracker and add sensor (#967) * Rename Seeed Tracker and add sensor * uh, i'll kill that cat * Dear Copilot, stop messing with me

Commit:e7e8cff
Author:Garth Vander Houwen

Add notify_favorites_only to Waypoint geofence Per-waypoint flag: when set, geofence enter/exit notifications only fire for nodes that are favorites on the receiving device. Favorite status is resolved locally per receiver, so it complements the existing per-waypoint notify_on_enter / notify_on_exit flags. Field 13 (additive); no .options change needed for a bool.

Commit:f680aac
Author:Ben Meadors
Committer:GitHub

Merge pull request #939 from NomDeTom/feat/mesh-beacon Feat/mesh beacon

Commit:2ab813c
Author:Ben Meadors
Committer:GitHub

Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

Commit:c2fda20
Author:Garth Vander Houwen

add the favorites only part for notifications

Commit:09ce803
Author:rcarteraz
Committer:GitHub

Fix typo in MAKERFAB_RESERVED constant name

Commit:49d6d6c
Author:rcarteraz
Committer:GitHub

Rename SenseLoRA identifiers to Makerfabs

Commit:9332fe8
Author:James Rich

fix: buf-format module_config.proto reserved names to single line Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Commit:81a8075
Author:nomdetom

beacon: reference channel-table slot instead of embedding ChannelSettings BroadcastTarget carried a full ChannelSettings per entry (78 B x 4), which pushed ModuleConfig — and the FromRadio/ToRadio envelopes that embed it — past the 512-byte BLE packet budget, breaking the build (#error in PhoneAPI.h). Replace the embedded channel with `optional uint32 channel_index` (tag 4; old tag 3 left as a gap, branch unreleased) referencing a slot in the node's channel table. BroadcastTarget 78 -> 10 B; MeshBeaconConfig 596 -> 324 B. Also clarify that single-target and multi-target are equal, first-class options that differ only in channel representation (broadcast_on_channel inline vs. channel_index reference) — drop the misleading "legacy" label on the single-target path. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NRAF5csgsMn6p1zEcFL8Qz

Commit:baad8f6
Author:nomdetom

flags for beacons

Commit:8e1f576
Author:nomdetom
Committer:nomdetom

Add multi-target broadcast support to ModuleConfig

Commit:8968c77
Author:nomdetom
Committer:nomdetom

typoo

Commit:df742ac
Author:nomdetom
Committer:nomdetom

spaaaaaace

Commit:d0f3e0a
Author:nomdetom
Committer:nomdetom

legacy mode activate

Commit:e8b47a3
Author:nomdetom
Committer:nomdetom

mmmmm... beacon

Commit:383ac7c
Author:nomdetom
Committer:nomdetom

feat: add mesh_beacon field to LocalModuleConfig (localonly.proto)

Commit:be2d7e2
Author:nomdetom
Committer:nomdetom

fix: add missing channel.proto and config.proto imports to module_config

Commit:369550b
Author:nomdetom
Committer:nomdetom

feat: add MeshBeacon portnum, wire message, and module config

Commit:03314e6
Author:Ben Meadors
Committer:GitHub

Merge pull request #955 from NomDeTom/pr2-tmm-trim-bools Pr2 tmm trim bools

Commit:d4f7ddb
Author:nomdetom

TMM: remove bool toggles and position_precision_bits from TrafficManagementConfig Removes 9 fields that are either simple default-to-off bool toggles or derivable from other config, in favour of the "non-zero implies enabled" convention: Removed (tags reserved so they cannot be reused): 1 enabled 2 position_dedup_enabled 3 position_precision_bits — precision is now driven by the channel's own position_precision ceiling, not a separate TMM field 5 nodeinfo_direct_response 7 rate_limit_enabled 10 drop_unknown_enabled 12 exhaust_hop_telemetry 13 exhaust_hop_position 14 router_preserve_hops Kept (require numeric values): 4 position_min_interval_secs 6 nodeinfo_direct_response_max_hops 8 rate_limit_window_secs 9 rate_limit_max_packets 11 unknown_packet_threshold None of these tags shipped in a stable release. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Commit:007d7b2
Author:James Rich
Committer:James Rich

feat: add field metadata option + cross-language registry generators Introduces a structured (meshtastic.field_metadata) custom field option and build-time generators that expose it as reflection-free static accessors in every consumer language: KMP/Wire (Wire SchemaHandler in packages/kmp/buildSrc) and C/Python/TypeScript/Rust/Swift (the tools/protoc-gen-fieldmeta plugin). The TS target is wired into buf.gen.yaml and re-exported from mod.ts as FieldMeta. Generalizes the #905 experiment: one extensible FieldMetadata message carried in a single FieldOptions extension, so adding an attribute is a schema-only change (scalar-only, enforced at generation time) with no new extension number and no generator changes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Commit:ae2a14f
Author:James Rich

chore: format powermon.proto with buf 1.71 buf-action runs the latest buf (now 1.71.0), which normalizes block-comment indentation differently than the version master was last formatted with. This applies that formatting so the PR format check passes; no schema change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Commit:f16a13e
Author:copilot-swe-agent[bot]
Committer:GitHub

fix: apply buf formatting in powermon proto comment block

Commit:acde4f2
Author:Ben Meadors

Add LoRa region preset mapping to support region-specific modem presets

Commit:f5afb34
Author:Ben Meadors

Add MESHNOLOGY_W12 hardware model Add the Meshnology W12 to the HardwareModel enum.

Commit:1df6c11
Author:Ben Meadors
Committer:GitHub

Merge pull request #949 from meshtastic/master Master to develop backmerge

Commit:ebb6280
Author:Ben Meadors
Committer:GitHub

Merge pull request #948 from NomDeTom/pr1-nodedb-warmstore Move SNR in nodeDB to a Sint based figure, saving 2 bytes

Commit:0a6c063
Author:Ben Meadors

Add MESHNOLOGY_W10 hardware model Add the Meshnology W10 to the HardwareModel enum. Generated by Meshtastic Readyline.

Commit:59f225f
Author:Ben Meadors

Add W10 hardware model Add the Meshnology W10 to the HardwareModel enum. Generated by Meshtastic Readyline.

Commit:383c87c
Author:Ben Meadors
Committer:GitHub

Merge pull request #941 from vidplace7/ham-longname Add "Long_Name" to HamParameters

Commit:485ede7
Author:Ben Meadors

Fix long_name field size to 40 bytes for compatibility with legacy data

Commit:9dacd6b
Author:vidplace7
Committer:vidplace7

Add "Long_Name" to HamParameters Adds Long_Name HamParameters. This will be appended to the call_sign in firmware with a // delimter (following Amateur Radio best practices). Since the max length for a callsign is 8 and // uses two characters. The limit for HamParameter.long_name is set to 15 (10 less than traditional LongName). E.g. call_sign = N0CALL long_name = Attic Heltec v3 becomes N0CALL//Attic Heltec v3

Commit:9df55f6
Author:Quency-D

Add Heltec Mesh Tower V2 board.

Commit:064522f
Author:nomdetom

It would be a Sint do that

Commit:6f09e89
Author:Jonathan Bennett
Committer:GitHub

Add TRANSPORT_UNICAST_UDP to mesh.proto

Commit:c3937e3
Author:Manuel

-_-

Commit:bb9ad2d
Author:Manuel

fix comments

Commit:04838ac
Author:Manuel

add FULLY_CHARGED, NOT_PRESENT, NOT_PRESENT

Commit:0f9c24a
Author:vidplace7
Committer:vidplace7

Add ITU Region 2 Amateur Radio 1.25m band to Config message

Commit:8b68f27
Author:Austin
Committer:GitHub

Add TINY_FAST and TINY_SLOW presets for Amateur Radio compliance (#934)

Commit:e5f7870
Author:Manuel

fix complains about UNKNOWN

Commit:10178a0
Author:Manuel

add BatteryStatus enum

Commit:1009083
Author:Manuel

add new hardware models L2, P4

Commit:a9c8396
Author:copilot-swe-agent[bot]
Committer:GitHub

fix: revert unrelated MeshLink description edit

Commit:5b73986
Author:copilot-swe-agent[bot]
Committer:GitHub

fix: align Station G3 comment formatting in mesh proto

Commit:79185c6
Author:copilot-swe-agent[bot]
Committer:GitHub

Fix truncated mesh.proto: restore full file, add LockdownAuth.disable and LockdownStatus.State.DISABLED

Commit:7b46a8d
Author:copilot-swe-agent[bot]
Committer:GitHub

Preserve mesh.proto content and keep intended lockdown changes

Commit:e901d98
Author:niccellular
Committer:GitHub

Add lockdown disable to LockdownAuth and DISABLED to LockdownStatus Supports moving MESHTASTIC_LOCKDOWN from a compile-time build flag to a runtime, client-toggleable setting. - AdminMessage.LockdownAuth.disable (field 6): with a valid passphrase, reverts the device out of lockdown — decrypt all stored config back to plaintext, drop the wrapped DEK / unlock token / monotonic counter / backoff files, reboot into normal mode. APPROTECT is explicitly NOT reversed (the debug-port lockout is permanent on silicon where it is effective; only a full chip erase clears it). - FromRadio.LockdownStatus.State.DISABLED (value 5): reported by a lockdown-capable device that is not currently in lockdown, so a client can render its 'lockdown mode' toggle as OFF. Distinct from NEEDS_PROVISION, which is only used mid-enable.

Commit:519a0c7
Author:Ben Meadors

Merge remote-tracking branch 'origin/master' into develop

Commit:dd6c3f8
Author:Ben Meadors

Refactor DrawnShape vertices to use packed sint32 deltas and update TAKPacketV2 payload handling

Commit:e3c8af5
Author:Ben Meadors

TAK tweaks

Commit:83ce840
Author:Ben Meadors

Merge branch 'master' into develop

Commit:9ab4a1d
Author:Ben Meadors

Add TAKTALK message and room data structures to atak.proto

Commit:b9fe83c
Author:vidplace7
Committer:vidplace7

Update ham regions, split by ITU Stop combining ITU 2 and 3. They will need VERY different default slotOverrides (default freq). In effect, this means each ham band we support will need 3 "regions", ITU1, ITU2, ITU3. This will allow us to better support hams around the world without stirring anger.

Commit:ad3ecfb
Author:Austin
Committer:GitHub

Merge branch 'develop' into master-backmerge

Commit:2e284d9
Author:vidplace7

master: Split ITU regions for 2M ham bands

Commit:a5e522d
Author:Ben Meadors
Committer:GitHub

Merge pull request #920 from vidplace7/ham-70cm Add ITU Region 1 and Region 2/3 Amateur Radio 70cm regions

Commit:b61834f
Author:vidplace7

Add ITU Region 1 and Region 2/3 Amateur Radio 70cm band identifiers to config.proto

Commit:e978a18
Author:Thomas Göttgens

Merge remote-tracking branch 'origin/master' into develop

Commit:59cb394
Author:Thomas Göttgens
Committer:GitHub

Add T_ECHO_CARD identifier to mesh.proto (#919)

Commit:210542f
Author:Chloe Bethel
Committer:GitHub

Add rotated SH1107 display type (#913)

Commit:7006d5d
Author:Copilot
Committer:GitHub

Deprecate `ModuleConfig.MQTTConfig.json_enabled` after MQTT JSON removal (#890)

Commit:9d12def
Author:vidplace7
Committer:vidplace7

Add lilygo T-Impulse-Plus https://github.com/Xinyuan-LilyGO/T-Impulse-Plus

Commit:9ab0b36
Author:niccellular

Refine session-expiry behavior doc: decrement in place, reboot only on exhaustion The firmware was updated to decrement the on-flash boot count at each session expiry without rebooting (while budget remains), and only hard-lock + reboot when the boot count reaches zero. Mesh routing continues across session boundaries; per-connection auth is revoked and the screen lock re-engages at each roll so clients must re-auth to see content. The exposure ceiling is unchanged — the boot count still ticks down monotonically once per session boundary. Companion firmware change: meshtastic/firmware PR #10349 (commit d2b47e4ca).

Commit:7c44755
Author:niccellular

Fix off-by-one in exposure-ceiling formula The initial passphrase-unlocked session counts toward total exposure too, since boots_remaining is the count of *subsequent* token-driven auto-unlocks (not total sessions). Ceiling is (resolved_boot_count + 1) * max_session_seconds.

Commit:0db7809
Author:niccellular

Clarify exposure-ceiling formula re: boots_remaining=0 sentinel Address review feedback: the formula 'boots_remaining * max_session_seconds' is ambiguous because boots_remaining=0 in the request means 'use firmware default' (TOKEN_DEFAULT_BOOTS), not literally zero boots. A client that sends only max_session_seconds and leaves boots_remaining=0 cannot compute the ceiling from the raw request fields. Document that the formula uses the resolved (post-default) boot count, and call out the sentinel explicitly.

Commit:c0e9d0b
Author:niccellular

Add LockdownAuth.max_session_seconds for uptime-bounded sessions Per-boot cap on how long a single auto-unlocked session can hold the device's encrypted storage open, in seconds. 0 = unlimited (current behavior, suitable for unattended infrastructure nodes). When non-zero, the firmware arms an uptime timer at unlock. On expiry the device revokes per-connection auth, re-engages screen redaction, and reboots without deleting the token; next boot auto-unlocks via the boot-count TTL (decrementing boots_remaining) and arms a fresh session. Total exposure ceiling = boots_remaining * max_session_seconds. Uses CPU uptime (millis), not wall-clock time, so the cap is immune to GPS spoofing, RTC backup-battery removal, and Faraday cage isolation — none of those move the uptime counter. The only way to reset the session clock is a reboot, which costs a boot from the HMAC-bound on-flash counter. Companion firmware change: meshtastic/firmware PR #10349.

Commit:1089193
Author:Jonathan Bennett
Committer:GitHub

Add initial protobufs for XEdDSA (#753) * Add initial protobufs for XEdDSA * Add nodeinfo bool has_xeddsa_signed * Remove optional tag from xeddsa sig field * Add missed comment marker * Apply buf format to mesh.proto Agent-Logs-Url: https://github.com/meshtastic/protobufs/sessions/f6082d6b-c47b-42a3-bda3-e269d0b63226 Co-authored-by: thebentern <9000580+thebentern@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: thebentern <9000580+thebentern@users.noreply.github.com>

Commit:ff5b392
Author:Ben Meadors

Add precision_bits field to PositionLite message for node precision indication

Commit:f899d38
Author:Ben Meadors

Merge branch 'master' into develop

Commit:1c62540
Author:Ben Meadors
Committer:GitHub

Merge pull request #911 from niccellular/feature/lockdown-signaling Add LockdownAuth and LockdownStatus messages for hardened firmware builds

Commit:b302d92
Author:Ben Meadors

Add HardwareModel enum for B&Q Consulting Station G3

Commit:559f3c1
Author:Ben Meadors

Merge branch 'master' into develop

Commit:03eb534
Author:Ben Meadors

Fix formatting in mesh.proto and telemetry.proto by removing extra blank lines

Commit:46c0bec
Author:Ben Meadors
Committer:GitHub

Merge pull request #908 from Quency-D/heltec-mesh-node-t1 Add heltec-mesh-node-t1 product