Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
318 commits
Select commit Hold shift + click to select a range
8ebdae9
Bound payload.bytes prints by payload.size (#11032)
caveman99 Jul 17, 2026
ed3afdb
TrafficManagement: don't learn identity from a signer's unsigned Node…
caveman99 Jul 17, 2026
a7fde71
PhoneAPI: gate local admin on the connection, not the wire from (#11033)
caveman99 Jul 17, 2026
a3c8778
stm32wl(rak3172): implement cpuDeepSleep()/shutdown() via STM32LowPow…
ndoo Jul 17, 2026
d5f78a3
XModem: reject path-traversal filenames in the transfer handler (#11037)
caveman99 Jul 17, 2026
f6f3284
fix(lockdown): re-lock serial console admin auth on USB link drop (#1…
thebentern Jul 17, 2026
8147970
AdminModule: only accept admin responses to requests we sent (#11024)
caveman99 Jul 17, 2026
cfecef5
Channels: fix off-by-one bound in decryptForHash (#11046)
caveman99 Jul 17, 2026
6e0e9c1
Protobufs
thebentern Jul 17, 2026
985b983
TrafficManagement: gate role/NodeInfo cache writes on signer authenti…
caveman99 Jul 17, 2026
7318014
Add userprefs for telemetry screen settings (#11051)
oscgonfer Jul 17, 2026
ac027ec
chore(deps): update meshtastic-esp8266-oled-ssd1306 digest to 9d9ba7e…
renovate[bot] Jul 17, 2026
d4aa776
Use hardware RNG for session passkey and PKC extra nonce (#11047)
caveman99 Jul 17, 2026
37fdbb4
Add RAK WisMesh Pod variant and fix Tag LPCOMP wake on user shutdown …
Ethan-chen1234-zy Jul 18, 2026
40d0d80
chore(deps): update adafruit pct2075 to v1.3.1 (#11055)
renovate[bot] Jul 18, 2026
b20d899
Stop accelerometer thread when double-tap/wake-on-motion disabled at …
thebentern Jul 18, 2026
cae27c1
Add retries for SCD4X data reading (#11058)
oscgonfer Jul 18, 2026
ff95105
test: correct native-suite-count to 37 (#11059)
NomDeTom Jul 18, 2026
b56b35f
chore(deps): update platform-native digest to 86c62ed (#11054)
renovate[bot] Jul 19, 2026
a4ea55f
Fix renovate comments (#11065)
vidplace7 Jul 19, 2026
b8b5582
Regioninfo (#11056)
NomDeTom Jul 19, 2026
8c6cc5d
Don't show messages from Ignored nodes (#11068)
HarukiToreda Jul 19, 2026
4726375
Update protos
thebentern Jul 19, 2026
a808e99
Add native Windows build of meshtasticd (#11031)
caveman99 Jul 19, 2026
59ab126
Merge develop into packet authentication policy
RCGV1 Jul 19, 2026
19ddadf
Check for the SPI bufsize, and throw a useful error when set too smal…
jp-bennett Jul 20, 2026
ba8b1b1
Treat backslash as a path separator in XModem filename validation (#1…
caveman99 Jul 20, 2026
023351a
Remove dead code (#11082)
caveman99 Jul 20, 2026
405a6bf
Strip inner-message padding when sizing unsigned broadcasts (#11083)
caveman99 Jul 20, 2026
5ded0ec
Gate identity learning on signature in NodeDB::updateUser (#11084)
caveman99 Jul 20, 2026
829ff80
fix(t5s3-epaper): 40MHz octal PSRAM; guard EInk init; esp32s3 sw-atom…
thebentern Jul 20, 2026
290967f
Release packets the interface declines to send (#11087)
caveman99 Jul 20, 2026
5cf3463
fix: don't wipe admin keys when regenerating the keypair (#11088)
thebentern Jul 20, 2026
0199a1f
Bounds-check detection sensor trigger type (#11091)
caveman99 Jul 20, 2026
08cfb3d
Merge upstream develop into packet authentication policy
RCGV1 Jul 20, 2026
e061335
Reserve the [Exit] slot when splitting canned messages (#11095)
caveman99 Jul 20, 2026
67e2012
fix: declare loop variable `sa` as const pointer in t5s3_epaper varia…
Copilot Jul 20, 2026
beb9a30
Merge branch 'develop' into codex/packet-auth-policy
thebentern Jul 20, 2026
51019b1
Hold cryptLock around RNG use in admin and key verification (#11096)
caveman99 Jul 20, 2026
09de848
Ignore notification (#11076)
HarukiToreda Jul 20, 2026
fb75410
Null-check packet allocations in allocForSending and its callers (#11…
caveman99 Jul 20, 2026
6f522aa
Return the secret sentinel for remote admin config gets (#11093)
caveman99 Jul 20, 2026
b8fb42c
Fix bell-append off-by-one write past payload buffer (#11099)
caveman99 Jul 20, 2026
61750d9
Update meshtastic/device-ui digest to ef573c3 (#11080)
renovate[bot] Jul 20, 2026
1317176
test: accept DECODE_OPAQUE/DECODE_POLICY_REJECT in perhapsDecode fuzz…
thebentern Jul 21, 2026
d9f8839
Accept a pending key only for the key-verification exchange (#11107)
caveman99 Jul 21, 2026
53e5101
Bound remote-initiated key verification sessions (#11101)
caveman99 Jul 21, 2026
65abfaa
Improve user experience with a new GPS icon for Home and Position fra…
Xaositek Jul 21, 2026
bd71ad2
Remove BASEUI_HAS_GAMES flag from portduino.ini (#11113)
jp-bennett Jul 21, 2026
8b0f290
fix: include board PSRAM class in the HybridCompile sdkconfig cache k…
thebentern Jul 21, 2026
b299cc2
Honour which_payload_variant on MQTT client-proxy ingress (#11097)
caveman99 Jul 21, 2026
40e583c
Limit node database churn from unauthenticated packets (#11102)
caveman99 Jul 21, 2026
077c6e7
Corroborate traceroute next-hop updates against the relaying node (#1…
caveman99 Jul 21, 2026
6bff231
Throttle NodeInfo direct responses (#11104)
caveman99 Jul 21, 2026
7bdc256
Budget the admin-key PKI decrypt fallback (#11100)
caveman99 Jul 21, 2026
0165e91
fix: gate module replies by request port (#11094)
thebentern Jul 21, 2026
efd620b
ci: enforce native-suite-count against test/ directories at PR time
NomDeTom Jul 21, 2026
1872e5b
TMM extend to ephemeral 3rd tier store (#11050)
NomDeTom Jul 21, 2026
e247f70
test: drain toPhoneQueue in MQTT test to fix ASan leak
thebentern Jul 21, 2026
ed96b0a
Merge branch 'meshtastic:develop' into nailed-test-number
NomDeTom Jul 21, 2026
7d954e6
Merge branch 'develop' into codex/packet-auth-policy
thebentern Jul 21, 2026
d587f08
Pin admin responses to the stored peer key and request id (#11092)
caveman99 Jul 21, 2026
e11635b
Merge branch 'develop' into codex/packet-auth-policy
thebentern Jul 21, 2026
a58daf0
Don't misdetect the ES7210 audio codec as an INA219 (#11120)
thebentern Jul 21, 2026
6fc7c1b
test: unset force_simradio so admin request pinning is exercised
thebentern Jul 21, 2026
ef386af
Fixes SEEED Indicator when booting to BaseUI
Xaositek Jul 21, 2026
fdb7668
Merge pull request #11124 from meshtastic/fix/admin-pin-tests-simradio
thebentern Jul 21, 2026
5548bd3
Merge pull request #10967 from RCGV1/codex/packet-auth-policy
thebentern Jul 21, 2026
9cce994
phoneapi: send status message config
RCGV1 Jul 21, 2026
dbe41e4
keyverification: handle response allocation failure
RCGV1 Jul 21, 2026
91915a0
Merge commit '5548bd3195c18ec9274b2ff8171504acfc2647b3' into agent/in…
RCGV1 Jul 21, 2026
566d95f
test: terminate status message fixture
RCGV1 Jul 21, 2026
4906f8a
Run native PlatformIO tests by area for readable failures
caveman99 Jul 21, 2026
6e48fac
Merge pull request #11125 from meshtastic/baseui_fixindicator
thebentern Jul 21, 2026
dfee95c
Consolidate per-area reports into testreport.xml for downstream consu…
caveman99 Jul 21, 2026
d811835
nitpicks and guards
NomDeTom Jul 21, 2026
9f6fb6b
Merge branch 'develop' into nailed-test-number
NomDeTom Jul 21, 2026
d5bb2c2
fix a nitpicky semgrep
NomDeTom Jul 21, 2026
d195ec6
fix(security): round-trip packet policy defaults
RCGV1 Jul 21, 2026
df971c2
Merge branch 'develop' into agent/include-statusmessage-config
thebentern Jul 21, 2026
72aac12
Merge branch 'develop' into agent/keyverification-allocation-safety
thebentern Jul 21, 2026
6e37b53
Merge pull request #11134 from RCGV1/codex/verify-packet-auth-config-…
thebentern Jul 21, 2026
99efee5
Merge branch 'meshtastic:develop' into nailed-test-number
NomDeTom Jul 22, 2026
c6669a4
Merge pull request #11128 from RCGV1/agent/keyverification-allocation…
thebentern Jul 22, 2026
b800c18
Update RAK13800-W5100S to v1.0.3
renovate[bot] Jul 22, 2026
5e3d1ea
Merge pull request #11129 from RCGV1/agent/include-statusmessage-config
thebentern Jul 22, 2026
1d6f8a8
Merge pull request #11130 from meshtastic/ci-native-tests-by-area
thebentern Jul 22, 2026
c263a9e
Merge pull request #11136 from meshtastic/renovate/rak13800-w5100s-1.x
thebentern Jul 22, 2026
11c510f
WIP: Big Display Node (#10926)
caveman99 Jul 22, 2026
f09f2b1
Gate the PKI-decrypt key on signer-proven, not the opportunistic cach…
caveman99 Jul 22, 2026
b9c7858
enable autoLDRO on LR2021 (#11139)
caveman99 Jul 22, 2026
f90c134
Merge pull request #11117 from NomDeTom/nailed-test-number
thebentern Jul 22, 2026
583248c
claw back some space from signing policies
NomDeTom Jul 22, 2026
9662c81
Merge pull request #11148 from NomDeTom/flash-clawback
thebentern Jul 22, 2026
cad3a3a
Always exclude range test
thebentern Jul 22, 2026
1804fd1
Merge pull request #11150 from meshtastic/always-exclude-rangetest
thebentern Jul 22, 2026
8acb7fe
test: cover coerced packet signature policy
RCGV1 Jul 22, 2026
8a99805
Merge pull request #11154 from RCGV1/codex/fix-packet-policy-excluded…
thebentern Jul 22, 2026
2c1fd6b
fix(ScanI2C): fetch the SE050 probe response with requestFrom() (#11133)
cvaldess Jul 23, 2026
efc9708
Add userpref for the packet signature policy default (#11144)
thebentern Jul 23, 2026
ef1aedd
Fixes a crash when you favorite a node (#11146)
Xaositek Jul 23, 2026
d9150e8
ci: warn and skip the pio check job on transient network failures (#1…
thebentern Jul 23, 2026
876962e
Protos
thebentern Jul 23, 2026
d0d029c
Update python to v3.14.6 (#11063)
renovate[bot] Jul 23, 2026
6908d27
Enable merge queues (#11162)
vidplace7 Jul 23, 2026
372b751
Actions: Run --level pr on merge_group (for now) (#11186)
vidplace7 Jul 24, 2026
b08c04f
Add Meshnology W12 (WiFi LoRa 32 V5) LR2021 board support (#10910)
thebentern Jul 24, 2026
79ade46
lint: clean up pr_tests workflow lint findings (#11169)
Jorropo Jul 24, 2026
419e8ee
lint: fix stale trivy rule codes in clusterfuzzlite Dockerfile (#11165)
Jorropo Jul 24, 2026
ee74c3c
lint: suppress intentional root USER in runtime Dockerfiles (#11166)
Jorropo Jul 24, 2026
4c17dda
lint: drop dead terrascan ignore in devcontainer Dockerfile (#11167)
Jorropo Jul 24, 2026
01d1873
Deliver locally-generated replies addressed to us to the phone (#11185)
thebentern Jul 24, 2026
becfb77
nrf52: fix BLE-task stack overflow crashing pairing and wiping Little…
thebentern Jul 24, 2026
7754068
Only build 2 docker images upon PR
vidplace7 Jul 24, 2026
0ef375d
Actions: Add caching for MacOS and Windows build workflows (#11194)
vidplace7 Jul 24, 2026
88e287f
Remove docker buildkit layer caching (for now) (#11195)
vidplace7 Jul 24, 2026
f4f35bc
lint: drop dead CKV2_GHA_1 ignore in main_matrix workflow (#11170)
Jorropo Jul 24, 2026
e50572b
Save/Restore seperately in MacOS/Windows caching workflows. (#11199)
vidplace7 Jul 24, 2026
5b7ee51
Actions: Also cache wasm (#11200)
vidplace7 Jul 24, 2026
36fdbdd
Update LovyanGFX to v1.2.26 (#11157)
renovate[bot] Jul 24, 2026
b46c8c9
Router: defer nested local sends to avoid handleReceived re-entrancy …
caveman99 Jul 24, 2026
3f4e7cc
Fix nRF52 freeze + watchdog reset when saving config over BLE (#11202)
thebentern Jul 25, 2026
abf217c
fix(mesh): don't assert on malloc() failure in MemoryDynamic::alloc()…
ndoo Jul 25, 2026
9e529da
replace screens with unique_ptr (#11163)
Jorropo Jul 25, 2026
b9a5443
Fix multicast address (#8612)
sjm42 Jul 25, 2026
6d944e4
Switch to forked pioarduino platform (with penv fixes for CI issues) …
vidplace7 Jul 25, 2026
8e104a9
fix(admin): persist TAK module config (team color / member role) (#11…
jamesarich Jul 25, 2026
6111a54
lint: drop redundant quotes in .coderabbit.yaml (#11168)
Jorropo Jul 26, 2026
e700cc7
lint: drop redundant bandit ignores in c3 exception decoder (#11173)
Jorropo Jul 26, 2026
6be7d9c
lint: hoist stdlib imports above Import(env) in add_mbedtls_sources (…
Jorropo Jul 26, 2026
4800484
lint: ignore userPrefs.jsonc in trunk (#11174)
Jorropo Jul 26, 2026
67e12dc
Trunk: Only cache nightly runs, base on develop (#11240)
vidplace7 Jul 26, 2026
2c8a2a8
Docker: Only cache qemu/buildx on default branch (#11241)
vidplace7 Jul 26, 2026
69b68e2
ESP32: Don't run pkg install on build (#11243)
vidplace7 Jul 26, 2026
5c5cb09
fix(admin): stop the admin dispatcher from overflowing the ESP32 loop…
thebentern Jul 26, 2026
45cb8e7
feat: preserve normal radio profiles across event firmware (#11110)
RCGV1 Jul 26, 2026
1e982fa
Sign plaintext packets in licensed mode (#10969)
RCGV1 Jul 27, 2026
a640d44
Add T-Beam BPF - 144-148 Mhz LoRa @ ~37 dBm (5 Watts) (#10558)
vidplace7 Jul 27, 2026
f61f658
fix(promicro): exclude emoji to fit under the warm-store region (#11256)
thebentern Jul 27, 2026
ae16c05
Time out an abandoned admin edit transaction (#11254)
thebentern Jul 27, 2026
80f9726
Null-check reply allocations in allocErrorResponse and RemoteHardware…
caveman99 Jul 27, 2026
3e2c984
nRF52: don't truncate the AES-CTR block length to uint8_t (#11261)
caveman99 Jul 27, 2026
134fe5e
Stop BLE log streaming from starving the NimBLE notify pool (#11253)
thebentern Jul 27, 2026
cdd9962
Release the opaque relay copy the interface declines to send (#11262)
caveman99 Jul 27, 2026
dafa583
Actions: Do not build meshtasticd for event/ branches
vidplace7 Jul 27, 2026
5f51bb1
MUI: Portduino curl maps (#11214)
mverch67 Jul 28, 2026
2a20ee5
ESP32: link via @response files across the family, not just P4
thebentern Jul 28, 2026
a8623a6
Stream our own position to the phone/UI while mesh position sharing i…
thebentern Jul 28, 2026
2c57a17
Phantom node fix perhaps (#11271)
NomDeTom Jul 28, 2026
d87cbec
Remove esp32c6 guard precluding NonBlockingRTTTL (#11273)
vidplace7 Jul 28, 2026
b4ff1df
chore(deps): update platformio/ststm32 to v19.7.1 (#11263)
renovate[bot] Jul 29, 2026
0fef83d
Add configurable event mode hop limit (#11275)
RCGV1 Jul 29, 2026
2024bb8
Arrival time fix perhaps (#11274)
NomDeTom Jul 29, 2026
50a37b3
chore(deps): update meshtastic/device-ui digest to bcb327f (#11276)
renovate[bot] Jul 29, 2026
df6e67f
Signing and ingress hardening (#11282)
caveman99 Jul 29, 2026
daf1213
Licensed channel defaults, phone map growth, and payload read bounds …
caveman99 Jul 29, 2026
9c260ad
Signature key resolution and a send-path leak (#11283)
caveman99 Jul 29, 2026
9a37250
fix(router): clear failed reliable send retries (#11267)
RCGV1 Jul 30, 2026
21e3a58
Yaml check for Meshtasticd (#11224)
NomDeTom Jul 30, 2026
16765dd
Upgrade trunk (#11251)
github-actions[bot] Jul 30, 2026
047c4e9
add LR 2021 to portduino, and allow Framebuffer devices to rotate the…
caveman99 Jul 30, 2026
fc67590
Lockdown PIN redaction, a build guard, and favorite compaction (#11285)
caveman99 Jul 30, 2026
a5940b4
Guard the deferred local queue and depth counter (#11284)
caveman99 Jul 30, 2026
06577e6
tying up some loose ends (#11292)
NomDeTom Jul 30, 2026
84322af
Add support for a new nRF variant constructed by soldering an E22 (#7…
brad112358 Jul 30, 2026
597f676
Add Elecrow ThinkNode M8 board support (thinknode_m8) (#11226)
caveman99 Jul 30, 2026
a0c4987
Narrow "PR" candidates (now only 17) (#11294)
vidplace7 Jul 30, 2026
2192087
Actions: Add explicit ci-gate, cleanup conditionals (#11296)
vidplace7 Jul 31, 2026
02ea5ba
Pioarduino 3.3.11 (#11238)
vidplace7 Jul 30, 2026
ecd59e3
Package meshtasticd for Windows as an MSI (#11289)
caveman99 Jul 31, 2026
575788a
Implement Fixes for Meshnology W12's Two Color Display (#11288)
Xaositek Jul 31, 2026
6367132
Fix the NMEA checksum offset and harden the buffer writes around it (…
caveman99 Jul 31, 2026
e26b6bf
TMM & Warmstore key source naming (#11119)
NomDeTom Jul 31, 2026
e2460b5
MUI: stop holding the SPI bus across the whole UI cycle (#11278)
thebentern Jul 31, 2026
33a0f8f
Add libcurl as a build dependency for meshtasticd packages (#11303)
vidplace7 Jul 31, 2026
76f4340
Add explicit board_level = release (#11305)
vidplace7 Jul 31, 2026
44dbcaa
Actions: Add caching for PlatformIO in native tests workflow (#11309)
vidplace7 Jul 31, 2026
3d8ff48
BaseUI: Clean up dead code (#11306)
Xaositek Jul 31, 2026
5bfad25
Remove Ubuntu 'questing' series from PPA and release channel workflow…
vidplace7 Jul 31, 2026
85c1bd4
Address STM32 cppcheck warnings (#11314)
vidplace7 Aug 1, 2026
478206e
NodeDB: Change pointer to const for mesh node retrieval in loadFromDi…
vidplace7 Aug 1, 2026
d0e9d02
Update meshtastic/device-ui digest to 95483d8 (#11318)
renovate[bot] Aug 1, 2026
1d2fb23
Consolidate drawGps related code (#11304)
Xaositek Aug 1, 2026
25996e9
Fix W12 battery reading: add ADC_CTRL and correct the divider ratio (…
thebentern Aug 1, 2026
4b4e82b
SenseCAP Indicator: RP2040 peripherals for the main firmware (#6220)
caveman99 Aug 1, 2026
ad5d877
Fix cppcheck redundantAssignment for OLED_GEOMETRY_OVERRIDE variants …
vidplace7 Aug 1, 2026
d9f1622
Update ci-gate condition to check event types and cancellation status…
vidplace7 Aug 1, 2026
f481585
Make GxEPD2_Multi non-copyable to address cppcheck warnings (#11326)
vidplace7 Aug 1, 2026
dc67d3b
Update stale bot action to version 11 (#11330)
vidplace7 Aug 1, 2026
88a1866
Actions: Restrict 'check' jobs to only run for pull requests and merg…
vidplace7 Aug 1, 2026
854eae4
QMA6100PSingleton constructor fix pio check warnings (#11313)
vidplace7 Aug 1, 2026
8d3ad2a
Remove board_check (now using normal matrix) (#11312)
vidplace7 Aug 2, 2026
c0ddb20
Fix up the BiColor boot screen (#11334)
Xaositek Aug 3, 2026
41c5c92
serial heap status messages (#11340)
NomDeTom Aug 3, 2026
5792e87
Fix PMSA003 Enables on RAK4631 (#11331)
oscgonfer Aug 3, 2026
ddb7bbf
fix(power): support SGM41562 family on T-Impulse Plus (#11298)
Llgok Aug 3, 2026
58657d4
Re-enable mbedtls secp384r1 on ESP32 (#11344)
caveman99 Aug 3, 2026
8c0ef44
Add one wire i2c bridge support (#10078)
oscgonfer Aug 3, 2026
9e60b23
Targeted build fixes, especially Heltec T1 (#11345)
Xaositek Aug 3, 2026
b4969a4
Update earlephilhower/arduino-pico to 5.7.0 (#11333)
vidplace7 Aug 3, 2026
ee5f24f
T-Beam BPF: Use the correct SVG (#11352)
vidplace7 Aug 3, 2026
6eac181
use PSRAM for MBED TLS (#11350)
mverch67 Aug 4, 2026
56da28f
Update earlephilhower/arduino-pico to 6.0.0 (#11351)
vidplace7 Aug 4, 2026
98813fe
Shared e-ink hardware layer: foundation for target-by-target migratio…
caveman99 Aug 4, 2026
b026bfb
8mb partition table for ThinkNode-M7 (#11338)
jp-bennett Aug 4, 2026
7302db1
Update LoRa firmware on Thinknode M7 (#11337)
jp-bennett Aug 4, 2026
d89f3eb
fix(api): bound the stream drain so a full config dump can't starve t…
cvaldess Aug 4, 2026
39e7aa6
Full T-echo card support + Compact UI (#11342)
HarukiToreda Aug 4, 2026
1dde97f
Fix stack buffer overflow in aes_ccm_encr for partial blocks (#11347)
matutetandil Aug 4, 2026
40f4a95
Update meshtastic-esp8266-oled-ssd1306 digest to ace0fcb (#11356)
renovate[bot] Aug 5, 2026
03e6b80
Serial config validation (#11339)
NomDeTom Aug 5, 2026
e78b121
Lr1121 tcxo optional tries xtal first, and get all my yamls in a row …
NomDeTom Aug 5, 2026
b59cd58
Add HM330x PM Sensor (#11069)
oscgonfer Aug 5, 2026
74b9f6f
BaseUI: Select Environmental Data Source (#11209)
HarukiToreda Aug 5, 2026
08722da
fix(lr2021): live LF↔HF reconfigure via full begin() (#11279)
Ethan-chen1234-zy Aug 5, 2026
32c3b62
fix(BaseUI): restore node list menu swallowed by module-frame SELECT …
Ixitxachitl Aug 5, 2026
45f0f1e
fix(rak4631): enable GPS power rail for WisMesh Repeater Mini (#11360)
Ethan-chen1234-zy Aug 6, 2026
9cd73fe
Update meshtastic/device-ui digest to 289daf6 (#11295)
renovate[bot] Aug 6, 2026
7d54c13
fix(crypto): hash full size_t inputs (#11359)
RCGV1 Aug 6, 2026
de6b231
Test suite rebuild (#11322)
NomDeTom Aug 6, 2026
5f198c4
nrf52: reclaim flash on the three targets nearest the warm-store cap …
NomDeTom Aug 8, 2026
5692518
Update meshtastic/device-ui digest to 4f150e5 (#11376)
renovate[bot] Aug 9, 2026
cd716fe
logging: audit log strings for terseness, reclaiming ~6.8 KB of strin…
jp-bennett Aug 10, 2026
e958f7b
Add the PMU button handling to BPF (#11379)
jp-bennett Aug 10, 2026
2e95882
fix(BaseUI): suppress new-message pop-up while a menu is on screen (#…
jp-bennett Aug 10, 2026
512154f
feat(BaseUI): show 'GPS Time Only' when GNSS has time but no position…
jp-bennett Aug 10, 2026
80d1623
fix(lora): skip DIO detach when no ISR is attached (#11386)
caveman99 Aug 10, 2026
b1132cf
fix static IP on wired ETH (#11385)
caveman99 Aug 10, 2026
37d35c7
Uncomment CALIBRATE_TOUCH in platformio.ini (#11387)
caveman99 Aug 10, 2026
87857e7
Update earlephilhower/arduino-pico to 6.0.0 on rp2350 as well (#11383)
t-miura Aug 10, 2026
ad1dd14
fix(bin): repair the Windows device-install and device-update scripts…
caveman99 Aug 10, 2026
fa87730
fix(rak4631_eth_gw): handle multicast socket exhaustion (#11132)
gdiciocco Aug 10, 2026
b8dee13
fix(BaseUI): never render banner font tags ([S]/[M]/[L]) as literal t…
jp-bennett Aug 11, 2026
bcf486f
fix(Power): survive a BQ27220 fuel gauge that fails to init (#11401)
caveman99 Aug 11, 2026
546b9d9
Block coordinate traffic on configured event channels (#11045)
ayysasha Aug 11, 2026
e8dae92
Update GitHub Actions workflow for protobufs, allow cross-branch gene…
caveman99 Aug 11, 2026
c6a2081
Update protobufs (#11406)
github-actions[bot] Aug 11, 2026
fb17f6d
Add LoRa FEM LNA toggle menu support (#11341)
Quency-D Aug 11, 2026
5d04f86
fix(Radio): reject bogus coding rate and length readbacks on RX (#11408)
caveman99 Aug 11, 2026
cb557d8
Multi one wire measurements (#10192)
oscgonfer Aug 11, 2026
97f8361
Correct for awake time in AQ telemetry (#11404)
oscgonfer Aug 11, 2026
9cc1ff9
The position block is for a single event, so disable by default (#11411)
jp-bennett Aug 11, 2026
d765bd9
Fix the all-zero MAC address for own node (#11409)
jp-bennett Aug 11, 2026
af56a11
Replace native-suite-count file with dynamic test discovery (#11413)
jp-bennett Aug 11, 2026
204f88d
fix(nrf54l15): restore the nrf54l15dk build (#11410)
cvaldess Aug 11, 2026
87a009d
fix(nrf52): LTO was dropping the board variant's weak hook overrides …
thebentern Aug 11, 2026
c5979a8
Update meshtastic/device-ui digest to 6e5e3b6 (#11419)
renovate[bot] Aug 12, 2026
5baad2e
logging: compile out LOG_TRACE by default, demote chatty DEBUG lines,…
jp-bennett Aug 12, 2026
ea1e6b8
Update meshtastic/device-ui digest to 7bfabe5 (#11421)
renovate[bot] Aug 12, 2026
7415f1b
Merge branch 'develop' into feat/as3935-lightning-sensor
caveman99 Aug 12, 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
  •  
  •  
  •  
7 changes: 2 additions & 5 deletions .clusterfuzzlite/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,16 @@
# 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(trivy/DS-0026): 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
# trunk-ignore-all(trivy/DS-0002): 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 libjsoncpp-dev libbluetooth-dev libi2c-dev \
libunistring-dev libmicrohttpd-dev libgnutls28-dev libgcrypt20-dev \
Expand Down
4 changes: 2 additions & 2 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ reviews:
drafts: false
# Review PRs regardless of target branch.
base_branches:
- ".*"
- .*
# Skip Renovate dependency updates - CI gates dependencies; we review for substance, not every bump.
ignore_usernames:
- renovate
Expand All @@ -27,7 +27,7 @@ reviews:
- "!protobufs/**"

path_instructions:
- path: "bin/config.d/**"
- path: bin/config.d/**
instructions: >
meshtasticd configuration files. Bundled with meshtasticd Linux/MacOS packaging.
Ensure configurations include metadata found in other configs.
1 change: 0 additions & 1 deletion .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# trunk-ignore-all(terrascan/AC_DOCKER_0002): Known terrascan issue
# trunk-ignore-all(hadolint/DL3008): Do not pin apt package versions
# trunk-ignore-all(hadolint/DL3013): Do not pin pip package versions
FROM mcr.microsoft.com/devcontainers/cpp:2-debian-13
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"features": {
"ghcr.io/devcontainers/features/python:1": {
"installTools": true,
"version": "3.13"
"version": "3.14"
}
},
"customizations": {
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/setup-native/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ runs:
- name: Install libs needed for native build
shell: bash
run: |
sudo apt-get install -y libbluetooth-dev libgpiod-dev libyaml-cpp-dev libjsoncpp-dev openssl libssl-dev libulfius-dev liborcania-dev libusb-1.0-0-dev libi2c-dev libuv1-dev
sudo apt-get install -y libbluetooth-dev libgpiod-dev libyaml-cpp-dev libjsoncpp-dev openssl libssl-dev libulfius-dev liborcania-dev libusb-1.0-0-dev libi2c-dev libuv1-dev libcurl4-gnutls-dev
103 changes: 77 additions & 26 deletions .github/copilot-instructions.md

Large diffs are not rendered by default.

15 changes: 15 additions & 0 deletions .github/node-id-format-allowlist.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Exception list for bin/lint-node-id-format.sh (trunk linter: node-id-format).
#
# Format: <path>[:<line>] <reason>
# - "<path>" exempts the whole file
# - "<path>:<line>" exempts one call site
# - blank lines and # comments are ignored; the reason column is mandatory
#
# Intentionally empty. The known pre-existing sites - PacketHistory.cpp, NodeInfoModule.cpp
# and PositionModule.cpp - are deliberately NOT listed, so trunk surfaces them the next time
# someone edits those files and they get cleaned up in the change that was already touching
# them. The rule emits "note", trunk's only non-blocking level, so this costs a notice rather
# than a red PR.
#
# Add an entry only for a value the linter has misread as an ID - a CRC, a register, a hash -
# and say which, so the next reader can tell a real exemption from a deferred cleanup.
53 changes: 47 additions & 6 deletions .github/workflows/build_macos_bin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,30 +14,71 @@ permissions:
jobs:
build-MacOS:
runs-on: macos-${{ inputs.macos_ver }}
# Only pushes to the default branch (develop) populate the cache; PR / merge_group runs
# restore it but never save, so they stop filling up the repo's Actions cache storage.
env:
SAVE_CACHE: ${{ github.event_name == 'push' && github.ref_name == github.event.repository.default_branch }}
steps:
- name: Checkout code
uses: actions/checkout@v7
with:
submodules: recursive

- name: Install deps
- name: Capture runner image version (for caching)
id: r_image
run: echo "ver=$ImageVersion" >> "$GITHUB_OUTPUT"

- name: Restore Homebrew cache
id: brew-cache
uses: actions/cache/restore@v6
with:
path: ~/Library/Caches/Homebrew
key: brew-macos-${{ inputs.macos_ver }}-${{ steps.r_image.outputs.ver }}

- name: Install deps (Homebrew)
shell: bash
run: |
brew update
brew install platformio yaml-cpp libuv openssl@3 libusb argp-standalone pkg-config ulfius
env:
# GitHub-Hosted MacOS runner images are updated frequently
# so skip running `brew update` to avoid unnecessary failures and delays.
HOMEBREW_NO_AUTO_UPDATE: "1"
HOMEBREW_NO_INSTALL_CLEANUP: "1"
run: >
brew install
platformio yaml-cpp libuv openssl@3 libusb argp-standalone pkg-config ulfius jsoncpp

- name: Save Homebrew cache
if: env.SAVE_CACHE == 'true' && steps.brew-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v6
with:
path: ~/Library/Caches/Homebrew
key: brew-macos-${{ inputs.macos_ver }}-${{ steps.r_image.outputs.ver }}

- name: Get release version string
run: |
echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
id: version

- name: Restore PlatformIO cache
id: pio-cache
uses: actions/cache/restore@v6
with:
path: ~/.platformio/.cache
key: pio-macos-${{ inputs.macos_ver }}-${{ hashFiles('platformio.ini', 'variants/native/portduino.ini', 'variants/native/portduino/platformio.ini') }}
restore-keys: |
pio-macos-${{ inputs.macos_ver }}-

- name: Build for MacOS
run: |
platformio run -e native-macos
env:
PKG_VERSION: ${{ steps.version.outputs.long }}
# Errors in this step should not fail the entire workflow while MacOS support is in development.
continue-on-error: true

- name: Save PlatformIO cache
if: env.SAVE_CACHE == 'true' && steps.pio-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v6
with:
path: ~/.platformio/.cache
key: pio-macos-${{ inputs.macos_ver }}-${{ hashFiles('platformio.ini', 'variants/native/portduino.ini', 'variants/native/portduino/platformio.ini') }}

- name: List output files
run: ls -lah .pio/build/native-macos/
Expand Down
22 changes: 21 additions & 1 deletion .github/workflows/build_portduino_wasm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ jobs:
build-wasm:
name: Build PortDuino WASM
runs-on: ubuntu-latest
# Only pushes to the default branch (develop) populate the cache; PR / merge_group runs
# restore it but never save, so they stop filling up the repo's Actions cache storage.
env:
SAVE_CACHE: ${{ github.event_name == 'push' && github.ref_name == github.event.repository.default_branch }}
steps:
- uses: actions/checkout@v7
with:
Expand All @@ -29,14 +33,30 @@ jobs:
uses: ./.github/actions/setup-native

- name: Setup Emscripten SDK
uses: emscripten-core/setup-emsdk@v16
uses: emscripten-core/setup-emsdk@0822153d7a5488b70a269cfa0a631b2a86ab4da2 # 'v17' main
with:
version: 6.0.1
actions-cache-folder: emsdk-cache

- name: Restore PlatformIO cache
id: pio-cache
uses: actions/cache/restore@v6
with:
path: ~/.platformio/.cache
key: pio-wasm-${{ hashFiles('platformio.ini', 'variants/native/portduino.ini', 'variants/native/portduino/platformio.ini') }}
restore-keys: |
pio-wasm-

- name: Build PortDuino WASM
run: platformio run -e native-wasm

- name: Save PlatformIO cache
if: env.SAVE_CACHE == 'true' && steps.pio-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v6
with:
path: ~/.platformio/.cache
key: pio-wasm-${{ hashFiles('platformio.ini', 'variants/native/portduino.ini', 'variants/native/portduino/platformio.ini') }}

- name: Assert WASM artifacts
run: |
OUT=.pio/build/native-wasm
Expand Down
165 changes: 165 additions & 0 deletions .github/workflows/build_windows_bin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
name: Build Windows Binary

on:
workflow_call:
inputs:
windows_ver:
required: false
default: "2025"
type: string

permissions:
contents: read

jobs:
build-Windows:
runs-on: windows-${{ inputs.windows_ver }}
# Only pushes to the default branch (develop) populate the cache; PR / merge_group runs
# restore it but never save, so they stop filling up the repo's Actions cache storage.
env:
SAVE_CACHE: ${{ github.event_name == 'push' && github.ref_name == github.event.repository.default_branch }}
defaults:
run:
# UCRT64 is the MinGW-w64 environment native-windows targets; the `msys`
# environment would link msys-2.0.dll and produce a Cygwin-style binary.
shell: msys2 {0}
steps:
- name: Checkout code
uses: actions/checkout@v7
with:
submodules: recursive
# Keep the token out of .git/config so later steps and artifacts can't leak it.
persist-credentials: false

- name: Setup MSYS2 / UCRT64
id: msys2
uses: msys2/setup-msys2@v2
with:
msystem: UCRT64
update: true
cache: true
# argp is not packaged for the mingw environments and is built below.
# Python is omitted too: MSYS2's reports a `mingw` platform tag no wheel matches.
install: >-
mingw-w64-ucrt-x86_64-gcc
mingw-w64-ucrt-x86_64-pkgconf
mingw-w64-ucrt-x86_64-yaml-cpp
mingw-w64-ucrt-x86_64-libuv
mingw-w64-ucrt-x86_64-jsoncpp
mingw-w64-ucrt-x86_64-openssl
mingw-w64-ucrt-x86_64-curl
mingw-w64-ucrt-x86_64-libusb
mingw-w64-ucrt-x86_64-cmake
mingw-w64-ucrt-x86_64-ninja
git

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "3.14"
cache: pip

# framework-portduino calls argp_parse(); MSYS2 packages argp only for the
# msys runtime, which cannot link into a native binary. No install() rules.
- name: Build and install argp-standalone
run: |
git clone --depth 1 https://github.com/tom42/argp-standalone /tmp/argp
cd /tmp/argp
cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release .
cmake --build build
cp include/argp-standalone/argp.h /ucrt64/include/argp.h
cp build/src/libargp-standalone.a /ucrt64/lib/libargp.a

- name: Install PlatformIO
shell: pwsh
run: |
python -m pip install --upgrade pip
pip install platformio

- name: Restore PlatformIO cache
id: pio-cache
uses: actions/cache/restore@v6
with:
path: ~/.platformio/.cache
key: pio-windows-${{ inputs.windows_ver }}-${{ hashFiles('platformio.ini', 'variants/native/portduino.ini', 'variants/native/portduino/platformio.ini') }}
restore-keys: |
pio-windows-${{ inputs.windows_ver }}-

- name: Get release version string
shell: pwsh
id: version
run: echo "long=$(python ./bin/buildinfo.py long)" >> $env:GITHUB_OUTPUT

# Runs outside the MSYS2 shell so PlatformIO stays on the runner's
# CPython; the UCRT64 toolchain is reached through PATH instead.
- name: Build for Windows
shell: pwsh
run: |
$env:PATH = "${{ steps.msys2.outputs.msys2-location }}\ucrt64\bin;$env:PATH"
platformio run -e native-windows
env:
PKG_VERSION: ${{ steps.version.outputs.long }}

- name: Save PlatformIO cache
if: env.SAVE_CACHE == 'true' && steps.pio-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v6
with:
path: ~/.platformio/.cache
key: pio-windows-${{ inputs.windows_ver }}-${{ hashFiles('platformio.ini', 'variants/native/portduino.ini', 'variants/native/portduino/platformio.ini') }}

- name: List output files
run: ls -lah .pio/build/native-windows/

# The env links statically, so only Windows system DLLs should appear here.
# A third-party DLL means the static link regressed.
- name: Verify the binary is self-contained
run: |
set -euo pipefail
bin=.pio/build/native-windows/meshtasticd.exe
test -f "$bin"
# `|| true` keeps grep's no-match exit out of `set -e`; an empty import
# table is caught by the test below instead of passing as "no deps".
deps=$(objdump -p "$bin" | grep -i 'DLL Name' || true)
test -n "$deps"
extra=$(printf '%s\n' "$deps" \
| grep -viE 'api-ms-win|KERNEL32|WS2_32|ADVAPI32|USER32|msvcrt|ucrtbase|bcrypt|IPHLPAPI|SHELL32|ole32|CRYPT32|SETUPAPI|CFGMGR32|WINMM|dbghelp' || true)
if [ -n "$extra" ]; then
printf '%s\n' "$extra"
echo "::error::meshtasticd.exe has non-system DLL dependencies (static link regressed)"
exit 1
fi
echo "OK: no third-party DLL dependencies"

- name: Smoke test the binary
run: |
.pio/build/native-windows/meshtasticd.exe --version

- name: Store binaries as an artifact
uses: actions/upload-artifact@v7
with:
name: firmware-windows-${{ inputs.windows_ver }}-${{ steps.version.outputs.long }}
overwrite: true
path: |
.pio/build/native-windows/meshtasticd.exe

- name: Install WiX
shell: pwsh
run: |
dotnet tool install --global wix --version 5.0.2
"$env:USERPROFILE\.dotnet\tools" | Out-File -FilePath $env:GITHUB_PATH -Append -Encoding utf8
& "$env:USERPROFILE\.dotnet\tools\wix.exe" extension add -g WixToolset.Util.wixext/5.0.2

- name: Build the MSI and winget manifests
shell: pwsh
run: ./bin/build-winget-package.ps1 -ReleaseTag "v$env:LONG_VERSION" -Validate
env:
LONG_VERSION: ${{ steps.version.outputs.long }}

- name: Store the MSI and winget manifests as an artifact
uses: actions/upload-artifact@v7
with:
name: meshtasticd-msi-${{ inputs.windows_ver }}-${{ steps.version.outputs.long }}
overwrite: true
path: |
release/winget/*.msi
release/winget/manifests/
2 changes: 1 addition & 1 deletion .github/workflows/daily_packaging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ jobs:
series:
- jammy # 22.04 LTS
- noble # 24.04 LTS
- questing # 25.10
- resolute # 26.04 LTS
- stonking # 26.10
uses: ./.github/workflows/package_ppa.yml
with:
ppa_repo: ppa:meshtastic/daily
Expand Down
Loading