<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.2">Jekyll</generator><link href="https://blog.meshcore.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.meshcore.io/" rel="alternate" type="text/html" /><updated>2026-06-22T05:26:42+00:00</updated><id>https://blog.meshcore.io/feed.xml</id><title type="html">MeshCore Blog</title><subtitle>Posts from the MeshCore Developers</subtitle><entry><title type="html">OTA Updates by Drone</title><link href="https://blog.meshcore.io/2026/06/22/drone-ota" rel="alternate" type="text/html" title="OTA Updates by Drone" /><published>2026-06-22T00:00:00+00:00</published><updated>2026-06-22T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/06/22/drone-ota</id><content type="html" xml:base="https://blog.meshcore.io/2026/06/22/drone-ota">&lt;p&gt;&lt;em&gt;OTA Updating hard to reach nRF52 based repeaters with a drone&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As we added more and more repeaters to our local mesh in Slovakia, we found out it’s not always possible to physically reach some repeater sites often enough. We incrementally got better in addressing this issue by experimenting with different approaches.
I built a &lt;a href=&quot;https://github.com/recrof/nrf_dfu_py&quot;&gt;custom nrf dfu app that works on desktop OSes&lt;/a&gt;, so you can use &lt;a href=&quot;https://github.com/recrof/nrf_dfu_py/tree/main/adapter-antenna-buying-tips&quot;&gt;external bluetooth adapters with rp-sma ports and directional antennas&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/06/22/nrf_dfu_py.jpg&quot; /&gt;
&lt;sup class=&quot;mx-auto&quot;&gt;Updating local repeater with uConsole, high-power BLE adapter and directional antenna&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;My buddy lucidnx started to experiment with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nrf_dfu_py&lt;/code&gt; and created a &lt;a href=&quot;https://github.com/lucidnx/meshcore-drone-updater&quot;&gt;whole framework for drone updating&lt;/a&gt;. This solution works well, but the rpi zero approach is not trivial to setup, requires additional DIY and it’s hard to use and debug. That’s why I decided to build more user-friendly version, so the drone doesn’t need to carry whole linux board on its back.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/06/22/rpi_drone.jpg&quot; /&gt;
&lt;sup class=&quot;mx-auto&quot;&gt;Older version of Drone updater - with Raspberry Pi Zero 2W and hefty battery pack. 70g total payload&lt;/sup&gt;&lt;/p&gt;

&lt;h2 id=&quot;the-star-of-the-show&quot;&gt;The Star of the Show&lt;/h2&gt;

&lt;p&gt;Xiao nRF52840 packs a perfect combination of things you want for very small low-power repeater updater: nRF MCU is power efficient, it has 2MB of onboard flash and it has full blown USB controller. Inspired with Arduino bootloader that has UF2 mode, I decided to use the external 2MB flash as Mass Storage with real FAT12 filesystem, so you can even use a phone to copy over the firmware file, configure the updater and review the update log - very handy in the field.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/06/22/xiao_drone.jpg&quot; /&gt;
&lt;sup class=&quot;mx-auto&quot;&gt;DJI Neo2 with Xiao nRF52840 updater and 250mAh Li-Ion battery. 7.5g total payload&lt;/sup&gt;&lt;/p&gt;

&lt;h2 id=&quot;how-to-setup-and-use-the-updater&quot;&gt;How to setup and use the updater&lt;/h2&gt;

&lt;p&gt;Be sure the repeater you want to update uses &lt;a href=&quot;https://github.com/oltaco/Adafruit_nRF52_Bootloader_OTAFIX/releases/&quot;&gt;oltaco’s OTAFIX bootloader&lt;/a&gt; with version at least 2.1 or higher&lt;/p&gt;

&lt;p&gt;Get the firmware on &lt;a href=&quot;https://github.com/recrof/xiao_nrf52_updater/releases&quot;&gt;Project releases page&lt;/a&gt;. There are 2 boards supported: Xiao nRF52840 and RAK3401/RAK4631 with RAK15001 external flash module. We’ll focus on Xiao, as that’s easier to pick up for most of the readers.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Download &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;updater-xiao_nrf52840-vX.X.uf2&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Connect Xiao to your computer over USB&lt;/li&gt;
  &lt;li&gt;Double click the small reset button near the USB port - you might need to use your fingernail to do it&lt;/li&gt;
  &lt;li&gt;Copy the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;updater-xiao_nrf52840-vX.X.uf2&lt;/code&gt; to newly opened usb drive&lt;/li&gt;
  &lt;li&gt;Xiao will restart(you might get error about unsuccessful transfer, disregard)&lt;/li&gt;
  &lt;li&gt;You will be presented with new empty USB drive labeled &lt;strong&gt;“XIAO DFU”&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Copy &lt;a href=&quot;https://raw.githubusercontent.com/recrof/xiao_nrf52_updater/refs/heads/main/config.txt&quot;&gt;config.txt&lt;/a&gt; over to the USB disk&lt;/li&gt;
  &lt;li&gt;Open the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.txt&lt;/code&gt; with text editor&lt;/li&gt;
  &lt;li&gt;Set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ble_name&lt;/code&gt; to OTA name your repeater uses, here are few examples:
    &lt;ul&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;4631 | 3401&lt;/code&gt; for RAK based boars - covers both RAK4631 and RAK3401 1W&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SENSECAP | SCAP&lt;/code&gt; for Seeed SenseCap Solar P1&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;XIAO&lt;/code&gt; for XIAO NRF52 based repeater(yeah, you can update Xiao with your Xiao!)&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;T114&lt;/code&gt; for Heltec T114&lt;/li&gt;
      &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ProMicro | PROM&lt;/code&gt; for FakeTec / Promicro based boards&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;(optional) Set any config parameters you like, but the defaults are well balanced already&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://flasher.meshcore.io/&quot;&gt;Download&lt;/a&gt; and copy firmware &lt;strong&gt;zip&lt;/strong&gt; that you want to flash to your repeater&lt;/li&gt;
  &lt;li&gt;Decide how you want to power your Xiao board.. I would recommend to solder battery leads to &lt;a href=&quot;https://files.seeedstudio.com/wiki/XIAO-BLE/XIAO_nRF52840_back_pinout.png&quot;&gt;battery pads&lt;/a&gt;, but you can wing it with USB power if want.&lt;/li&gt;
  &lt;li&gt;Attach the Xiao to your drone, send &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;start ota&lt;/code&gt; to your repeater and make sure Xiao is blinking blue - that means it’s ready to flash your repeater&lt;/li&gt;
  &lt;li&gt;Fly near the target as close as you can - transfer will start as soon as Updater detects ble_name with min_rssi or better.&lt;/li&gt;
  &lt;li&gt;Keep Pinging your repeater via LoRa - it will tell you if the process started and later after few minutes, starts to be reachable again.&lt;/li&gt;
  &lt;li&gt;Get your drone back and look at the Xiao LED color - if it’s GREEN, the update was successful, if it’s RED, it failed. if it still blinks blue, that means the update did not even start - ble_name was not set right, the rssi was too weak or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;start ota&lt;/code&gt; failed&lt;/li&gt;
  &lt;li&gt;(optional) you can look into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;log.txt&lt;/code&gt; in Xiao’s USB drive - it should hold update process with timestamps relative to boot. You can look at how &lt;a href=&quot;/assets/images/2026/06/22/success.log&quot;&gt;successful update log&lt;/a&gt; looks like&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let us know if this guide helped you flash your distant repeaters! Don’t hesitate to ask any questions either in the comments or on our &lt;a href=&quot;https://discord.com/channels/1495203904898728149/1509594396482601121&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;</content><author><name>recrof</name></author><category term="Firmware" /><category term="Guide, Drone" /><summary type="html">OTA Updating hard to reach nRF52 based repeaters with a drone</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.meshcore.io/assets/images/2026/06/22/xiao_drone.jpg" /><media:content medium="image" url="https://blog.meshcore.io/assets/images/2026/06/22/xiao_drone.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Release v1.16.0</title><link href="https://blog.meshcore.io/2026/06/06/release-1-16-0" rel="alternate" type="text/html" title="Release v1.16.0" /><published>2026-06-06T00:00:00+00:00</published><updated>2026-06-06T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/06/06/release-1-16-0</id><content type="html" xml:base="https://blog.meshcore.io/2026/06/06/release-1-16-0">&lt;p&gt;&lt;img src=&quot;/assets/images/firmware_release.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;p&gt;Latest firmwares are in the &lt;a href=&quot;https://flasher.meshcore.io/&quot;&gt;flasher.meshcore.io&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;change-log&quot;&gt;Change Log&lt;/h2&gt;

