<?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-07-04T09:27:44+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">Help Us Save MeshCore</title><link href="https://blog.meshcore.io/2026/07/04/help-us-save-meshcore" rel="alternate" type="text/html" title="Help Us Save MeshCore" /><published>2026-07-04T00:00:00+00:00</published><updated>2026-07-04T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/07/04/help-us-save-meshcore</id><content type="html" xml:base="https://blog.meshcore.io/2026/07/04/help-us-save-meshcore">&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/07/04/meshcore-banner-short.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;foreword-by-scott-powell&quot;&gt;Foreword, by Scott Powell&lt;/h2&gt;

&lt;p&gt;Many of you got into MeshCore because it answered an as-yet unknown call. 
The project had its beginnings &lt;a href=&quot;https://buymeacoffee.com/ripplebiz/the-future-3211940&quot;&gt;here&lt;/a&gt; in late 2024, when I was
frustrated that there was no sufficiently open and permissive mesh protocol which could
form the centre of a vibrant ecosystem. From the start, I made my intentions clear, that I wanted
an open protocol, an open source core engine, but also permissive of 3rd party products that could build on top of it.
I then spent the next two months designing and writing what became the &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore&quot;&gt;C++ MeshCore engine&lt;/a&gt;, and the 3 main firmware roles.&lt;/p&gt;

&lt;p&gt;What I also made clear were the &lt;a href=&quot;https://buymeacoffee.com/ripplebiz/meshcore-philosophy&quot;&gt;principles&lt;/a&gt; that project was founded on.
What has been great to see is how MeshCore has attracted the &lt;em&gt;right&lt;/em&gt; people, as many have
noted and found the general &lt;em&gt;spirit&lt;/em&gt; of conversations to be very positive and cooperative.&lt;/p&gt;

&lt;p&gt;I believe its success has rested on two main pillars:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;technical pragmatism (eg. keep it simple)&lt;/li&gt;
  &lt;li&gt;a positive and appropriate ethic for the times we’re in (eg. heavy gov/corp tracking and censorship)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As many of you know, a &lt;a href=&quot;/2026/04/23/the-split&quot;&gt;team split&lt;/a&gt; occurred earlier this year due to a steady erosion of trust, which culminated
in a trademark filing that completely went behind the core team’s back. We are now on a &lt;em&gt;war footing&lt;/em&gt; as
&lt;strong&gt;every&lt;/strong&gt; attempt from us to come to an understanding has been met with contempt by the former member.&lt;/p&gt;

&lt;p&gt;All of this could have been avoided with one simple email from him: to state his intentions upon winning
the legal mark. That’s it. I’ve made my intentions for MeshCore widely known, but the former
member prefers to hide his intentions (and his methods). Part of the huge backlash against him and his derived
products is precisely because of his lack of openness. He has plenty of time
to rebrand even the latest MeshCore releases, modify them, promote them as his own, but he doesn’t
even have time to send us, the core team, a single email?&lt;/p&gt;

&lt;p&gt;And the irony is he primarily wants to steer people &lt;em&gt;from&lt;/em&gt; the MeshCore brand &lt;em&gt;to&lt;/em&gt; his own brand! MeshCore
is simply a stepping stone, yet he still has shown no intention of dropping the trademark filing. It begs the question, why?&lt;/p&gt;

&lt;p&gt;As a result, we have burned countless days and dollars mounting a legal challenge. This has
been very draining, and has been &lt;em&gt;hurting&lt;/em&gt; the project. PR’s pile up, and features we’d hoped to have done 
by now still haven’t been touched. So, we &lt;em&gt;need&lt;/em&gt; to get this behind us and get the project back on track.&lt;/p&gt;

&lt;p&gt;But, for the next phase, we need your help.&lt;/p&gt;

&lt;p&gt;We are approaching the &lt;em&gt;pointy&lt;/em&gt; end of the legals, with a deadline looming, and
crossing the next threshold is going to cost a lot, so we’re asking for help.
The details will be explained further in this post, by Liam and the rest of the team.&lt;/p&gt;

&lt;p&gt;I just want to get back to where we keep pushing where MeshCore is going, innovating and seeing
just what is &lt;em&gt;possible&lt;/em&gt; with a community-run mesh. We have SO much still to do! And hopefully we’ll
be back on track again soon.&lt;/p&gt;

&lt;p&gt;warm regards,&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scott&lt;/em&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;timeline-summary&quot;&gt;Timeline Summary&lt;/h2&gt;

