meshcore-go
Library / SDK AlphaPure Go implementation of the MeshCore protocol. Provides encode/decode for all protocol payload types, cryptography, identity/key management, the companion protocol (frame layer, commands/responses, push notifications), serial/TCP transports, a high-level client, hardware modem abstraction with KISS framing, and a node runtime with routing and peer management.
- Maintainer
- meshcore-go ↗
- Kind
- Libraries & SDKs
- Maturity
- Alpha
- Language
- Go
- Licensing
- Open source
- Latest version
- 1.0.9 · 2026-06-28
- License
- MIT
- Platforms
- Linux macOS Windows ESP32
Capabilities
Interfaces
- ✓ API
- ✓ CLI
- ✓ Headless
Connections
- ✓ BLE
- ✓ Serial
- ✓ USB
- ✓ TCP
- ✓ WebSocket
Capabilities
- ✓ Messaging
- ✓ Contacts
- ✓ Channels
- ✓ Node configuration
- ✓ Remote administration
- ✓ Monitoring
- ✓ Telemetry
- ✓ Packet analysis
- ✓ Bridging
- ✓ Key management
Node role
- ✓ Companion
- ✓ Repeater
- ✓ Room server
Install
Releases
from GitHub · updated 2026-07-03v1.0.9 # Latest 22 days ago · 2026-06-28 23:14 UTC
Highlights
CayenneLPP Polyline (type 240)
Full Polyline codec, byte-compatible with ElectronicCats/CayenneLPP:
AddPolyline/AddPolylineFactorencoders — Douglas-Peucker & perpendicular-distance simplification, error-feedback delta quantization, signed-nibble packing.- Variable-length polyline decoding in
LPPDecode, newLPPCoordinate/LPPPolylineValuetypes andLPPPrecision/LPPSimplificationenums. NewLPPEncoderSizeto match a specificCayenneLPP(size)buffer.- Output verified byte-identical to the C++ reference on every input it can encode; also handles two inputs that crash the upstream library.
Routing fix
node: 0-hop direct neighbours now route direct instead of flooding — a non-nil zero-length path is a known route, so we testpath != nilrather thanlen(path) > 0.
Other
- Decode end-marker aligned to MeshCore's
LPPReader(stop onchannel == 0, any type). go.work.sumcleanup; submodule deps bumped to v1.0.9.
Full Changelog: https://github.com/meshcore-go/meshcore-go/compare/v1.0.8...v1.0.9
v1.0.8 # 1 month ago · 2026-06-12 01:39 UTC
meshcore-go — v1.0.8
Mostly about getting us in line with MeshCore 1.16. There's one breaking change (SNR is now float32), so callers will need a small update.
1.16 protocol
- Companion serial protocol updated for 1.16: added
CMD_SEND_RAW_PACKET(65), default flood scope get/set (63/64, RESP 28) and the unscoped-flood sub-type, and new push codes for LoginFail, ContactDeleted and ContactsFull. - Bumped MaxFrameSize 172 → 176 and now advertise protocol v3 so the firmware sends V3 message-recv frames.
- Renamed a few Companion constants to match firmware:
CmdSetRadioTxPower,CmdGetBattAndStorage,CmdSetFloodScopeKey,RespBattAndStorage. - ACKs now dedup by packet hash like everything else (1.16 dropped the separate ACK-CRC table). Retransmitted ACKs get forwarded again instead of being silently dropped.
- KISS: treat a
TX_DONEresult of0x00as a failed transmit. Firmware 1.16 sends that on radio-busy / airtime timeout. Baseline is now 1.16+. - Text retransmits are recomposed per attempt (attempt encoded in the flags
byte, plus a
[0x00][attempt]tail past attempt 3) so each retry has a unique hash and survives dedup. ACK CRC is recomputed each attempt. AddedBuildTextPlaintextWithAttempt.
Other changes
- SNR is now real dB (
float32) everywhere instead of raw quarter-dBint8. RSSI is unchanged and the raw path-SNR bytes are still preserved. This is breaking — see below. - Added TX stats:
Node.TxStats()returns aTxStatsstruct, plumbed through the transport/modem/tx-engine layers. - Added
HasSignalInfothrough the modem/transport/peer path so we only apply SNR/RSSI when the source actually has it (helps the TCP transport). - Peers can now carry multi-byte path hashes via
OutPathHashSize(1, 2 or 4; 0 means default of 1);SetOutPathtakes an optional hash size. - New
WithLearnedPathsOnly()option to restrict advert paths to learned ones. - Name truncation now respects UTF-8 boundaries.
Breaking
- SNR fields went
int8→float32(real dB).PeerTable.Updateis nowUpdate(adv, snr float32, rssi int8, hasSignalInfo bool, pathHashes []byte)— update the call sites and stop treating SNR as raw quarter-dB.
- Companion serial protocol updated for 1.16: added
v1.0.7 # 1 month ago · 2026-06-12 01:21 UTC
What's Changed
- v1.0.7 by @tuzzmaniandevil in https://github.com/meshcore-go/meshcore-go/pull/8
DO NOT USE, Use 1.0.8 instead
Full Changelog: https://github.com/meshcore-go/meshcore-go/compare/v1.0.6...v1.0.7
Project signals
- GitHub stars
- 11
- Forks
- 2
- Watchers
- 0
- Open issues
- 1
- Contributors
- 2
- Release downloads
- 0
- Latest downloads
- 0
- Source available
- Yes
- Releases available
- Yes
- Signed releases
- No
- CI builds
- Yes
- Documentation
- Yes
- Multi-module Go workspace with companion, hardware and transport submodules.