&lt;h3 id=&quot;new-features&quot;&gt;New Features&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;New CLI config var ‘flood.max.unscoped’ &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2661&quot;&gt;#2661&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;New CLI config var ‘flood.max.advert’ &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2702&quot;&gt;#2702&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;longer preamble now for lower SF. (32 for SF&amp;lt;=8, 16 for SF&amp;gt;8) &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/1954&quot;&gt;#1954&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;app/companion can now do anon_req/response with non-contact nodes &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2672&quot;&gt;#2672&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;companion auto-shutdown, disabled when on external power, new UI warning on display &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2663&quot;&gt;#2663&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;new ‘region def …’ CLI command &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2540&quot;&gt;#2540&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;extended ACK support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2594&quot;&gt;#2594&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;app/companion can now compose and send raw packets &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2543&quot;&gt;#2543&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;companion can now override default scope to explicit unscoped &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2492&quot;&gt;#2492&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;enhancements&quot;&gt;Enhancements&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;All ESP repeaters, power saving improvements  &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/1687&quot;&gt;#1687&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;nRF companions, power saving &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2286&quot;&gt;#2286&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;new-device-support&quot;&gt;New device support&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;NEW: LilyGo T-Echo Card support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2517&quot;&gt;#2517&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;NEW: LilyGo T-Impulse Plus support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2522&quot;&gt;#2522&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;NEW: Station G3 support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2515&quot;&gt;#2515&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;NEW: Heltec Mesh Node T1 support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2520&quot;&gt;#2520&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;new Xiao S3 variants (repeater, companion, etc) &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2383&quot;&gt;#2383&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;bug-fixes-and-other&quot;&gt;Bug fixes and Other&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;RP2040 target build fixes. &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2684&quot;&gt;#2684&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;companion protocol max frame size increase (now 176) &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2022&quot;&gt;#2022&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;RAK Wismesh Tag fixes &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2664&quot;&gt;#2664&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Bug fix: repeater neighbor discovery fail when path.hash.mode != 0&lt;/li&gt;
  &lt;li&gt;RAK4631, now using Bosch driver for BME680 sensor &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2634&quot;&gt;#2634&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;enable radio.rxgain CLI command for LR1110 (T1000e) &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2235&quot;&gt;#2235&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;default flood advert interval now 47 hours (was 12) &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2608&quot;&gt;#2608&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Client repeat (off-grid) EU freq change (from 869.0 to 869.495) &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2604&quot;&gt;#2604&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;CLI validation on rxdelay, txdelay and direct.txdelay &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2443&quot;&gt;#2443&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Heltec T096, sensor node support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2576&quot;&gt;#2576&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Heltec E290 USB companion fix &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2562&quot;&gt;#2562&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;WiFi companion, reconnect logic redesigned for non-blocking &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2493&quot;&gt;#2493&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;RAM usage reduced for older boards &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2497&quot;&gt;#2497&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;nRF variants, CustomLFS lib upgrade to v2.2 &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2519&quot;&gt;#2519&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;T-Echo Lite, fixes to RXEN, TXEN and TCXO &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2511&quot;&gt;#2511&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;KISS modem frame timeout fixes &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2490&quot;&gt;#2490&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;sensor manager redesign &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2327&quot;&gt;#2327&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;startup tune suppressed if sound pref off &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2460&quot;&gt;#2460&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;added KISS Modem variants for most boards &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2620&quot;&gt;#2620&lt;/a&gt; &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2432&quot;&gt;#2432&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Adafruit nRF BLE fork, to prevent lockup during rapid connect/disconnect &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2430&quot;&gt;#2430&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;RAK3401 companion, analog button support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2436&quot;&gt;#2436&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Heltec boards, LNA disabled by default &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2439&quot;&gt;#2439&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;new splash screens &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2424&quot;&gt;#2424&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Sensecap Solar Tx LED fix &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2157&quot;&gt;#2157&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;new repeater variant: Heltec V4 expansion kit &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2326&quot;&gt;#2326&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;new T-Echo Lite non-shell companion variants &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2503&quot;&gt;#2503&lt;/a&gt; &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2353&quot;&gt;#2353&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;T-Echo Lite, battery measure fix &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2287&quot;&gt;#2287&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;RAK4631, sx1262 reset pin fix &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2008&quot;&gt;#2008&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Heltec T096, Wireless Tracker: FEM/LNA enable by default &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2340&quot;&gt;#2340&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;R1 Neo, shutdown fix &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2371&quot;&gt;#2371&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Heltec V4, set adc.multiplier support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2335&quot;&gt;#2335&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;limiting-unscoped-traffic&quot;&gt;Limiting Unscoped Traffic&lt;/h2&gt;

&lt;p&gt;The new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flood.max.unscoped&lt;/code&gt; CLI config variable is specifically for limiting unscoped
flood traffic. Like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flood.max&lt;/code&gt;, it drops unscoped flood packets which have already had a given number of
hops. By default it is 64, which is essentially &lt;em&gt;off&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;limiting-advert-traffic&quot;&gt;Limiting Advert Traffic&lt;/h2&gt;

&lt;p&gt;The new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flood.max.advert&lt;/code&gt; CLI config variable is specifically for limiting adverts.
Like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flood.max&lt;/code&gt;, it drops advert packets which have already had a given number of
hops. By default it is &lt;strong&gt;8&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;new-preamble&quot;&gt;New Preamble&lt;/h2&gt;

&lt;p&gt;When using the lower Spreading Factors, the radio has less time to &lt;em&gt;lock onto&lt;/em&gt; an incoming
packet, so this change gives the faster SF’s a longer preamble, and thus decreasing the
chance of the preamble being missed. For SF &amp;lt;= 8, the preamble is now 32 symbols.&lt;/p&gt;

&lt;h2 id=&quot;improved-region-discovery-in-mobile-app&quot;&gt;Improved Region Discovery in Mobile App&lt;/h2&gt;

&lt;p&gt;The new companion firmware, and latest app, will be able to do ad-hoc requests to
near by repeaters &lt;em&gt;without&lt;/em&gt; having to add them to contacts first. This will streamline
both repeater discovery, and region discovery.&lt;/p&gt;

&lt;h2 id=&quot;new-region-def-command&quot;&gt;New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;region def&lt;/code&gt; Command&lt;/h2&gt;

&lt;p&gt;Defining regions via the CLI is currently quite verbose, and the latest CLI handling
introduces a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;region def...&lt;/code&gt; command which has a short-hand notation for defining
regions, especially ones which have deep nesting.&lt;/p&gt;

&lt;p&gt;See the &lt;a href=&quot;https://docs.meshcore.io/cli_commands/&quot;&gt;CLI Command Reference&lt;/a&gt; for more details.&lt;/p&gt;

&lt;h2 id=&quot;extended-ack-support&quot;&gt;Extended ACK Support&lt;/h2&gt;

