All software

meshcore-go

Library / SDK Alpha

Pure 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

  • go install github.com/meshcore-go/meshcore-go go get github.com/meshcore-go/meshcore-go Open ↗
  • GitHub release Open ↗
  • Source Open ↗

Releases

from GitHub · updated 2026-07-03
  1. v1.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 / AddPolylineFactor encoders — Douglas-Peucker & perpendicular-distance simplification, error-feedback delta quantization, signed-nibble packing.
    • Variable-length polyline decoding in LPPDecode, new LPPCoordinate / LPPPolylineValue types and LPPPrecision / LPPSimplification enums.
    • NewLPPEncoderSize to match a specific CayenneLPP(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 test path != nil rather than len(path) > 0.

    Other

    • Decode end-marker aligned to MeshCore's LPPReader (stop on channel == 0, any type).
    • go.work.sum cleanup; submodule deps bumped to v1.0.9.

    Full Changelog: https://github.com/meshcore-go/meshcore-go/compare/v1.0.8...v1.0.9

  2. 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_DONE result of 0x00 as 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. Added BuildTextPlaintextWithAttempt.

    Other changes

    • SNR is now real dB (float32) everywhere instead of raw quarter-dB int8. RSSI is unchanged and the raw path-SNR bytes are still preserved. This is breaking — see below.
    • Added TX stats: Node.TxStats() returns a TxStats struct, plumbed through the transport/modem/tx-engine layers.
    • Added HasSignalInfo through 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); SetOutPath takes 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 int8float32 (real dB). PeerTable.Update is now Update(adv, snr float32, rssi int8, hasSignalInfo bool, pathHashes []byte) — update the call sites and stop treating SNR as raw quarter-dB.
  3. v1.0.7 # 1 month ago · 2026-06-12 01:21 UTC

    What's Changed

    DO NOT USE, Use 1.0.8 instead

    Full Changelog: https://github.com/meshcore-go/meshcore-go/compare/v1.0.6...v1.0.7

Show all 10 releases →

Project signals

popularity 2026-07-20 verification 2026-07-20
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.

Tags