&lt;p&gt;We’ve included some key information from the timeline of events relating to this dispute below.
For the purposes of the timeline, we refer to the former team member as &lt;em&gt;AK&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;16/Nov/2024&lt;/strong&gt; Scott shares &lt;a href=&quot;https://buymeacoffee.com/ripplebiz/the-future-3211940&quot;&gt;blog post&lt;/a&gt; announcing his plans to work on MeshCore.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;20/Jan/2025&lt;/strong&gt; Scott publishes his open source MeshCore project on GitHub.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;(things are going well for more than 1 year, with a thriving community)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;(trust with AK was starting to erode)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;(some internal disagreements came up)&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;29/Mar/2026&lt;/strong&gt; AK secretly files for UK trademark.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;03/Apr/2026&lt;/strong&gt; We confronted AK on the filings. Conversation broke down with no resolution.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;10/Apr/2026&lt;/strong&gt; Liam and Scott start New Zealand company “MeshCore Technologies Limited”.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;11/Apr/2026&lt;/strong&gt; We file for MeshCore logo trademark in New Zealand.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;20/Apr/2026&lt;/strong&gt; AK secretly files for EU trademark.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;23/Apr/2026&lt;/strong&gt; We announce &lt;a href=&quot;/2026/04/23/the-split&quot;&gt;team split&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;25/Apr/2026&lt;/strong&gt; We start engagements with legal counsel.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;06/May/2026&lt;/strong&gt; We file for logo trademark in Australia.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;06/May/2026&lt;/strong&gt; We file for word trademark in Australia, New Zealand, United States and China.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;07/May/2026&lt;/strong&gt; We ask AK (again) to withdraw the UK/EU trademarks.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;07/May/2026&lt;/strong&gt; AK responds saying he won’t withdraw the UK/EU trademark applications.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;08/May/2026&lt;/strong&gt; AK says we will need to form some sort of commercial agreement with him.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;09/May/2026&lt;/strong&gt; We ask AK for a proposal around trademark rights. He says he’ll have a think about it and get back to us.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;19/May/2026&lt;/strong&gt; We follow up via email and discord asking again, about a proposal around the trademarks.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;04/Jun/2026&lt;/strong&gt; We file for subsequent international designations for word trademark in Canada, Switzerland, European Union and United Kingdom.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;12/Jun/2026&lt;/strong&gt; Our lawyers send notice of threatened opposition and extend UK trademark opposition period from 17/June/2026 to 17/July/2026.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;18/Jun/2026&lt;/strong&gt; Our lawyers send demand letter to AK. (alleges copyright infringement, stolen assets, and tool cloning, which can be seen in file names and api responses of .uk site)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;24/Jun/2026&lt;/strong&gt; AK responds to our demand letter. (denies any wrong doing or bad faith, refusing &lt;em&gt;all&lt;/em&gt; desist orders)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;25/Jun/2026&lt;/strong&gt; We reach out to AK one more time via email and discord, giving him another opportunity to provide us with a proposal around the trademarks, however received no reply.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;why-not-just-rename&quot;&gt;Why Not Just Rename?&lt;/h2&gt;

&lt;p&gt;We know some of you might be thinking, &lt;em&gt;“Why not just rename the project and move on?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The short answer is, we shouldn’t have to. We came up with the name, hand crafted the firmware and are still the original core maintainers of the project.&lt;/p&gt;

&lt;p&gt;It also sets a dangerous precedent, that if an open source project simply folds and rebrands every time a bad faith actor tries to claim a trademark, it signals that open source developers can always be bullied out of their own hard work.&lt;/p&gt;

&lt;p&gt;So instead, we are choosing to stand our ground and fight for the name we earned, and for the future of the project and our community.&lt;/p&gt;

&lt;p&gt;If AK becomes successful in registering the trademark, all it will do is fracture an already well established, global ecosystem.
It doesn’t make sense why he’s still pursuing this, especially after the massive backlash from the community.&lt;/p&gt;

&lt;h2 id=&quot;keeping-the-core-human--open-source&quot;&gt;Keeping the Core &lt;em&gt;Human&lt;/em&gt; &amp;amp; Open Source&lt;/h2&gt;

&lt;p&gt;This fight also highlights exactly where things are headed if AK gets control of the name.&lt;/p&gt;

&lt;p&gt;While some of the apps/clients in our ecosystem may be closed source, our core firmware and libraries have &lt;em&gt;always&lt;/em&gt; been strictly open source, and written by humans.&lt;/p&gt;

&lt;p&gt;AK’s version proves his trajectory, taking open source community code, feeding it to an AI, locking it down, and making it closed source, for profit.&lt;/p&gt;

&lt;p&gt;Supporting us in this fight is a vote to keep the core firmware free, open, and community driven.&lt;/p&gt;

&lt;h2 id=&quot;the-next-step&quot;&gt;The Next Step&lt;/h2&gt;

&lt;p&gt;So, now we’re facing the expensive part of all this…&lt;/p&gt;

&lt;p&gt;Unfortunately, AK is forcing this with his refusal to provide any workable resolution to this conflict.&lt;/p&gt;

&lt;p&gt;As we are getting closer to the deadline, we now need to push ahead with legal opposition of the trademarks.
At this stage, we’ve only extended the deadline for submitting our opposition arguments.
Should AK try to defend the opposition, we plan to proceed with prosecution through the courts.&lt;/p&gt;