&lt;p&gt;The latest firmwares introduce support for ‘extended ACKs’, which are 6 bytes instead of 4.
The extra bytes contain an extended attempt number, and additional random byte. This is in
preparation for a later app feature which will enable much more than 4 attempts for
direct messages. For now, repeaters will have to be updated first.&lt;/p&gt;

&lt;h2 id=&quot;companion-raw-packets&quot;&gt;Companion Raw Packets&lt;/h2&gt;

&lt;p&gt;The latest companion firmwares now enable apps to compose the &lt;em&gt;full&lt;/em&gt; packet, ie.
headers, path and payload. This can correspond with the existing RxLog ability, so app
can do its own raw send and receive of packets.&lt;/p&gt;</content><author><name>admin</name></author><category term="Announcements" /><category term="Firmware" /><category term="Release" /><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.meshcore.io/assets/images/firmware_release.jpg" /><media:content medium="image" url="https://blog.meshcore.io/assets/images/firmware_release.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">pyMC Introduction</title><link href="https://blog.meshcore.io/2026/05/12/pymc-intro" rel="alternate" type="text/html" title="pyMC Introduction" /><published>2026-05-12T00:00:00+00:00</published><updated>2026-05-12T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/05/12/pymc-intro</id><content type="html" xml:base="https://blog.meshcore.io/2026/05/12/pymc-intro">&lt;p&gt;&lt;img src=&quot;/assets/images/2026/05/12/control-room.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;What is pyMC? At its core, pyMC is a Python implementation of a MeshCore-compatible stack. It is designed to run on Linux-based systems and connect embedded LoRa radios to higher-level software services. It started as a way to better understand the MeshCore protocol. But pretty quickly, it became something more useful: a reusable core library for building flexible, Linux-powered mesh infrastructure. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pymc core&lt;/code&gt; handles the protocol-level work:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Parsing and generating MeshCore packets&lt;/li&gt;
  &lt;li&gt;Managing identities and addressing&lt;/li&gt;
  &lt;li&gt;Maintaining compatibility as the protocol evolves&lt;/li&gt;
  &lt;li&gt;Handling radio interfaces (SPI, KISS, USB-CH341)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;with over 15 boards currently supported and many new ones in development, the system has grown from a simple experiment into a practical toolkit for building and running distributed mesh infrastructure.&lt;/p&gt;

&lt;p&gt;On top of pyMC core sits &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pymc repeater&lt;/code&gt;, which handles the operational side:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Processing packets&lt;/li&gt;
  &lt;li&gt;Applying routing and filtering logic&lt;/li&gt;
  &lt;li&gt;Forwarding traffic&lt;/li&gt;
  &lt;li&gt;Supporting services like roomservers, companions and observer data output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Embedded firmware is efficient and well suited to dedicated devices, but it operates under tight resource constraints. Running pyMC on Linux expands the design space: more compute, better tooling, easier debugging, and deeper real-time visibility into mesh behaviour.&lt;/p&gt;

&lt;p&gt;A key design choice is how identities are handled. Instead of assuming one physical node equals one logical presence, pyMC lets multiple identities exist on the same radio.&lt;/p&gt;

&lt;p&gt;In practice, a single device can take on multiple roles. It might act as a repeater, represent different logical endpoints, or host additional services–each with its own context.&lt;/p&gt;

&lt;p&gt;This flexibility allows a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pymc repeater&lt;/code&gt; to evolve into a multi-companion base station. At that point, it behaves less like a simple packet repeater and more like a lightweight message hub for the mesh.&lt;/p&gt;

&lt;p&gt;Put another way: pyMC gives MeshCore a Linux-native surface area. It can run repeaters, host services, power analytics, or support entirely new mesh applications–without losing compatibility with the underlying radio layer.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/05/12/image.pymc-map.webp&quot; /&gt;
&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/05/12/image.pymc-stats.webp&quot; /&gt;
&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/05/12/image.pymc-system-stats.webp&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;where-pymc_console-fits&quot;&gt;Where pymc_console fits&lt;/h2&gt;

&lt;p&gt;One example of that larger design space is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pymc_console&lt;/code&gt;: a browser-based dashboard built on top of pyMC repeater.&lt;/p&gt;

&lt;p&gt;Where pyMC handles the protocol and repeater layer, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pymc_console&lt;/code&gt; turns that activity into something you can actually see and reason about. Packet flow, radio status, connected identities, observer output, airtime utilization, and network behavior can all be surfaced in a more approachable interface.&lt;/p&gt;

&lt;p&gt;That matters because a mesh network is difficult to improve if it is invisible. Once packets, routes, signal quality, and utilization patterns become observable, the repeater becomes more than a forwarding node. It becomes a local window into the health and behavior of the mesh.&lt;/p&gt;

&lt;p&gt;In that sense, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pymc_console&lt;/code&gt; is less a separate idea than a natural extension of the pyMC architecture. The same Linux-native foundation that lets pyMC talk to radios also makes it possible to build analytics, dashboards, companion experiences, and new tools around the mesh.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/05/12/image-console.webp&quot; /&gt;
&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/05/12/image-console-map.webp&quot; /&gt;
&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/05/12/image-console-compan.webp&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The interesting part isn’t just what pyMC does today, but what it enables in practice.&lt;/p&gt;

&lt;p&gt;If you’d like to explore it, run it yourself, or follow along as it evolves, everything you need to get started is available.&lt;/p&gt;

&lt;h2 id=&quot;where-to-start&quot;&gt;Where to start&lt;/h2&gt;

&lt;p&gt;Source and setup instructions are on &lt;a href=&quot;https://github.com/pyMC-dev/pyMC_Repeater#pymc_repeater&quot;&gt;https://github.com/pyMC-dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or join us in the pyMC Discord &lt;a href=&quot;https://discord.gg/hRjW9ha6m&quot;&gt;https://discord.gg/hRjW9ha6m&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;recommended-gear&quot;&gt;Recommended Gear&lt;/h2&gt;

&lt;p&gt;For a no-fuss pyMC setup, I recommend the following tested and compatible hardware platforms. The MeshToad and MeshTadpole are ideal for lightweight installs, home labs, and desktop usage, while PiMesh provides an excellent Raspberry Pi-based solution for infrastructure and gateway deployments. For repeater-focused installations, the UltraPeater Luckfox Pico Ultra HAT offers a compact and efficient dedicated repeater platform.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;MeshToad V3 — &lt;a href=&quot;https://muzi.works/products/nullhop-meshtoad-v3&quot;&gt;https://muzi.works/products/nullhop-meshtoad-v3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;MeshTadpole SX1262 USB Stick — &lt;a href=&quot;https://www.elecrow.com/meshtadpole-sx1262-usb-stick.html&quot;&gt;https://www.elecrow.com/meshtadpole-sx1262-usb-stick.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;PiMesh — &lt;a href=&quot;https://meshsmith.net/&quot;&gt;https://meshsmith.net/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;UltraPeater — &lt;a href=&quot;https://zindello.com.au/ultrapeater/&quot;&gt;https://zindello.com.au/ultrapeater/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/05/12/pymc-gear.jpeg&quot; /&gt;&lt;/p&gt;</content><author><name>rightup</name></author><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.meshcore.io/assets/images/2026/05/12/control-room.png" /><media:content medium="image" url="https://blog.meshcore.io/assets/images/2026/05/12/control-room.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Ripple UI v9.7</title><link href="https://blog.meshcore.io/2026/04/30/ripple-9.7" rel="alternate" type="text/html" title="Ripple UI v9.7" /><published>2026-04-30T00:00:00+00:00</published><updated>2026-04-30T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/04/30/ripple-9.7</id><content type="html" xml:base="https://blog.meshcore.io/2026/04/30/ripple-9.7">&lt;p&gt;The latest release of the Ripple UI firmwares has had quite a big overhaul (under the hood) and the UI now sports a Light and Dark mode theming, plus you can now customise the accent colour used throughout the firmware.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/30/t-pager-9.7.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;display-preferences&quot;&gt;Display Preferences&lt;/h2&gt;

