Inspiration
The dictionary definition of accessibility is the quality of being easily reached, entered, or used by people who have a disability. However, a unique thing about this concept is that it can benefit everyone. Everything on the internet runs through servers owned by huge companies, and if any of that infrastructure disappears, so does our ability to communicate. I started wondering what communication would look like if it didn’t rely on single points of failure. What if, the network was made, by the people FreeMesh came from the belief that communication should be accessible, local, user-controlled, and impossible for one group to shut down. It is inherently accessible due to its low cost. And even over long ranges, the wireless communication can be easily modified.
What it does
FreeMesh creates a small but functional decentralized mesh network using ESP32 boards. Each device can scan for other nodes, forward messages, and extend the total range of the network. I built a lightweight protocol that carries message IDs, routing data, and text. A desktop app lets me send messages to any device and watch new nodes appear in real time. On the receiver side, the RGB OLED module displays incoming messages. Every device becomes both a sender and repeater, so the mesh grows stronger and covers more ground as more nodes join.
How I built it
I built FreeMesh around ESP-NOW, wrapping the default library in cleaner classes so I could treat each device like a network node rather than a simple transmitter. I created a message structure with IDs, routing info, and text, along with a small deduplication system to prevent loops. Then I built a Python desktop app using CustomTkinter and PySerial to scan, send messages, and visualize the mesh in real time. For the display side, I hooked up an RGB OLED module so it could show received messages. Everything communicates through a simple, flexible packet system.
Challenges I ran into
One big challenge was going from simple A-to-B communication to something that actually worked like a mesh. Messages needed to hop between devices but not bounce forever, so I had to design a deduplication system that was lightweight and reliable. Integrating everything with a desktop app also was hard, as serial comms can be unpredictable, and getting stable sending and receiving was harder than expected. On top of that, keeping the codebase organized while experimenting meant creating wrapper classes to avoid totally chaotic logic. Balancing flexibility, readability, and functionality was a real challenge.
Accomplishments that I'm proud of
I’m proud that FreeMesh actually works like a real mesh network. Nodes discover each other, relay messages, and display them on hardware screens. Building a full desktop interface that interacts with the mesh in real time felt especially rewarding. I’m also proud of how clean the architecture turned out; the wrapper classes make the system easy to extend without rewriting everything. Most importantly, the project feels genuinely useful. It’s not just a demo, it’s a foundation for decentralized communication that anyone can build on, modify, or expand into something bigger.
What I learned
I learned that decentralized networking requires thinking differently than normal client-server systems. Every node has to be able to receive, forward, and filter messages without breaking the network. I also learned a ton about serial communication, threading, display drivers, and how small design choices can create big headaches later. Building a mesh network forced me to pay attention to things like timing, deduplication, routing, and structure. Most of all, I learned how important it is to design for flexibility so the project can grow without becoming impossible to maintain.
What's next for FreeMesh
FreeMesh is completely open source, so anyone can expand it however they want. I see this as a starting point for all kinds of experiments—better routing, encryption, long-range modules, visualization tools, sensors, or even full offline chat systems. Most hackathon projects aim for polish, but the unfinished nature of FreeMesh is actually a strength. Its simplicity makes it easy for others to customize and push in new directions. My goal is to keep improving the foundation while letting the community shape what FreeMesh becomes next.

Log in or sign up for Devpost to join the conversation.