Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
4489 commits
Select commit Hold shift + click to select a range
139e45d
Update protobufs (#9588)
github-actions[bot] Feb 9, 2026
af18f06
Merge remote-tracking branch 'origin/master' into develop
thebentern Feb 9, 2026
df0ee74
Add battery curve for T-Beam 1 watt (#9585)
jp-bennett Feb 9, 2026
927a4e4
Update built-in documentation for current method of implementation (#…
Xaositek Feb 10, 2026
a092f6b
Refactor logging in ProtobufModule to ensure message details are logg…
NomDeTom Feb 10, 2026
6df0449
Upgrade trunk (#9581)
github-actions[bot] Feb 10, 2026
65adfa8
Automated version bumps (#9604)
github-actions[bot] Feb 11, 2026
44941b7
Add missing openocd_target to custom nrf52 boards (#9603)
Stary2001 Feb 11, 2026
6b73ac3
Upgrade trunk (#9599)
github-actions[bot] Feb 11, 2026
75f3d12
Add sdl libs for native builds (#9595)
jp-bennett Feb 11, 2026
e047397
Add missing openocd_target to custom nrf52 boards (#9603)
Stary2001 Feb 11, 2026
4954723
Automated version bumps (#9604)
github-actions[bot] Feb 11, 2026
f96a859
fix some random compiler warnings (#9596)
caveman99 Feb 11, 2026
5b03b1f
fix some random compiler warnings (#9596)
caveman99 Feb 11, 2026
648148a
Modify the dependency library of v4-tft (#9507)
Quency-D Feb 11, 2026
21d5a34
Update protobufs (#9605)
github-actions[bot] Feb 11, 2026
0adcadb
Modify the dependency library of v4-tft (#9507)
Quency-D Feb 11, 2026
c366e53
Merge branch 'master' into develop
thebentern Feb 11, 2026
97983d8
BaseUI: Favorite Screen Signal Quality improvement (#9566)
HarukiToreda Feb 11, 2026
31fe15b
ExternalNotification and StatusLED now call AmbientLighting to update…
jp-bennett Feb 11, 2026
6d299ea
Fixes on SCD4X admin comands (#9607)
oscgonfer Feb 11, 2026
15297cb
feat/add sfa30 (#9372)
oscgonfer Feb 11, 2026
640dd5f
Upgrade trunk (#9615)
github-actions[bot] Feb 12, 2026
f862915
chore(deps): update adafruit mpu6050 to v2.2.9 (#9611)
renovate[bot] Feb 12, 2026
bfbce2e
Log rxBad PacketHeaders with more info (id, relay_node) like printPac…
compumike Feb 12, 2026
8137200
chore(deps): update sensirion core to v0.7.3 (#9613)
renovate[bot] Feb 12, 2026
bcc2470
chore(deps): update neopixel to v1.15.4 (#9616)
renovate[bot] Feb 12, 2026
38c7ad0
Exclude status message module
thebentern Feb 12, 2026
1a7f560
fix: zero entire public key array instead of only first byte (#9619)
weebl2000 Feb 12, 2026
f10d786
Update protobufs (#9621)
github-actions[bot] Feb 12, 2026
b6e5534
Merge branch 'master' into develop
thebentern Feb 12, 2026
c332177
Xiao NRF - define suitable i2c pins for the sub-variants (#8866)
NomDeTom Feb 12, 2026
d5bde83
Upgrade trunk (#9631)
github-actions[bot] Feb 13, 2026
947f817
Update src/detect/ScanI2C.cpp
thebentern Feb 13, 2026
3d649d5
Update src/modules/Telemetry/Sensor/SFA30Sensor.cpp
thebentern Feb 13, 2026
c79e192
Update src/modules/Telemetry/Sensor/SFA30Sensor.cpp
thebentern Feb 13, 2026
71edf2f
Update src/modules/Telemetry/Sensor/SFA30Sensor.cpp
thebentern Feb 13, 2026
d770ef2
Update src/mesh/NodeDB.cpp
thebentern Feb 13, 2026
c8ff02c
Merge branch 'master' into develop
thebentern Feb 14, 2026
df14561
convert GPS global and some new in gps.cpp to unique_ptr (#9628)
Jorropo Feb 14, 2026
e1f9ccd
replace delete in RedirectablePrint.cpp with std::unique_ptr (#9642)
Jorropo Feb 14, 2026
aed2c7c
replace delete in EInkDynamicDisplay.{cpp,h} with std::unique_ptr (#9…
Jorropo Feb 14, 2026
184e4dd
Undefine LED_BUILTIN for Heltec v2 variant (#9647)
ericbarch Feb 14, 2026
ff485d5
replace delete in RadioInterface.cpp with std::unique_ptr (#9645)
Jorropo Feb 14, 2026
167bcf2
fix typo in PIN_GPS_SWITCH (#9648)
Jorropo Feb 14, 2026
b0bd3df
replace delete in CryptoEngine.{cpp,h} with std::unique_ptr (#9649)
Jorropo Feb 14, 2026
dbef1de
workaround NCP5623 and LP5562 I2C builds (#9652)
Jorropo Feb 14, 2026
545826d
replace delete in AudioThread.h with std::unique_ptr (#9651)
Jorropo Feb 15, 2026
778823e
Add USB_MODE=1 for Station G2 (#9660)
h3lix1 Feb 16, 2026
32db700
InkHUD: Favorite Map Applet (#9654)
HarukiToreda Feb 16, 2026
56fd9c7
fix a lot of low level cppcheck warnings (#9623)
caveman99 Feb 16, 2026
57268bf
Feat/add scd30 (#9609)
oscgonfer Feb 16, 2026
321ccbf
Upgrade trunk (#9661)
github-actions[bot] Feb 16, 2026
0cbf53b
fix: respect DontMqttMeBro flag regardless of channel PSK (#9626)
weebl2000 Feb 16, 2026
5feba46
our firmware action is too clever
caveman99 Feb 16, 2026
6b44b57
fix detection of SCD30 by checking if the size of the return from a 2…
caveman99 Feb 16, 2026
a227fd7
#9623 resolved a local shadow of next_key by converting it to int. (#…
caveman99 Feb 16, 2026
a4ba312
zip a few gitrefs down (#9672)
caveman99 Feb 17, 2026
3ca68e7
InkHUD: Allow non-system applets to subscribe to input events (#9514)
Vortetty Feb 17, 2026
f94c01b
Upgrade trunk (#9671)
github-actions[bot] Feb 17, 2026
4fccda2
Concurrency: Modern Periodic wrapper class. (#9501)
harry-iii-lord Feb 17, 2026
357a33f
chore(deps): update actions/stale action to v10.2.0 (#9669)
renovate[bot] Feb 17, 2026
178c311
Fake IAQ values on Non-BSEC2 platforms like Platformio and the origin…
caveman99 Feb 17, 2026
5408e81
Upgrade trunk (#9683)
github-actions[bot] Feb 18, 2026
86986d6
ULED_BUILTIN for 9m2ibr_aprs_lora_tracker (#9685)
mrekin Feb 19, 2026
d0cf79a
Upgrade trunk (#9692)
github-actions[bot] Feb 19, 2026
4c91bee
Develop to master (#9618)
thebentern Feb 19, 2026
2b6d8f6
Merge branch 'develop'
thebentern Feb 19, 2026
a77ac21
Trunk
thebentern Feb 19, 2026
15460c8
Update meshtastic-GxEPD2 digest to c7eb4c3 (#9694)
renovate[bot] Feb 19, 2026
840b298
skip header items when enabling the InkHUD menu cursor (#9552)
zeropt Feb 20, 2026
6bc3e31
Upgrade trunk (#9696)
github-actions[bot] Feb 20, 2026
8f81b19
BLE Pairing fix (#9701)
HarukiToreda Feb 20, 2026
299ef95
Revert "Add agc reset attempt (#8163)" (#9702)
thebentern Feb 20, 2026
8c37d69
Add #include "RadioLibInterface.h"
thebentern Feb 20, 2026
af518fb
Hold GC1109 FEM power during deep sleep for LNA RX wake (#9572)
weebl2000 Feb 20, 2026
a5523b0
Fix/rak3401 button (#9668)
LN4CY Feb 21, 2026
8feb34e
RadioLib edge-triggered interrupts robustness (#9658)
compumike Feb 21, 2026
f615990
Limit http connections and add free heap check before allocating for …
thebentern Feb 21, 2026
9383d0b
Apply SX1262 register 0x8B5 patch for improved GC1109 RX sensitivity …
weebl2000 Feb 21, 2026
f8cc1d6
Merge remote-tracking branch 'origin/develop'
thebentern Feb 22, 2026
0726a9f
chore(deps): update radiolib to v7.6.0 (#9695)
renovate[bot] Feb 22, 2026
7df37f8
chore(deps): update radiolib to v7.6.0 (#9695)
renovate[bot] Feb 22, 2026
417ca86
Split module includes for AQ module (#9711)
oscgonfer Feb 23, 2026
4f84cf0
Upgrade trunk (#9724)
github-actions[bot] Feb 23, 2026
99e88bb
Support mini ePaper S3 Kit (#9335)
mverch67 Feb 23, 2026
607b631
meshtasticd: Add Luckfox Lyra Hat pinmaps (#9730)
vidplace7 Feb 24, 2026
13b25c0
chore(deps): update meshtastic-st7789 digest to 9ee76d6 (#9729)
renovate[bot] Feb 24, 2026
f9d1f24
chore(deps): update sensorlib to v0.3.4 (#9727)
renovate[bot] Feb 24, 2026
cf998f0
Upgrade trunk (#9731)
github-actions[bot] Feb 24, 2026
9c439f8
FIx loophole with telemetry coercion
thebentern Feb 24, 2026
02d42f8
Implement 'agc' reset for SX126x & LR11x0 chip families (#9705)
weebl2000 Feb 24, 2026
cac45d9
Align telemetry broadcast want_response behavior with traceroute (#9717)
thebentern Feb 24, 2026
c65eecc
Update protobufs (#9739)
github-actions[bot] Feb 24, 2026
2c18a41
Merge remote-tracking branch 'origin/master' into develop
thebentern Feb 24, 2026
58496e5
fail cppcheck on low already. Code quality for the win.
caveman99 Feb 24, 2026
ad7d19c
Remove unused global rIf that shadows locals and fails cppcheck (#9743)
Feb 25, 2026
54781cf
hopefully fix remaining cppcheck issues (#9745)
caveman99 Feb 25, 2026
a93d4d7
Revert "Fix/rak3401 button (#9668)" (#9747)
thebentern Feb 25, 2026
25f086a
Upgrade trunk (#9744)
github-actions[bot] Feb 25, 2026
5a06843
Add GPIO_DETECT_PA portduino config, and support 13302 detection with…
jp-bennett Feb 25, 2026
3b1b308
platform: nrf52: Fix typo in BLEDfuSecure filename (#9709)
KokoSoft Feb 26, 2026
3a74e04
Add Transmit history persistence for respecting traffic intervals bet…
thebentern Feb 26, 2026
efd68f9
Fix Bluetooth on RAK Ethernet Gateway by removing MESHTASTIC_EXCLUDE_…
thebentern Feb 26, 2026
ef69731
Merge remote-tracking branch 'origin/develop'
thebentern Feb 26, 2026
b5f98d1
chore(deps): update adafruit_tsl2561 to v1.1.3 (#9757)
renovate[bot] Feb 26, 2026
2a99cc6
chore(deps): update adafruit mlx90614 to v2.1.6 (#9756)
renovate[bot] Feb 26, 2026
75cb8bb
chore(deps): update platformio/espressif32 to v6.13.0 (#9759)
renovate[bot] Feb 26, 2026
d34fa3e
chore(deps): update platformio/nordicnrf52 to v10.11.0 (#9760)
renovate[bot] Feb 26, 2026
83cac93
fix(MQTT): Send first MapReport as soon as possible (#8872)
ndoo Feb 27, 2026
857c7b3
Don't launch canned message when waking screen or silencing notificat…
jp-bennett Feb 27, 2026
c28bdbd
Fix mqtt test
thebentern Feb 28, 2026
43aa90f
Unlock 0x8B5 register macro guard for SX162 (#9777)
thebentern Feb 28, 2026
fc0ad49
chore(deps): update adafruit ahtx0 to v2.0.6 (#9766)
renovate[bot] Feb 28, 2026
60c2592
chore(deps): update adafruit dps310 to v1.1.6 (#9763)
renovate[bot] Feb 28, 2026
1e16185
chore(deps): update platformio/ststm32 to v19.5.0 (#9764)
renovate[bot] Feb 28, 2026
2b7a230
Upgrade trunk (#9752)
github-actions[bot] Feb 28, 2026
6920a5f
Increase PSRAM malloc threshold from 256 bytes to 2048 bytes (#9758)
thebentern Feb 28, 2026
c7dc536
Merge remote-tracking branch 'origin/develop'
thebentern Feb 28, 2026
67f806b
Merge remote-tracking branch 'origin/master' into develop
thebentern Feb 28, 2026
563adc6
enhancement(mesh): remove late packets from tx queue when full (#9779)
m1nl Feb 28, 2026
3f5dc78
Update log verbiage to remove GC1109 reference
thebentern Feb 28, 2026
80af726
avoid memory leak when possibly malformed packet received (#9781)
m1nl Mar 1, 2026
8093e2e
Bug: Mqtt fix testcase due to immediately sending MapReport (#8872) (…
h3lix1 Mar 2, 2026
cb93826
Upgrade trunk (#9785)
github-actions[bot] Mar 2, 2026
65eee22
chore(deps): update github artifact actions (#9767)
renovate[bot] Mar 2, 2026
1d90ea6
chore(deps): update crazy-max/ghaction-import-gpg action to v7 (#9787)
renovate[bot] Mar 2, 2026
5f852a1
Add ADS1115 ADC to recognition as used on RAK6421 Hat (#9790)
caveman99 Mar 3, 2026
1e34c1e
Remove "x" permission bits from some source files (#9794)
ldoolitt Mar 3, 2026
85be596
Upgrade trunk (#9795)
github-actions[bot] Mar 3, 2026
eb2f3ce
Update protobufs (#9797)
github-actions[bot] Mar 3, 2026
3601eab
Improve resource cleanup on connection close (and make server API a u…
thebentern Mar 3, 2026
deb45e4
spelling fixes (#9801)
ldoolitt Mar 4, 2026
0d46943
chore(deps): update docker/login-action action to v4 (#9806)
renovate[bot] Mar 4, 2026
8d73d67
chore(deps): update docker/setup-qemu-action action to v4 (#9807)
renovate[bot] Mar 4, 2026
153ab81
Deb: Handle offline builds more gracefully (#9791)
vidplace7 Mar 4, 2026
1fad7fa
Upgrade trunk (#9805)
github-actions[bot] Mar 4, 2026
f7f356e
chore(deps): update arduinojson to v6.21.6 (#9788)
renovate[bot] Mar 4, 2026
90742fc
chore(deps): update dorny/test-reporter action to v2.6.0 (#9796)
renovate[bot] Mar 4, 2026
b7bf251
Scaling tweaks (#9653)
NomDeTom Mar 4, 2026
5ced739
Add heltec-v4.3 board (#9753)
Quency-D Mar 4, 2026
3972fe1
Merge remote-tracking branch 'origin/master' into develop
thebentern Mar 4, 2026
65bf163
Add some lora parameter clamping logic to coalesce to defaults and en…
thebentern Mar 4, 2026
7ea28d3
Add back FEM LNA mode configuration for LoRa (#9809)
thebentern Mar 4, 2026
6bbdfe1
Merge remote-tracking branch 'origin/develop'
thebentern Mar 4, 2026
66161da
spelling fixes in .md files (#9810)
ldoolitt Mar 4, 2026
1626836
fix: add ROUTER_LATE to infrastructure init and config preservation (…
h3lix1 Mar 5, 2026
a8fed32
fix: add ROUTER_LATE to telemetry impolite role check (#9819)
h3lix1 Mar 5, 2026
935b050
Update protobufs (#9825)
github-actions[bot] Mar 5, 2026
6ba82ed
fix: prevent router-like roles from auto-favoriting DM peers (#9821)
h3lix1 Mar 5, 2026
42075da
Upgrade trunk (#9823)
github-actions[bot] Mar 5, 2026
fe4e75e
fix: add ROUTER_LATE and TAK_TRACKER to congestion scaling exemption …
h3lix1 Mar 5, 2026
22031c5
fix: treat ROUTER_LATE like ROUTER for power management and defaults …
h3lix1 Mar 5, 2026
58736f5
fix: add ROUTER_LATE to rebroadcast integrity checks (#9816)
h3lix1 Mar 5, 2026
20f838a
Add explicit dependency on mklittlefs. (#9708)
cpatulea Mar 5, 2026
afd5e29
More RAK6421 work (#9813)
jp-bennett Mar 5, 2026
9e40c88
Don't double-blink Thinknode-M1 Power LED while charging (#9829)
jp-bennett Mar 6, 2026
fdd17ac
chore(deps): update docker/metadata-action action to v6 (#9833)
renovate[bot] Mar 6, 2026
5cf3652
chore(deps): update docker/build-push-action action to v7 (#9832)
renovate[bot] Mar 6, 2026
3f5828c
chore(deps): update docker/setup-buildx-action action to v4 (#9824)
renovate[bot] Mar 6, 2026
969aefa
Cardputer Kit (#9540)
caveman99 Mar 6, 2026
cb28c38
fix(t1000e): reclassify P0.04 as sensor power enable GPIO (#9826)
weebl2000 Mar 6, 2026
4ec59ce
Upgrade trunk (#9835)
github-actions[bot] Mar 6, 2026
3d524be
Update Heltec Tracker v2 to version KCT8103L. (#9822)
Quency-D Mar 6, 2026
5b94f58
PPA: Remove Ubuntu 25.04, Add 26.04 (#9789)
vidplace7 Mar 6, 2026
5b1ea92
InkHUD: Nodelist cleanup (#9737)
HarukiToreda Mar 6, 2026
20db5fd
Fix WisMesh Tap V2 env mess (#9734)
thebentern Mar 6, 2026
86dad90
Fix nRF52 AsyncUDP multicast TX/RX race condition causing garbled pac…
PhilipLykov Mar 6, 2026
0ed537a
Add json file rotation option (#9783)
jp-bennett Mar 6, 2026
ffe6f70
Merge remote-tracking branch 'origin/develop'
thebentern Mar 6, 2026
b941dab
Add APIPort to native config (#9840)
pdxlocations Mar 6, 2026
6658ec2
chore(deps): update neopixel to v1.15.4 (#9839)
renovate[bot] Mar 7, 2026
393cd96
Merge remote-tracking branch 'origin/develop'
thebentern Mar 7, 2026
398d1ad
chore(deps): update meshtastic-esp32_https_server digest to b78f12c (…
renovate[bot] Mar 7, 2026
5d12edb
Add convenience userpref for disabling lora during development and te…
thebentern Mar 7, 2026
f185abb
Debian: Extend sourcedeb cache expiration (#9858)
vidplace7 Mar 8, 2026
6cbb9ab
Gate chatty smart broadcast debug message behind GPS_DEBUG
thebentern Mar 8, 2026
391928e
Add include directive for mbedtls error handling in build flags
thebentern Mar 9, 2026
a79b75a
Update ESP8266Audio dependency to Meshtastic fork for compatibility (…
thebentern Mar 9, 2026
0797378
chore(deps): update meshtastic/device-ui digest to 622b034 (#9864)
renovate[bot] Mar 9, 2026
0668b82
Upgrade trunk (#9868)
github-actions[bot] Mar 9, 2026
d7d08a4
Upgrade trunk (#9877)
github-actions[bot] Mar 10, 2026
d9e2b12
Experiment: C++17 support (#9874)
thebentern Mar 11, 2026
429cf51
Upgrade trunk (#9883)
github-actions[bot] Mar 11, 2026
421f9af
Automated version bumps (#9886)
github-actions[bot] Mar 11, 2026
60730a7
Initialize LoRaFEMInterface with default fem_type
thebentern Mar 11, 2026
b155a63
pioarduino Heltec v4: fix build due to LED_BUILTIN compile error. (#9…
cpatulea Mar 10, 2026
3ef7a15
Update GxEPD2 to v1.6.8 (#9918)
renovate[bot] Mar 16, 2026
5275092
Upgrade trunk (#9893)
github-actions[bot] Mar 17, 2026
fe8bfa0
Add new RAK 13302 power curve (#9929)
jp-bennett Mar 17, 2026
b7379f1
Update protobufs (#9930)
github-actions[bot] Mar 17, 2026
39aefde
chore(deps): update pnpm/action-setup action to v5 (#9926)
renovate[bot] Mar 17, 2026
aebcb34
Upgrade trunk (#9923)
github-actions[bot] Mar 18, 2026
4fbd5c9
Ensure infrastructure role-based minimums are coerced since they don'…
thebentern Mar 18, 2026
d369825
chore(deps): update meshtastic/device-ui digest to f36d2a9 (#9940)
renovate[bot] Mar 18, 2026
6f5448f
rotated MUI (#9938)
mverch67 Mar 19, 2026
458e46b
Upgrade trunk (#9943)
github-actions[bot] Mar 19, 2026
344fe2f
hexDump: Add const to the buf parameter in hexDump. (#9944)
fw190d13 Mar 19, 2026
76b6eaa
BaseUI: Emote Refactoring (#9896)
HarukiToreda Mar 18, 2026
7404228
Fix: Traceroute through MQTT misses uplink node if MQTT is encrypted …
domusonline Mar 16, 2026
3673af4
Remove GPS Baudrate locking for Seeed Xiao S3 Kit (#9374)
fifieldt Mar 16, 2026
58fee80
Add spoof detection for UDP packets in UdpMulticastHandler (#9905)
NomDeTom Mar 15, 2026
e282491
Remove a bunch of warnings in SEN5X (#9884)
oscgonfer Mar 12, 2026
286bc85
T-mini Eink S3 Support for both InkHUD and BaseUI (#9856)
HarukiToreda Mar 9, 2026
e1d238b
Remove early return during scan of BME address for BMP sensors (#9935)
NomDeTom Mar 19, 2026
ea3386f
fix(tlora-pager): Remove SDCARD_USE_SPI1 so SX1262 and SD card can sh…
ndoo Mar 19, 2026
e4c5bfd
Fix NodeInfo suppression logic to ensure suppression only applies to …
thebentern Mar 19, 2026
532a63e
Enable LNA by default for Heltec v4.3 (#9906)
weebl2000 Mar 19, 2026
2aefd38
Fix RAK4631 Ethernet gateway API connection loss after W5100S brownou…
PhilipLykov Mar 19, 2026
1fe9a41
Fix for preserving pki_encrypted and public_key when relaying UDP mul…
niklaswall Mar 19, 2026
139b970
Upgrade trunk (#9961)
github-actions[bot] Mar 21, 2026
d09433e
Update protobufs (#9972)
github-actions[bot] Mar 22, 2026
948c28a
fix: MQTT settings silently fail to persist when broker is unreachabl…
rcatal01 Mar 19, 2026
e30294b
Fixes #9792 : Hop with Meshtastic ffff and ?dB is added to missing ho…
domusonline Mar 20, 2026
8fa5b4f
Fix: Enable touch-to-backlight on T-Echo (not just T-Echo Plus) (#9953)
okturan Mar 22, 2026
c77b10a
Add LED_BUILTIN for variant tlora_v1 (#9973)
RobertSasak Mar 22, 2026
5a8ce60
add heltec_mesh_node_t096 board. (#9960)
Quency-D Mar 22, 2026
723209b
Fixes #9850: Double space issue with Cyrillic OLED font (#9971)
dev-nightcore Mar 23, 2026
5716aeb
Cleanup GH Actions
vidplace7 Mar 23, 2026
0ad1b66
Update dorny/test-reporter action to v3 (#9981)
renovate[bot] Mar 23, 2026
450f2ad
Remove unneeded GH perms
vidplace7 Mar 23, 2026
2e2993f
Add gnu++17 standard to nRF52840 build flags
thebentern Mar 24, 2026
163c548
fix: Cardputer-Adv I2S sound (#9963)
mverch67 Mar 24, 2026
d693fd4
Exclude accelerometer on new MESHTASTIC_EXCLUDE_ACCELEROMETER flag (#…
thebentern Mar 25, 2026
3b079c9
T5-4.7-S3 Epaper Pro support (#6625)
mverch67 Mar 25, 2026
b9bdc87
Update External Notifications with a full redo of logic gates (#10006)
Xaositek Mar 25, 2026
c4bac04
Exclude web server, paxcounter and few others from original ESP32 gen…
thebentern Mar 25, 2026
5a00988
Deps: Cleanup LewisHe library references (#10007)
vidplace7 Mar 25, 2026
e7e34e8
Dependencies: Remove all fuzzy-matches, spot-add renovate (#10008)
vidplace7 Mar 26, 2026
3b29eea
Update Adafruit_BME680 to v2.0.6 (#10009)
renovate[bot] Mar 26, 2026
3d4f0b8
Upgrade trunk (#9978)
github-actions[bot] Mar 27, 2026
993c242
Supporting STM32WL is like squeezing blood from a stone (#10015)
Stary2001 Mar 27, 2026
068f5af
Add meshtasticd config metadata (#10001)
vidplace7 Mar 27, 2026
99abfeb
Fix TransmitHistory to improve epoch handling (#10017)
thebentern Mar 27, 2026
aec98b6
MUI: WiFi map tile download: heltec V4 adaptations (#10011)
mverch67 Mar 27, 2026
844f5b4
Update meshtastic/device-ui digest to 7b1485b (#10023)
renovate[bot] Mar 29, 2026
80763ca
Move core lib_deps to github zips
vidplace7 Mar 29, 2026
976d201
Hack: Use re-uploaded framework-arduinoespressif32 on ESP32c6
vidplace7 Mar 29, 2026
29d7085
Renovate: Run once daily (not upon EVERY change)
vidplace7 Mar 29, 2026
1983398
Upgrade trunk (#10033)
github-actions[bot] Mar 30, 2026
2955c12
Configure NFC pins as GPIO for older bootloaders (#10016)
NomDeTom Mar 30, 2026
870ba80
wio-sdk-wm1110: inherit build_unflags (#10034)
vidplace7 Mar 30, 2026
0abd3cd
ESP32: Take away "tbeam" boards PSRAM to reclaim iram (#10036)
vidplace7 Mar 30, 2026
33d526f
Set t5s3_epaper_inkhud to `extra` (#10037)
vidplace7 Mar 30, 2026
4e05f20
Renovate: Don't update branches outside the schedule (daily) (#10039)
vidplace7 Mar 30, 2026
8fe12e9
Fix W5100S socket exhaustion blocking MQTT and additional TCP clients…
PhilipLykov Mar 30, 2026
3ad80b8
MUI: WiFi map tile download: heltec V4 adaptations (#10011)
mverch67 Mar 27, 2026
9e61c44
fix(routing): prevent licensed users from rebroadcasting packets to o…
NomDeTom Mar 22, 2026
90befee
Add timeout to PPA uploads (#9989)
vidplace7 Mar 24, 2026
8c90542
Fix rak_wismeshtag low‑voltage reboot hang after App configuration (#…
Ethan-chen1234-zy Mar 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
52 changes: 52 additions & 0 deletions .clusterfuzzlite/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# This container is used to build Meshtastic with the libraries required by the fuzzer.
# ClusterFuzzLite starts the container, runs the build.sh script, and then exits.

# As this is not a long running service, health-checks are not required. ClusterFuzzLite
# also only works if the user remains unchanged from the base image (it expects to run
# as root).
# trunk-ignore-all(trivy/DS026): No healthcheck is needed for this builder container
# trunk-ignore-all(checkov/CKV_DOCKER_2): No healthcheck is needed for this builder container
# trunk-ignore-all(checkov/CKV_DOCKER_3): We must run as root for this container
# trunk-ignore-all(trivy/DS002): We must run as root for this container
# trunk-ignore-all(checkov/CKV_DOCKER_8): We must run as root for this container
# trunk-ignore-all(hadolint/DL3002): We must run as root for this container

FROM gcr.io/oss-fuzz-base/base-builder:v1

ENV PIP_ROOT_USER_ACTION=ignore

# trunk-ignore(hadolint/DL3008): apt packages are not pinned.
# trunk-ignore(terrascan/AC_DOCKER_0002): apt packages are not pinned.
RUN apt-get update && apt-get install --no-install-recommends -y \
cmake git zip libgpiod-dev libbluetooth-dev libi2c-dev \
libunistring-dev libmicrohttpd-dev libgnutls28-dev libgcrypt20-dev \
libusb-1.0-0-dev libssl-dev pkg-config libsqlite3-dev libsdl2-dev && \
apt-get clean && rm -rf /var/lib/apt/lists/* && \
pip install --no-cache-dir -U \
platformio==6.1.16 \
grpcio-tools==1.68.1 \
meshtastic==2.5.9

# Ugly hack to avoid clang detecting a conflict between the math "log" function and the "log" function in framework-portduino/cores/portduino/logging.h
RUN sed -i -e 's/__MATHCALL_VEC (log,, (_Mdouble_ __x));//' /usr/include/x86_64-linux-gnu/bits/mathcalls.h

# A few dependencies are too old on the base-builder image. More recent versions are built from source.
WORKDIR $SRC
RUN git config --global advice.detachedHead false && \
git clone --depth 1 --branch 0.8.0 https://github.com/jbeder/yaml-cpp.git && \
git clone --depth 1 --branch v2.3.3 https://github.com/babelouest/orcania.git && \
git clone --depth 1 --branch v1.4.20 https://github.com/babelouest/yder.git && \
git clone --depth 1 --branch v2.7.15 https://github.com/babelouest/ulfius.git

COPY ./.clusterfuzzlite/build.sh $SRC/

WORKDIR $SRC/firmware
COPY . $SRC/firmware/

# https://docs.platformio.org/en/latest/envvars.html
ENV PLATFORMIO_CORE_DIR=$SRC/pio/core \
PLATFORMIO_LIBDEPS_DIR=$SRC/pio/libdeps \
PLATFORMIO_PACKAGES_DIR=$SRC/pio/packages \
PLATFORMIO_SETTING_ENABLE_CACHE=No \
PIO_ENV=buildroot
RUN platformio pkg install --environment $PIO_ENV
59 changes: 59 additions & 0 deletions .clusterfuzzlite/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# ClusterFuzzLite for Meshtastic

This directory contains the fuzzer implementation for Meshtastic using the ClusterFuzzLite framework.
See the [ClusterFuzzLite documentation](https://google.github.io/clusterfuzzlite/) for more details.

## Running locally

ClusterFuzzLite uses the OSS-Fuzz toolchain. To build the fuzzer manually, first grab a copy of OSS-Fuzz.

```shell
git clone https://github.com/google/oss-fuzz.git
cd oss-fuzz
```

To build the fuzzer, run:

```shell
python3 infra/helper.py build_image --external $PATH_TO_MESHTASTIC_FIRMWARE_DIRECTORY
python3 infra/helper.py build_fuzzers --external $PATH_TO_MESHTASTIC_FIRMWARE_DIRECTORY --sanitizer address
```

To run the fuzzer, run:

```shell
python3 infra/helper.py run_fuzzer --external --corpus-dir=<path-to-temp-corpus-dir> $PATH_TO_MESHTASTIC_FIRMWARE_DIRECTORY router_fuzzer
```

More background on these commands can be found in the
[ClusterFuzzLite documentation](https://google.github.io/clusterfuzzlite/build-integration/#testing-locally).

## router_fuzzer.cpp

This fuzzer submits MeshPacket protos to the `Router::enqueueReceivedMessage` method. It takes the binary
data from the fuzzer and decodes that data to a MeshPacket using nanopb. A few fields in
the MeshPacket are modified by the fuzzer.

- If the `to` field is 0, it will be replaced with the NodeID of the running node.
- If the `from` field is 0, it will be replaced with the NodeID of the running node.
- If the `id` field is 0, it will be replaced with an incrementing counter value.
- If the `pki_encrypted` field is true, the `public_key` field will be populated with the first admin key.

The `router_fuzzer_seed_corpus.py` file contains a list of MeshPackets. It is run from inside build.sh and
writes the binary MeshPacket protos to files. These files are use used by the fuzzer as its initial seed data,
helping the fuzzer to start off with a few known inputs.

### Interpreting a fuzzer crash

If the fuzzer crashes, it'll write the input bytes used for the test case to a file and notify about the
location of that file. The contents of the file are a binary serialized MeshPacket protobuf. The following
snippet of Python code can be used to parse the file into a human readable form.

```python
from meshtastic.protobuf import mesh_pb2

mesh_pb2.MeshPacket.FromString(open("crash-XXXX-file", "rb").read())
```

Consider adding any such crash results to the `router_fuzzer_seed_corpus.py` file to ensure there a isn't
a future regression for that crash test case.
71 changes: 71 additions & 0 deletions .clusterfuzzlite/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#!/bin/bash -eu

# Build Meshtastic and a few needed dependencies using clang++
# and the OSS-Fuzz required build flags.

env

cd "$SRC"
NPROC=$(nproc || echo 1)

LDFLAGS=-lpthread cmake -S "$SRC/yaml-cpp" -B "$WORK/yaml-cpp/$SANITIZER" \
-DBUILD_SHARED_LIBS=OFF
cmake --build "$WORK/yaml-cpp/$SANITIZER" -j "$NPROC"
cmake --install "$WORK/yaml-cpp/$SANITIZER" --prefix /usr

cmake -S "$SRC/orcania" -B "$WORK/orcania/$SANITIZER" \
-DBUILD_STATIC=ON
cmake --build "$WORK/orcania/$SANITIZER" -j "$NPROC"
cmake --install "$WORK/orcania/$SANITIZER" --prefix /usr

cmake -S "$SRC/yder" -B "$WORK/yder/$SANITIZER" \
-DBUILD_STATIC=ON -DWITH_JOURNALD=OFF
cmake --build "$WORK/yder/$SANITIZER" -j "$NPROC"
cmake --install "$WORK/yder/$SANITIZER" --prefix /usr

cmake -S "$SRC/ulfius" -B "$WORK/ulfius/$SANITIZER" \
-DBUILD_STATIC=ON -DWITH_JANSSON=OFF -DWITH_CURL=OFF -DWITH_WEBSOCKET=OFF
cmake --build "$WORK/ulfius/$SANITIZER" -j "$NPROC"
cmake --install "$WORK/ulfius/$SANITIZER" --prefix /usr

cd "$SRC/firmware"

PLATFORMIO_EXTRA_SCRIPTS=$(echo -e "pre:.clusterfuzzlite/platformio-clusterfuzzlite-pre.py\npost:.clusterfuzzlite/platformio-clusterfuzzlite-post.py")
STATIC_LIBS=$(pkg-config --libs --static libulfius openssl libgpiod yaml-cpp bluez --silence-errors)
export PLATFORMIO_EXTRA_SCRIPTS
export STATIC_LIBS
export PLATFORMIO_WORKSPACE_DIR="$WORK/pio/$SANITIZER"
export TARGET_CC=$CC
export TARGET_CXX=$CXX
export TARGET_LD=$CXX
export TARGET_AR=llvm-ar
export TARGET_AS=llvm-as
export TARGET_OBJCOPY=llvm-objcopy
export TARGET_RANLIB=llvm-ranlib

mkdir -p "$OUT/lib"

cp .clusterfuzzlite/*_fuzzer.options "$OUT/"

for f in .clusterfuzzlite/*_fuzzer.cpp; do
fuzzer=$(basename "$f" .cpp)
cp -f "$f" src/fuzzer.cpp
pio run -vvv --environment "$PIO_ENV"
program="$PLATFORMIO_WORKSPACE_DIR/build/$PIO_ENV/meshtasticd"
cp "$program" "$OUT/$fuzzer"

# Copy shared libraries used by the fuzzer.
read -d '' -ra shared_libs < <(ldd "$program" | sed -n 's/[^=]\+=> \([^ ]\+\).*/\1/p') || true
cp -f "${shared_libs[@]}" "$OUT/lib/"

# Build the initial fuzzer seed corpus.
corpus_name="${fuzzer}_seed_corpus"
corpus_generator="$PWD/.clusterfuzzlite/${corpus_name}.py"
if [[ -f $corpus_generator ]]; then
mkdir "$corpus_name"
pushd "$corpus_name"
python3 "$corpus_generator"
popd
zip -D "$OUT/${corpus_name}.zip" "$corpus_name"/*
fi
done
35 changes: 35 additions & 0 deletions .clusterfuzzlite/platformio-clusterfuzzlite-post.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"""PlatformIO build script (post: runs after other Meshtastic scripts)."""

import os
import shlex

from SCons.Script import DefaultEnvironment

env = DefaultEnvironment()

# Remove any static libraries from the LIBS environment. Static libraries are
# handled in platformio-clusterfuzzlite-pre.py.
static_libs = set(lib[2:] for lib in shlex.split(os.getenv("STATIC_LIBS")))
env.Replace(
LIBS=[
lib for lib in env["LIBS"] if not (isinstance(lib, str) and lib in static_libs)
],
)

# FrameworkArduino/portduino/main.cpp contains the "main" function the binary.
# The fuzzing framework also provides a "main" function and needs to be run
# before Meshtastic is started. We rename the "main" function for Meshtastic to
# "portduino_main" here so that it can be called inside the fuzzer.
env.AddPostAction(
"$BUILD_DIR/FrameworkArduino/portduino/main.cpp.o",
env.VerboseAction(
" ".join(
[
"$OBJCOPY",
"--redefine-sym=main=portduino_main",
"$BUILD_DIR/FrameworkArduino/portduino/main.cpp.o",
]
),
"Renaming main symbol to portduino_main",
),
)
52 changes: 52 additions & 0 deletions .clusterfuzzlite/platformio-clusterfuzzlite-pre.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
"""PlatformIO build script (pre: runs before other Meshtastic scripts).

ClusterFuzzLite executes in a different container from the build. During the build,
attempt to link statically to as many dependencies as possible. For dependencies that
do not have static libraries, the shared library files are copied to the output
directory by the build.sh script.
"""

import glob
import os
import shlex

from SCons.Script import DefaultEnvironment, Literal

env = DefaultEnvironment()

cxxflags = shlex.split(os.getenv("CXXFLAGS"))
sanitizer_flags = shlex.split(os.getenv("SANITIZER_FLAGS"))
lib_fuzzing_engine = shlex.split(os.getenv("LIB_FUZZING_ENGINE"))
statics = glob.glob("/usr/lib/lib*.a") + glob.glob("/usr/lib/*/lib*.a")
no_static = set(("-ldl",))


def replaceStatic(lib):
"""Replace -l<libname> with the static .a file for the library."""
if not lib.startswith("-l") or lib in no_static:
return lib
static_name = f"/lib{lib[2:]}.a"
static = [s for s in statics if s.endswith(static_name)]
if len(static) == 1:
return static[0]
return lib


# Setup the environment for building with Clang and the OSS-Fuzz required build flags.
env.Append(
CFLAGS=os.getenv("CFLAGS"),
CXXFLAGS=cxxflags,
LIBSOURCE_DIRS=["/usr/lib/x86_64-linux-gnu"],
LINKFLAGS=cxxflags
+ sanitizer_flags
+ lib_fuzzing_engine
+ ["-stdlib=libc++", "-std=c++17"],
_LIBFLAGS=[replaceStatic(s) for s in shlex.split(os.getenv("STATIC_LIBS"))]
+ [
"/usr/lib/x86_64-linux-gnu/libunistring.a", # Needs to be at the end.
# Find the shared libraries in a subdirectory named lib
# within the same directory as the binary.
Literal("-Wl,-rpath,$ORIGIN/lib"),
"-Wl,-z,origin",
],
)
1 change: 1 addition & 0 deletions .clusterfuzzlite/project.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
language: c++
Loading
Loading