&lt;p&gt;The Display menu now shows these preferences:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/30/display-prefs-9.7.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;UI Theme&lt;/strong&gt; preferences is one of: Light, Dark or Auto. The Auto option automatically switches the UI theme depending on the &lt;strong&gt;Brightness&lt;/strong&gt; setting (day or night).&lt;/p&gt;

&lt;p&gt;PAID FEATURE: The &lt;strong&gt;Accent color&lt;/strong&gt; lets you customise the accent colour used throughout the firmware. There are 10 fun colour swatches to select from:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/30/color-select.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;map-theme&quot;&gt;Map Theme&lt;/h2&gt;

&lt;p&gt;Note that the &lt;strong&gt;UI Theme&lt;/strong&gt; preference also determines the light/dark theming for the maps:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/30/map-dark-light.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;p&gt;The v9.7 is now available for &lt;a href=&quot;https://www.lilygo.cc/products/t-deck-plus-1?variant=51618501951669&amp;amp;bg_ref=cq3pUU7cD3&quot;&gt;LilyGo T-Deck&lt;/a&gt;, &lt;a href=&quot;https://www.lilygo.cc/products/t-lora-pager?bg_ref=cq3pUU7cD3&quot;&gt;T-Pager&lt;/a&gt; and the &lt;a href=&quot;https://www.lilygo.cc/products/t-watch-s3-plus?variant=52457652224181&amp;amp;bg_ref=cq3pUU7cD3&quot;&gt;T-Watch S3 Plus&lt;/a&gt;. It will be rolling out soon for the other colour devices, like Heltec V4 Expansion kit, etc.&lt;/p&gt;

&lt;p&gt;These are now available in the &lt;a href=&quot;https://flasher.meshcore.io&quot;&gt;MeshCore.io Flasher&lt;/a&gt;, for easy installation.&lt;/p&gt;</content><author><name>scottpowell</name></author><summary type="html">The latest release of the Ripple UI firmwares has had quite a big overhaul (under the hood) and the UI now sports a Light and Dark mode theming, plus you can now customise the accent colour used throughout the firmware.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.meshcore.io/assets/images/2026/04/30/t-pager-9.7.png" /><media:content medium="image" url="https://blog.meshcore.io/assets/images/2026/04/30/t-pager-9.7.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Meshcore.io - Why The Split?</title><link href="https://blog.meshcore.io/2026/04/23/the-split" rel="alternate" type="text/html" title="Meshcore.io - Why The Split?" /><published>2026-04-23T00:00:00+00:00</published><updated>2026-04-23T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/04/23/the-split</id><content type="html" xml:base="https://blog.meshcore.io/2026/04/23/the-split">&lt;p&gt;Since inception, the MeshCore development team have been working hard to build MeshCore.&lt;/p&gt;

&lt;p&gt;We’ve released more than 85 versions of the MeshCore Companion, Repeater and Room Server firmwares with support for more than 75 hardware variants.
All of this has been hand crafted, by humans.&lt;/p&gt;

&lt;p&gt;We have always been wary of AI generated code, but felt everyone is free to do what
they want and experiment, etc. But, one of our own, Andy Kirby, decided to branch out
and extensively use Claude Code, and has decided to aggressively take over
all of the components of the MeshCore ecosystem: standalone devices, mobile app, 
web flasher and web config tools.&lt;/p&gt;

&lt;p&gt;And, he’s kept that &lt;em&gt;small&lt;/em&gt; detail a secret - that it’s all majority &lt;em&gt;vibe coded&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;We ran a poll recently, and asked in the MeshCore Discord about AI and trust, and these are the results:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/23/trust-ai-gen-firmware.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/23/have-right-to-know.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The team didn’t feel it was our place to protest, until we recently discovered that Andy
applied for the MeshCore Trademark (on the 29th March, according to filings) and didn’t tell
any of us. We have tried discussing this, and what his intentions are, but those broke down
and we now have no communication with Andy.&lt;/p&gt;

&lt;p&gt;It’s been a stressful few months trying to sort this out, and is now a sad day
to bring this out to the public. It’s been a slap in the face to the team that
have worked so hard on this project, to have an insider team up with a robot
and a lawyer.&lt;/p&gt;

&lt;h2 id=&quot;official-meshcore&quot;&gt;“Official” MeshCore&lt;/h2&gt;

&lt;p&gt;The use of the ‘official’ status is what is currently being contested. Andy is adamant 
that he &lt;em&gt;owns&lt;/em&gt; the brand, and is using the word very heavily with his MeshOS line.&lt;/p&gt;

&lt;p&gt;Meanwhile, in reality, the only ‘official’ MeshCore is the github repo. It’s the
&lt;em&gt;source of truth&lt;/em&gt; in terms of what is MeshCore, and Andy has &lt;em&gt;never&lt;/em&gt; contributed
to that.&lt;/p&gt;

&lt;p&gt;Since the internal split, we launched the &lt;a href=&quot;https://meshcore.io&quot;&gt;meshcore.io&lt;/a&gt; site, as Andy controls
the meshcore.co.uk site and original discord server. We’ve been left with little other recourse. And, since 
launching the site, Andy copied the look and feel (again, using Claude) even though
we asked him not to.&lt;/p&gt;

&lt;h2 id=&quot;project-growth&quot;&gt;Project Growth&lt;/h2&gt;

&lt;p&gt;The MeshCore project has been on an incredible journey.&lt;/p&gt;

&lt;p&gt;Having only started in January 2025, we have grown extremely fast!&lt;/p&gt;

&lt;p&gt;As of this post, the official &lt;a href=&quot;https://map.meshcore.io&quot;&gt;MeshCore Map&lt;/a&gt; shows 38,000+ nodes around the world, and the official &lt;a href=&quot;https://meshcore.io&quot;&gt;MeshCore App&lt;/a&gt; has more than 100,000+ active users across Android and iOS.&lt;/p&gt;

&lt;p&gt;It’s pretty epic how we’ve all built such an incredible community in such as a short time!&lt;/p&gt;

&lt;p&gt;As the project grows, so does our need for a dedicated space that provides you with official information from the &lt;em&gt;core team&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In recent times, we’ve seen an explosion of growth in MeshCore web sites dedicated to specific countries and mesh communities.&lt;/p&gt;

&lt;p&gt;To name a few, we’ve seen:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;MeshCore Portugal over at &lt;a href=&quot;https://meshcore.pt&quot;&gt;https://meshcore.pt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;MeshCore Switzerland over at &lt;a href=&quot;https://meshcore.ch&quot;&gt;https://meshcore.ch&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;and the first successes with MeshCore UK over at &lt;a href=&quot;https://meshcore.co.uk&quot;&gt;https://meshcore.co.uk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Andy Kirby did do an amazing job helping to promote the MeshCore project on his personal YouTube, but only promotes his own products now.&lt;/p&gt;

&lt;h2 id=&quot;where-to-from-here&quot;&gt;Where To From Here?&lt;/h2&gt;

&lt;p&gt;So, the core team are pushing ahead with the &lt;a href=&quot;https://meshcore.io&quot;&gt;meshcore.io&lt;/a&gt; website, the ongoing work of firmware feature development,
bug fixes, managing PR’s and developer discussions, etc.&lt;/p&gt;