&lt;p&gt;We have been given some estimated costs by our lawyers, totalling around $18,000 USD.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;~$3,000 USD - Legal fees to oppose the UK trademark application.&lt;/li&gt;
  &lt;li&gt;~$9,000 USD - Legal fees to proceed to prosecution if the UK trademark opposition is defended.&lt;/li&gt;
  &lt;li&gt;~$6,000 USD - Legal fees to file an invalidation action for the EU trademark.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition to this, we have already personally covered more than $15,000 towards counter-trademark filings (in other jurisdictions), legal fees and extension of opposition deadlines.&lt;/p&gt;

&lt;p&gt;Nearly all five of the core team members do MeshCore work part time.
And up until recently, the project has had no central revenue earning capability (unlike similar projects like Meshtastic).&lt;/p&gt;

&lt;p&gt;Because of this, the project is very underfunded. However, none of us have really minded. We do the work because we want to see it succeed.&lt;/p&gt;

&lt;p&gt;Very recently, we started a &lt;a href=&quot;https://github.com/sponsors/meshcore-dev/&quot;&gt;GitHub Sponsors page&lt;/a&gt;, and it’s been great to see so many of you donate to us.&lt;/p&gt;

&lt;p&gt;As this hasn’t been running for very long, unfortunately we haven’t accrued anywhere near enough to cover the legal costs.
So we’ve now started a &lt;a href=&quot;https://givealittle.co.nz/cause/help-us-save-meshcore&quot;&gt;crowd funding campaign&lt;/a&gt;, in an attempt to raise the required funds to continue the legal challenge.&lt;/p&gt;

&lt;p&gt;We are now asking the MeshCore community for any support you may be able to provide us in our fight to protect the MeshCore project’s name and future.
Any contribution you are able to provide will be greatly appreciated.&lt;/p&gt;

&lt;h2 id=&quot;what-happens-if-we-win&quot;&gt;What Happens If We Win&lt;/h2&gt;

&lt;p&gt;If we win the legal opposition, we will need to start a process to get consensus on what the trademark (and logo) ‘fair use’ policy should be.
We would be looking for suggestions from the community, and would reach out for comments when we get to that stage.&lt;/p&gt;

&lt;p&gt;We’ve always had a pretty &lt;em&gt;liberal&lt;/em&gt; attitude to the use of the name and logo, but we will have to have some formal rules
around it, and a means to prohibit any ‘bad faith’ or abusive uses.&lt;/p&gt;

&lt;p&gt;Other than that, the project would continue as normal. Instead of dealing with this legal dispute, we’d have more time to put toward working through our growing pile of feature requests!&lt;/p&gt;

&lt;h2 id=&quot;what-happens-if-challenge-is-not-viable&quot;&gt;What Happens If Challenge Is Not Viable&lt;/h2&gt;

&lt;p&gt;In the event that the trademark opposition is unsuccessful and a prosecution through the courts is not viable, say due to insufficient
funding, we would pool any raised funds into the GitHub Sponsors fund, with plans for it to benefit the MeshCore community directly.&lt;/p&gt;

&lt;p&gt;We’ve wanted to establish things like bug bounties, and some way of rewarding the top contributors after each release.
These funds could end up at least helping the future of the project in more practical ways, by helping the
efforts be more sustainable.&lt;/p&gt;

&lt;p&gt;So far, from our generous sponsors, we have accrued around ~$1,800.&lt;/p&gt;

&lt;h2 id=&quot;our-final-request-to-andy&quot;&gt;Our Final Request to Andy&lt;/h2&gt;

&lt;p&gt;Andy, if you’re reading this, we urge you to withdraw your trademark applications.
Please consider the long term health and future of the MeshCore project, and bring this dispute to a close.&lt;/p&gt;

&lt;p&gt;All it takes is a quick email to the trademark offices requesting the withdrawal of your filings.
If you do that, we will drop our legal challenges, and we can all move on, allowing us more time and energy for the project.&lt;/p&gt;

&lt;p&gt;Otherwise, we have compiled all necessary evidence, and are fully prepared to push forward with defending our open source project.&lt;/p&gt;

&lt;h2 id=&quot;help-support-the-meshcore-team&quot;&gt;Help Support the MeshCore Team&lt;/h2&gt;

&lt;p&gt;If you’d like to help support the MeshCore project, please consider donating through our links below.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Crowd Funding Campaign: &lt;a href=&quot;https://givealittle.co.nz/cause/help-us-save-meshcore&quot;&gt;https://givealittle.co.nz/cause/help-us-save-meshcore&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;GitHub Sponsors: &lt;a href=&quot;https://github.com/sponsors/meshcore-dev/&quot;&gt;https://github.com/sponsors/meshcore-dev/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even if you’re unable to contribute financially, sharing this post will help us tremendously.&lt;/p&gt;

&lt;p&gt;We appreciate all the support we can get.&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"></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">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></feed>