<?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-05-12T01:10:46+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">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><entry><title type="html">OTA Updates on nRF Devices</title><link href="https://blog.meshcore.io/2026/04/02/nrf-ota-update" rel="alternate" type="text/html" title="OTA Updates on nRF Devices" /><published>2026-04-02T00:00:00+00:00</published><updated>2026-04-02T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/04/02/nrf-ota-update</id><content type="html" xml:base="https://blog.meshcore.io/2026/04/02/nrf-ota-update">&lt;p&gt;Updating the firmware of your repeaters or room servers is super easy for nRF-based nodes.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/02/nRF-DFU.webp&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Download new .zip&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to the &lt;a href=&quot;https://flasher.meshcore.io/&quot;&gt;webflasher&lt;/a&gt; and find your device, then select the Repeater or Room Server role, then latest version. In the bottom-right, click the &lt;strong&gt;Download&lt;/strong&gt; button, then select .zip file:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/02/nRF-zip-download.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Alternatively, go to the &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/releases&quot;&gt;Github releases&lt;/a&gt; page, then find the related artifact, eg. &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/releases/download/repeater-v1.14.1/Heltec_t114_repeater-v1.14.1-467959c.zip&quot;&gt;the T114 Repeater&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Login to repeater/room server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Using the mobile app, login to your device:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/01/app-repeater-login.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Then switch to the Command Line, and enter &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;start ota&lt;/code&gt; command:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/01/repeater-cli2.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;You should then see a reply, like:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;OK - mac: FF:AA:BB ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Alternatively, you can use a standalone device like the T-Deck with the Ripple firmware to enter the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;start ota&lt;/code&gt; command:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/01/xiao-start-ota.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Connect with your phone&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you don’t have it installed already, you will need to install the Nordic &lt;strong&gt;nRF Device Firmware Update&lt;/strong&gt; app, which you can find on &lt;a href=&quot;https://play.google.com/store/apps/details?id=no.nordicsemi.android.dfu&quot;&gt;Google Play&lt;/a&gt; and the &lt;a href=&quot;https://apps.apple.com/us/app/nrf-device-firmware-update/id1624454660&quot;&gt;App Store&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.1 DFU App Settings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the app, tap on &lt;strong&gt;Settings&lt;/strong&gt; icon and use these recommended settings changes:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Packet receipts notification - &lt;strong&gt;ON&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Number of packets - &lt;strong&gt;8&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Request high MTU (Android only) - &lt;strong&gt;OFF&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Disable resume - &lt;strong&gt;ON&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Prepare object delay - &lt;strong&gt;0 ms&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Force scanning - &lt;strong&gt;ON&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3.2 Start update&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the app, select the .zip file you downloaded and select the Device, Then press the &lt;strong&gt;start&lt;/strong&gt; button:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/02/dfu-app.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And that’s it!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Finishing Up&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once completed, logout then log back in (either with the app or a standalone device), check that the clock is correct with the &lt;strong&gt;clock&lt;/strong&gt; command. If it is incorrect, just issue the &lt;strong&gt;clock sync&lt;/strong&gt; command.&lt;/p&gt;

&lt;p&gt;Also, you might want to enter the &lt;strong&gt;ver&lt;/strong&gt; command, to check the firmware version is now updated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trouble Shooting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the update stalled or failed, try issuing this command from phone or standalone device:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;And then try the process again.&lt;/p&gt;</content><author><name>scottpowell</name></author><category term="Firmware" /><category term="Guide" /><summary type="html">Updating the firmware of your repeaters or room servers is super easy for nRF-based nodes.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.meshcore.io/assets/images/2026/04/02/nRF-DFU.webp" /><media:content medium="image" url="https://blog.meshcore.io/assets/images/2026/04/02/nRF-DFU.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">OTA Updates on ESP32 Devices</title><link href="https://blog.meshcore.io/2026/04/01/esp-ota-update" rel="alternate" type="text/html" title="OTA Updates on ESP32 Devices" /><published>2026-04-01T00:00:00+00:00</published><updated>2026-04-01T00:00:00+00:00</updated><id>https://blog.meshcore.io/2026/04/01/esp-ota-update</id><content type="html" xml:base="https://blog.meshcore.io/2026/04/01/esp-ota-update">&lt;p&gt;Updating the firmware of your repeaters or room servers is super easy for ESP32-based nodes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Download new .bin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to the &lt;a href=&quot;https://flasher.meshcore.io/&quot;&gt;webflasher&lt;/a&gt; and find your device, then select the Repeater or Room Server role, then latest version. In the bottom-right, click the &lt;strong&gt;Download&lt;/strong&gt; button, then select the second .bin (ie. &lt;em&gt;not&lt;/em&gt; the merged.bin!):&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/01/flasher-download.jpeg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Alternatively, go to the &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/releases&quot;&gt;Github releases&lt;/a&gt; page, then find the related artifact, eg. &lt;a href=&quot;https://github.com/meshcore-dev/MeshCore/releases/download/repeater-v1.14.1/Heltec_v3_repeater-v1.14.1-467959c.bin&quot;&gt;the Heltec V3 Repeater&lt;/a&gt;.
&lt;strong&gt;NOTE: do &lt;em&gt;not&lt;/em&gt; download the -merged.bin!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Login to repeater/room server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Using the mobile app, login to your device:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/01/app-repeater-login.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Then switch to the Command Line, and enter &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;start ota&lt;/code&gt; command:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/01/repeater-cli2.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;You should then see a reply, like:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Started: http://192.168.4.1/update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Alternatively, you can use a standalone device like the T-Deck with the Ripple firmware to enter the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;start ota&lt;/code&gt; command:&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;mx-auto&quot; src=&quot;/assets/images/2026/04/01/xiao-start-ota.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Connect with your laptop/phone&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The ESP32 device should have created a WiFi access point called &lt;strong&gt;MeshCore-OTA&lt;/strong&gt;. Just connect to this from your laptop (or phone), and navigate to the URL that was shown in the command line response (above). You should see a page like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/01/repeater-ota.png&quot; alt=&quot;&quot; /&gt;
Just take note of the ID displayed, eg the “MC Prime (Xiao C3)”, as this should be the name (and MCU type) of the node you are about to update.&lt;/p&gt;

&lt;p&gt;Click the &lt;strong&gt;Choose file&lt;/strong&gt; button, and select the .bin file you previously downloaded. You should then see a progress bar:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2026/04/01/ota-progress.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Finishing Up&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once completed, logout then log back in (either with the app or a standalone device), check that the clock is correct with the &lt;strong&gt;clock&lt;/strong&gt; command. If it is incorrect, just issue the &lt;strong&gt;clock sync&lt;/strong&gt; command.&lt;/p&gt;

&lt;p&gt;Also, you might want to enter the &lt;strong&gt;ver&lt;/strong&gt; command, to check the firmware version is now updated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trouble Shooting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the progress bar stalled, or something went wrong, try issuing this command from phone or standalone device:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;And then try the process again.&lt;/p&gt;</content><author><name>scottpowell</name></author><category term="Firmware" /><category term="Guide" /><summary type="html">Updating the firmware of your repeaters or room servers is super easy for ESP32-based nodes.</summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blog.meshcore.io/assets/images/2026/04/01/repeater-ota.png" /><media:content medium="image" url="https://blog.meshcore.io/assets/images/2026/04/01/repeater-ota.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>