&lt;p&gt;We now release change logs, blog posts and technical documentation for all of our new firmware and app releases here.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://meshcore.io&quot;&gt;https://meshcore.io&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://blog.meshcore.io&quot;&gt;https://blog.meshcore.io&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.meshcore.io&quot;&gt;https://docs.meshcore.io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll also find some familiar faces on our blog posts, such as:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Scott&lt;/strong&gt; our project founder, lead firmware engineer and developer of the Ripple firmware!&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Recrof&lt;/strong&gt; our official MeshCore Map developer and Firmware Flasher guru. He has shared some insights into the early development of the MeshCore Map.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Liam Cottle&lt;/strong&gt; the official MeshCore App developer who will be posting useful guides for getting started with the MeshCore App.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;FDLamotte&lt;/strong&gt; who has done epic work on the Python tooling for MeshCore, as well as the STM32 firmware variants.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Oltaco&lt;/strong&gt; (Che Aporeps) who has done amazing work on the new OTA Fix bootloader that makes firmware updates much more reliable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-core-team&quot;&gt;The Core Team&lt;/h2&gt;

&lt;p&gt;The MeshCore team, now consisting of &lt;strong&gt;Scott&lt;/strong&gt;, &lt;strong&gt;Liam&lt;/strong&gt;, &lt;strong&gt;Recrof&lt;/strong&gt;, &lt;strong&gt;FDLamotte&lt;/strong&gt; and now &lt;strong&gt;Oltaco&lt;/strong&gt; remain committed to designing and developing high quality, &lt;em&gt;human-written&lt;/em&gt; software.&lt;/p&gt;

&lt;h2 id=&quot;our-new-home&quot;&gt;Our New Home&lt;/h2&gt;

&lt;p&gt;Please update your bookmarks!&lt;/p&gt;

&lt;p&gt;This is where we will be hosting all official releases, technical documentation, and community discussions moving forward.&lt;/p&gt;

&lt;p&gt;With the new website, we are also starting fresh with a new Discord server!&lt;/p&gt;

&lt;p&gt;This is where you can interact directly with the MeshCore developers, get help with your projects, and contribute to the future of MeshCore.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Official Website: &lt;a href=&quot;https://meshcore.io&quot;&gt;https://meshcore.io&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Latest Updates: &lt;a href=&quot;https://blog.meshcore.io&quot;&gt;https://blog.meshcore.io&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Technical Docs: &lt;a href=&quot;https://docs.meshcore.io&quot;&gt;https://docs.meshcore.io&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Official GitHub: &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore&quot;&gt;https://github.com/meshcore-dev/MeshCore&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Reddit: &lt;a href=&quot;https://reddit.com/r/meshcore&quot;&gt;https://reddit.com/r/meshcore&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Facebook: &lt;a href=&quot;https://facebook.com/groups/meshcore&quot;&gt;https://facebook.com/groups/meshcore&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discord: &lt;a href=&quot;https://meshcore.gg&quot;&gt;https://meshcore.gg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for being a part of this journey!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The MeshCore Team&lt;/em&gt;&lt;/p&gt;</content><author><name>admin</name></author><summary type="html">Since inception, the MeshCore development team have been working hard to build MeshCore.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.meshcore.io/assets/images/icon.png" /><media:content medium="image" url="https://blog.meshcore.io/assets/images/icon.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Release v1.15.0</title><link href="https://blog.meshcore.io/2026/04/19/release-1-15-0" rel="alternate" type="text/html" title="Release v1.15.0" /><published>2026-04-19T00:00:00+00:00</published><updated>2026-04-19T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/04/19/release-1-15-0</id><content type="html" xml:base="https://blog.meshcore.io/2026/04/19/release-1-15-0">&lt;p&gt;&lt;img src=&quot;/assets/images/firmware_release.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Latest firmwares are in the &lt;a href=&quot;https://flasher.meshcore.io/&quot;&gt;flasher.meshcore.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Change Log&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Default Scope support&lt;/li&gt;
  &lt;li&gt;Support for New GROUP_DATA (binary) packets &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/1928&quot;&gt;#1928&lt;/a&gt; &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2130&quot;&gt;#2130&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Heltec V4.3 support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/1867&quot;&gt;#1867&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Heltec nRF Tracker (T096) support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2097&quot;&gt;#2097&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GAT562 Mesh EVB Pro repeater and room server support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2042&quot;&gt;#2042&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Radio rxgain now ON by default &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2124&quot;&gt;#2124&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Radio freq range now supported down to 150Mhz &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2126&quot;&gt;#2126&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GPS pref peristence fix &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2018&quot;&gt;#2018&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get|set dutycycle&lt;/code&gt; CLI command &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/1961&quot;&gt;#1961&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Muzi Works R1 Neo support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2007&quot;&gt;#2007&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GAT562 Watch support &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2138&quot;&gt;#2138&lt;/a&gt; &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2228&quot;&gt;#2228&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;BME680 sensor init fix &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2227&quot;&gt;#2227&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Heltec Wireless Paper battery read fix &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2164&quot;&gt;#2164&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;WiFi companion fixes for Heltec V4,TBeam 1W &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/1833&quot;&gt;#1833&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Waveshare RP2040: RXEN fix &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2298&quot;&gt;#2298&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;nRF companion, support for OTA updates &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2323&quot;&gt;#2323&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Added companion for Heltec Wireless Paper &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2315&quot;&gt;#2315&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Misc &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2134&quot;&gt;#2134&lt;/a&gt; &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2190&quot;&gt;#2190&lt;/a&gt; &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/1425&quot;&gt;#1425&lt;/a&gt; &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2075&quot;&gt;#2075&lt;/a&gt; &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2302&quot;&gt;#2302&lt;/a&gt; &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2306&quot;&gt;#2306&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Xiao C3 bootloop fix &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/pull/2328&quot;&gt;#2328&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Documentation Links&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For info on the new Default Scope feature, please see &lt;a href=&quot;/2026/04/17/default-scope&quot;&gt;this article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For low level format of the GROUP_DATA packets, please see &lt;a href=&quot;https://docs.meshcore.io/payloads/?h=group+datagram#group-datagram&quot;&gt;this docs link&lt;/a&gt;.&lt;/p&gt;</content><author><name>admin</name></author><category term="Announcements" /><category term="Firmware" /><category term="Release" /><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.meshcore.io/assets/images/firmware_release.jpg" /><media:content medium="image" url="https://blog.meshcore.io/assets/images/firmware_release.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Default Scope Region</title><link href="https://blog.meshcore.io/2026/04/17/default-scope" rel="alternate" type="text/html" title="Default Scope Region" /><published>2026-04-17T00:00:00+00:00</published><updated>2026-04-17T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/04/17/default-scope</id><content type="html" xml:base="https://blog.meshcore.io/2026/04/17/default-scope">&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/17/banner.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;NOTE: Refer to the &lt;a href=&quot;/2026/01/20/region-filtering&quot;&gt;previous blog post&lt;/a&gt; if you are unfamiliar with regions/scopes&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Since the v1.12.0 firmware release, scoping &lt;em&gt;group channel&lt;/em&gt; messages has been possible, but there are still a number of road-blocks to using regions more effectively, especially for meshes like in Germany who are trying to &lt;strong&gt;disable un-scoped&lt;/strong&gt; traffic (ie. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;region denyf *&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;In the next release (v1.15.0) there will be a new concept of ‘default scope’, for both companion nodes and repeater/room server. This will make it possible to do scoped DM messages, login requests, stats request, etc. (even in a mesh that has disabled un-scoped flood traffic)&lt;/p&gt;

&lt;h2 id=&quot;mobile-app&quot;&gt;Mobile App&lt;/h2&gt;

&lt;p&gt;The &lt;a href=&quot;https://meshcore.io/#download&quot;&gt;MeshCore app&lt;/a&gt; ver 1.43.0 will have a new setting in the &lt;strong&gt;Experimental Settings&lt;/strong&gt; screen. Here you can set the default scope region name.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/17/app-default-scope.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;When set, ALL flood packets the companion sends (eg. adverts, DM’s/logins/requests when path is unknown) will be &lt;strong&gt;scoped&lt;/strong&gt; to this region.&lt;/p&gt;

&lt;p&gt;Group channel scope, if set, will &lt;em&gt;override&lt;/em&gt; the default scope. So, you can still have (typically) smaller region/scope for individual channels.&lt;/p&gt;

&lt;h2 id=&quot;repeater-and-room-server-admin&quot;&gt;Repeater and Room Server Admin&lt;/h2&gt;

&lt;p&gt;From v1.15.0 there will be a new cli command:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;region default {name | &amp;lt;null&amp;gt;}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This sets the given region as the default scope, or clears if you specify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;null&amp;gt;&lt;/code&gt;. Note that the region is auto-created if currently not in the regions list. Also, an implicit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;region save&lt;/code&gt; is automatically performed!&lt;/p&gt;

&lt;p&gt;Default scope is only applied to packets which &lt;em&gt;originate&lt;/em&gt; from the repeater/room server. So, only adverts for repeater. Adverts and room posts for room server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logins/Requests/Commands and Responses&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From v1.15.0 there is a new rule for &lt;em&gt;responses&lt;/em&gt;. These originate from repeater/room server, but have this rule:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;If request packet scope can be resolved (ie. Region is in its list) then same scope is used for reply&lt;/li&gt;
  &lt;li&gt;Otherwise, reply is sent un-scoped.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This includes the case of un-scoped request will have an un-scoped reply.&lt;/p&gt;

&lt;p&gt;For now, this is the &lt;em&gt;safer&lt;/em&gt; option, instead of having the replies default to the default-scope. While in this transition period, there are too many ways a repeater admin could shoot themselves in the foot and lock themselves out of their own repeater!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EXTRA: new ‘put’ default&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;region put ...&lt;/code&gt; CLI command now defaults the new region to ‘allow’ for flood. So, you won’t need to also follow with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;region allowf ...&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&quot;standalone-devices&quot;&gt;Standalone Devices&lt;/h2&gt;

&lt;p&gt;For Ripple GUI supported devices, like the T-Deck, the next release (v9.6) will have default-scope support. From the &lt;strong&gt;Regions&lt;/strong&gt; screen, just select a plain region (or ‘*’) and in the details screen, select the menu:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/17/region-details-default-scope.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;(If needed, create a new region from the main region list, for the default scope)&lt;/p&gt;

&lt;p&gt;Back in the Regions list screen, you should see a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(S)&lt;/code&gt; displayed next to the current default scope region:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/17/region-list-default.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;faq&quot;&gt;FAQ&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: As a repeater admin, what should I set default scope to?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It should typically be a &lt;em&gt;large&lt;/em&gt; region, eg. your city. Or, whatever the region that you wish to confine adverts to (for instance).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: As an app/chat user, what should I set default scope to?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This should be a &lt;em&gt;large&lt;/em&gt; region which will safely include both yourself and the contact(s) you wish to DM. Both your messages, and the returning ACKs will be scoped to this region.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: I manage regional MeshCore firmware builds, with best defaults for the region. Can I configure a custom default region in my builds?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. In the relevant .ini files, just add to build_flags &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-D DEFAULT_FLOOD_SCOPE_NAME='&quot; .. &quot;'&lt;/code&gt; (with the name in quotes)&lt;/p&gt;</content><author><name>scottpowell</name></author><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.meshcore.io/assets/images/2026/04/17/banner.png" /><media:content medium="image" url="https://blog.meshcore.io/assets/images/2026/04/17/banner.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Installing the OTAFix Bootloader</title><link href="https://blog.meshcore.io/2026/04/06/otafix-bootloader" rel="alternate" type="text/html" title="Installing the OTAFix Bootloader" /><published>2026-04-06T00:00:00+00:00</published><updated>2026-04-06T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/04/06/otafix-bootloader</id><content type="html" xml:base="https://blog.meshcore.io/2026/04/06/otafix-bootloader">&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/06/otafix-banner.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;background&quot;&gt;Background&lt;/h2&gt;
&lt;p&gt;When I was first getting into MeshCore I realised that nRF52 devices had the ability to do OTA updates via BLE, which is obviously a great feature when you need to update a repeater which is on a roof.&lt;/p&gt;

&lt;p&gt;Unfortunately I never had much luck getting this to work. If you were lucky and used the right settings it might work with RAK4631 but particularly with ProMicro devices it never worked at all. This led me to dig around in github where I found some ancient forgotten PRs to fix some of these issues.&lt;/p&gt;

&lt;p&gt;Since they weren’t getting any attention on the official Adafruit github I took it upon myself to fork the bootloader and include these fixes myself.&lt;/p&gt;

&lt;h2 id=&quot;installing-the-otafix-bootloader-for-nrf52-devices&quot;&gt;Installing the OTAFIX Bootloader for nRF52 devices&lt;/h2&gt;

&lt;p&gt;For the best nRF52 OTA update experience, it’s recommended to upgrade your device to the &lt;strong&gt;OTAFIX bootloader&lt;/strong&gt;. This version includes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Automatic fallback to OTA DFU mode if an update fails&lt;/li&gt;
  &lt;li&gt;Significantly faster OTA update speeds&lt;/li&gt;
  &lt;li&gt;Additional quality-of-life improvements for certain devices, like to the ability to enter OTA DFU mode by holding a button while resetting.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-enter-uf2-dfu-mode&quot;&gt;1. Enter UF2 DFU Mode&lt;/h2&gt;

&lt;p&gt;First, put your device into &lt;strong&gt;UF2 DFU mode&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For most nRF52 devices:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Plug the device into your computer&lt;/li&gt;
  &lt;li&gt;Quickly double-press the reset button (twice within 0.5 seconds)&lt;/li&gt;
  &lt;li&gt;A UF2 USB drive should appear, the name of the drive will differ depending on the device.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some devices use different methods, see the &lt;a href=&quot;#device-specific-notes&quot;&gt;notes&lt;/a&gt; at the end of this guide.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-check-your-current-bootloader-optional-but-recommended&quot;&gt;2. Check Your Current Bootloader (Optional but Recommended)&lt;/h2&gt;

&lt;p&gt;This step is important for devices like the &lt;strong&gt;Seeed Studio XIAO nRF52840&lt;/strong&gt;, which often ship with the &lt;strong&gt;SENSE&lt;/strong&gt; bootloader variant.&lt;/p&gt;

&lt;p&gt;To check:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Enter UF2 DFU mode&lt;/li&gt;
  &lt;li&gt;Open the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;INFO_UF2.TXT&lt;/code&gt; file on the mounted drive&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This file contains details about your current bootloader.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;
If the file shows: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Board-ID: nRF52840-SeeedXiaoSense-v1&lt;/code&gt; then you will need to install the &lt;strong&gt;&lt;em&gt;SENSE&lt;/em&gt;&lt;/strong&gt; variant.&lt;/p&gt;

&lt;h2 id=&quot;3-download-the-otafix-bootloader&quot;&gt;3. Download the OTAFIX Bootloader&lt;/h2&gt;

&lt;p&gt;You can now download the OTAFIX bootloader directly from the MeshCore flasher site!
Go to &lt;a href=&quot;https://flasher.meshcore.io&quot;&gt;https://flasher.meshcore.io&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Select your device&lt;/li&gt;
  &lt;li&gt;Choose &lt;strong&gt;Repeater&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;A download link for the OTAFIX bootloader will appear in a highlighted banner, the file will be titled &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;update-xxxx.uf2&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/06/flasher_banner_grab.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Alternatively the OTAFIX bootloader is also available from the official site.
Go to:&lt;br /&gt;
&lt;a href=&quot;https://github.com/oltaco/Adafruit_nRF52_Bootloader_OTAFIX/releases&quot;&gt;https://github.com/oltaco/Adafruit_nRF52_Bootloader_OTAFIX/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download the correct UF2 file for your device from the &lt;strong&gt;Assets&lt;/strong&gt; section.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Files are named like: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;update-xxxx.uf2&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;You may need to click &lt;strong&gt;“Show more”&lt;/strong&gt; to see all available files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;
For the Seeed Xiao Sense variant as discussed above you will want to download &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;update-xiao_nrf52840_ble_sense_bootloader-0.9.2-OTAFIX2.1-BP1.2_nosd.uf2&lt;/code&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-install-the-bootloader&quot;&gt;4. Install the Bootloader&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Drag and drop the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;update-xxxx.uf2&lt;/code&gt; file onto the UF2 drive&lt;/li&gt;
  &lt;li&gt;The device will automatically:
    &lt;ul&gt;
      &lt;li&gt;Update the bootloader&lt;/li&gt;
      &lt;li&gt;Reboot when complete&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-verify-the-update&quot;&gt;5. Verify the Update&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Re-enter UF2 DFU mode&lt;/li&gt;
  &lt;li&gt;Open &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;INFO_UF2.TXT&lt;/code&gt; again&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The version line should now include &lt;strong&gt;OTAFIX&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/06/otafix_installed.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;device-specific-notes&quot;&gt;Device-Specific Notes&lt;/h2&gt;

&lt;h3 id=&quot;t1000-e-dfu-mode&quot;&gt;T1000-e DFU Mode&lt;/h3&gt;
&lt;p&gt;To enter DFU mode:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Attach the magnetic USB cable&lt;/li&gt;
  &lt;li&gt;Hold the button&lt;/li&gt;
  &lt;li&gt;Quickly disconnect and reconnect the cable twice&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Video reference: &lt;a href=&quot;https://www.youtube.com/shorts/D6uo93-RcaY&quot;&gt;https://www.youtube.com/shorts/D6uo93-RcaY&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;thinknode-m3-dfu-mode&quot;&gt;ThinkNode M3 DFU Mode&lt;/h3&gt;
&lt;p&gt;To enter DFU mode:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Attach the magnetic USB cable&lt;/li&gt;
  &lt;li&gt;Hold the button for ~25–30 seconds&lt;/li&gt;
&lt;/ol&gt;</content><author><name>taco</name></author><category term="Firmware" /><category term="Guide" /><summary type="html"></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.meshcore.io/assets/images/2026/04/06/otafix-banner.jpg" /><media:content medium="image" url="https://blog.meshcore.io/assets/images/2026/04/06/otafix-banner.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Ripple v9.4 for HeltecV4</title><link href="https://blog.meshcore.io/2026/04/05/heltecv4-maps" rel="alternate" type="text/html" title="Ripple v9.4 for HeltecV4" /><published>2026-04-05T00:00:00+00:00</published><updated>2026-04-05T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/04/05/heltecv4-maps</id><content type="html" xml:base="https://blog.meshcore.io/2026/04/05/heltecv4-maps">&lt;p&gt;I’ve now added map tiles support for the &lt;a href=&quot;https://heltec.org/project/wifi-lora-32-v4-expansion-housing/&quot;&gt;Heltec V4 Expansion Kit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/05/HeltecV4-preview.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;download&quot;&gt;Download&lt;/h2&gt;

&lt;p&gt;You can download + flash in one easy step using this &lt;a href=&quot;https://flasher.meshcore.io/ripple-heltec-v4-expansion-kit-touch/&quot;&gt;direct link&lt;/a&gt; to the MeshCore Flasher target.&lt;/p&gt;

&lt;p&gt;NOTE: there are two firmware variants now; one for existing uses who don’t want map tiles support, and a new ‘LittleFS’ variant for map tiles support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WARNING: The LittleFS variant uses a different flash storage partition scheme, and you will lose all your settings if you switch to this one. However, once on this variant it’s safe to do future upgrades and not lose settings.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;general-guide&quot;&gt;General Guide&lt;/h2&gt;

&lt;p&gt;The Heltecv4 has a UI which mostly like the other Ultra devices, like the T-Deck, so refer to the &lt;a href=&quot;https://buymeacoffee.com/ripplebiz/ultra-v7-7-guide-meshcore-users&quot;&gt;general user guide&lt;/a&gt; here for details.&lt;/p&gt;

&lt;h2 id=&quot;the-littlefs-firmware&quot;&gt;The ‘LittleFS’ Firmware&lt;/h2&gt;

&lt;p&gt;This new variant, it carves out a LittleFS partition about 14Mb in size. So, you can drop map tiles up to about that size. This is fairly limited, but you should be able to drop some subset of your local geography for a few zoom levels.&lt;/p&gt;

&lt;p&gt;Please see the &lt;a href=&quot;https://docs.meshcore.io/faq/?h=maps#47-q-how-do-i-get-maps-on-t-deck&quot;&gt;FAQ about how to get map tiles&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;copying-files-to-littlefs&quot;&gt;Copying Files to LittleFS&lt;/h2&gt;

&lt;p&gt;There is a handy online tool called &lt;a href=&quot;https://thelastoutpostworkshop.github.io/ESPConnect/&quot;&gt;ESPConnect&lt;/a&gt; which makes it easy to connect the HeltecV4 via USB to your computer, then add/modify/delete the files in the LittleFS partition.&lt;/p&gt;

&lt;p&gt;Just click on the &lt;strong&gt;CONNECT&lt;/strong&gt; button at the top, select the port for your USB connection, then click on the &lt;strong&gt;LittleFS Tools&lt;/strong&gt; tab:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/03/28/espconnect-littlefs.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;You’ll need to be patient while it does a &lt;em&gt;full read&lt;/em&gt; of the partition, but once done, it will ask you to click &lt;strong&gt;BACKUP&lt;/strong&gt; (which is very handy), that saves the entire partition to a .bin file.&lt;/p&gt;

&lt;p&gt;If you look below, you should then see the various files/folders in the file system. For the map tiles, just drag/drop the whole ‘tiles’ folder you have prepared on your computer. NOTE: you will see this warning if you’ve blown the size limit:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/03/28/espconnect-full.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;You should see the orange warning &lt;strong&gt;Unsaved changes&lt;/strong&gt; after adding/removing files/folder, and once you have made all the changes need, just click the blue &lt;strong&gt;SAVE TO FLASH&lt;/strong&gt; button:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/03/28/espconnect-save.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Again, you’ll need to be patient as it writes the entire partition back to the device. But, once it’s done just disconnect the device, then press the Reset button on the device.&lt;/p&gt;</content><author><name>scottpowell</name></author><category term="Ripple" /><category term="Release" /><summary type="html">I’ve now added map tiles support for the Heltec V4 Expansion Kit.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.meshcore.io/assets/images/2026/04/05/HeltecV4-preview.png" /><media:content medium="image" url="https://blog.meshcore.io/assets/images/2026/04/05/HeltecV4-preview.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The MeshCore Map</title><link href="https://blog.meshcore.io/2026/04/04/meshcore-map" rel="alternate" type="text/html" title="The MeshCore Map" /><published>2026-04-04T00:00:00+00:00</published><updated>2026-04-04T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/04/04/meshcore-map</id><content type="html" xml:base="https://blog.meshcore.io/2026/04/04/meshcore-map">&lt;h1 id=&quot;origins&quot;&gt;Origins&lt;/h1&gt;

&lt;p&gt;When MeshCore launched at the start of 2025, discoverability was a pretty big issue - that’s where the idea for the MeshCore internet map was born. Liam Cottle’s &lt;a href=&quot;https://meshtastic.liamcottle.net&quot;&gt;Meshtastic Map&lt;/a&gt; was the primary inspiration. The first version was released in April 2025 and the first nodes from the UK, Australia and Slovakia started to flow in. The number of nodes grew rapidly - we had the first 1,000 nodes within a month, crossed the 5,000 mark in summer, 10k in December and now we’re at 30k nodes worldwide.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/04/map-may-2025.png&quot; alt=&quot;Map in May 2025&quot; /&gt;
&lt;small&gt;&lt;em&gt;This is how the map looked in May 2025&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h1 id=&quot;basic-concepts&quot;&gt;Basic concepts&lt;/h1&gt;

&lt;p&gt;The map was created mainly to reference infrastructure nodes, so you know exactly where other repeaters are and what radio settings they use. This was later extended to node statistics, search, filtering and basic health monitoring of the mesh.&lt;/p&gt;

&lt;h1 id=&quot;notable-features&quot;&gt;Notable Features&lt;/h1&gt;

&lt;p&gt;Apart from the obvious map browsing and node search, there is a powerful filter that can be very useful for finding specific nodes.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Search in current map view only&lt;/strong&gt; - useful when you’re looking for a specific node or public key prefix in your area&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Only show duplicates&lt;/strong&gt; - shows only names that appear more than once on the map, good for map cleanup&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/04/map-filter.png&quot; alt=&quot;Map Filter opened&quot; /&gt;
&lt;small&gt;&lt;em&gt;The filter menu opens when you click on the filter icon&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2 id=&quot;node-freshness&quot;&gt;Node freshness&lt;/h2&gt;

&lt;p&gt;Nodes updated by &lt;a href=&quot;https://github.com/recrof/map.meshcore.io-uploader&quot;&gt;MeshCore Map Auto Uploader&lt;/a&gt; are color coded, so you know which Repeater / Room Server / Sensor was recently heard:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Color&lt;/th&gt;
      &lt;th&gt;Status&lt;/th&gt;
      &lt;th&gt;Meaning&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Green&lt;/td&gt;
      &lt;td&gt;Recent&lt;/td&gt;
      &lt;td&gt;Updated within the last 5 days&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Yellow&lt;/td&gt;
      &lt;td&gt;Stale&lt;/td&gt;
      &lt;td&gt;Updated within the last 10 days&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Red&lt;/td&gt;
      &lt;td&gt;Old&lt;/td&gt;
      &lt;td&gt;Updated within the last 20 days&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Black&lt;/td&gt;
      &lt;td&gt;Extinct&lt;/td&gt;
      &lt;td&gt;Not updated in over 20 days - will be deleted soon&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;No tint&lt;/td&gt;
      &lt;td&gt;Manual&lt;/td&gt;
      &lt;td&gt;Added manually, not automatically uploaded&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/04/map-freshness.png&quot; alt=&quot;Map freshness&quot; /&gt;
&lt;small&gt;&lt;em&gt;Node freshness on the map&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2 id=&quot;coordinate-context-menu&quot;&gt;Coordinate context menu&lt;/h2&gt;

&lt;p&gt;Clicking on the coordinates in a node popup opens a small context menu with quick links to open the location in OpenStreetMap, Google Maps or Mapy.com, as well as an option to copy the coordinates to clipboard.&lt;/p&gt;

&lt;h2 id=&quot;clustering-zoom-level&quot;&gt;Clustering zoom level&lt;/h2&gt;

&lt;p&gt;By default, nearby markers are grouped into clusters to keep the map readable. The &lt;strong&gt;Clustering zoom level&lt;/strong&gt; slider in the filter menu controls at what zoom level markers stop clustering and are shown individually. If you’re exploring a dense area and want to see all nodes separately without zooming in all the way, sliding it to a lower value will expand clusters earlier.&lt;/p&gt;

&lt;h2 id=&quot;qr-code&quot;&gt;QR code&lt;/h2&gt;

&lt;p&gt;Every node popup shows a QR code that encodes a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;meshcore://contact/add&lt;/code&gt; URL with the node’s name, public key and type. Scanning it with the MeshCore mobile app adds the node directly as a contact - no manual copying of keys needed.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/04/map-open-popup.png&quot; alt=&quot;Map node popup opened&quot; /&gt;
&lt;small&gt;&lt;em&gt;Node popup with QR code and all the details&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2 id=&quot;shareable-urls&quot;&gt;Shareable URLs&lt;/h2&gt;

&lt;p&gt;The map remembers your current position and the node you have open. The URL updates as you move around, and when you open a node popup it switches to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;?public_key=...&lt;/code&gt; format. You can share that URL directly - anyone opening it will be taken straight to that node with the popup open.&lt;/p&gt;

&lt;p&gt;You can also use the url in your own regional page using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt;, here is an example:&lt;/p&gt;
&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;iframe&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;https://map.meshcore.io/?lat=47.8721&amp;amp;amp;lon=12.5903&amp;amp;amp;zoom=8&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;width:100%;aspect-ratio:3/2&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;frameborder=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;0&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;scrolling=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;no&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;addingremoving-nodes&quot;&gt;Adding/Removing nodes&lt;/h1&gt;

&lt;h2 id=&quot;adding-yourself-companion-radio&quot;&gt;Adding yourself (Companion radio)&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Open MeshCore app&lt;/li&gt;
  &lt;li&gt;Tap the &lt;strong&gt;⋮&lt;/strong&gt; menu icon in the top right corner&lt;/li&gt;
  &lt;li&gt;Tap &lt;strong&gt;Internet Map&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Tap &lt;strong&gt;⋮&lt;/strong&gt; again and choose &lt;strong&gt;Add me to the Map&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/04/map-add-self.png&quot; alt=&quot;Adding yourself to the map&quot; /&gt;
&lt;small&gt;&lt;em&gt;Adding yourself to the map&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2 id=&quot;adding-a-repeater-or-room-server&quot;&gt;Adding a Repeater or Room Server&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;Open the &lt;strong&gt;Contacts&lt;/strong&gt; tab in the MeshCore app&lt;/li&gt;
  &lt;li&gt;Tap &lt;strong&gt;⋮&lt;/strong&gt; next to the Repeater or Room Server you want to add&lt;/li&gt;
  &lt;li&gt;Tap &lt;strong&gt;Share&lt;/strong&gt;, then &lt;strong&gt;Upload to Internet Map&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/04/map-add-repeater.png&quot; alt=&quot;Adding a repeater to the map&quot; /&gt;
&lt;small&gt;&lt;em&gt;Adding a repeater to the map&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;

&lt;h2 id=&quot;removing-a-node&quot;&gt;Removing a node&lt;/h2&gt;

&lt;p&gt;Removing can only be done with same Companion radio (same public key) that was used to upload the node.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Open MeshCore app&lt;/li&gt;
  &lt;li&gt;Tap the &lt;strong&gt;⋮&lt;/strong&gt; menu icon in the top right corner&lt;/li&gt;
  &lt;li&gt;Tap &lt;strong&gt;Internet Map&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Find the node you want to delete, tap it and choose &lt;strong&gt;Delete Marker&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;beyond-the-interface&quot;&gt;Beyond the interface&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/recrof/map.meshcore.io-uploader&quot;&gt;MeshCore Map Auto Uploader&lt;/a&gt; will let you automatically add and update all repeaters, room servers and sensors when they broadcast an advert. That’s the main reason you can see freshness indicated by the colored node icons.&lt;/p&gt;</content><author><name>recrof</name></author><category term="Map" /><category term="Guide" /><summary type="html">Origins</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.meshcore.io/assets/images/2026/04/04/map-may-2025.png" /><media:content medium="image" url="https://blog.meshcore.io/assets/images/2026/04/04/map-may-2025.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>