v2.0 — Meshtastic + MeshCore, unified.
OverMesh is a self-hosted dashboard for Meshtastic and MeshCore. It runs on your own machine, uses your own radios, and keeps everything local, no cloud, no account, no subscription.
This is now the main active OverMesh app. Meshtastic and MeshCore are treated as two equal parts of one tool, not as separate side projects.
Active development This app is actively used and still changing. Expect a few rough edges.
OverMesh gives you one place to work with both networks. You can watch nodes on the map, use chat on either system, run Sense, manage radios and channels, use the bot, and bridge traffic between MT and MC when needed.
The app is built around real use, not just setup screens. The idea is simple: one interface where you can actually watch the mesh, talk on it, and manage it.
Meshtastic Sense with live node response log and map view
MeshCore Sense with heard-recently contact list, map markers, and activity log
Live Nodes view with MT and MC available in one interface
MeshCore radio settings and device controls
OverMesh covers the main things you actually need in daily use: maps, chat, direct messages, multi-radio support, Sense, bot tools, settings, notifications, and offline map tiles.
- live node map with labels, age coloring, and quick actions
- channel chat, direct messages, unread indicators, and per-radio history
- traceroute, node info, position request, and direct-message actions
- radio settings for identity, LoRa, channels, position, power, display, telemetry, MQTT, Bluetooth, and WiFi
- per-channel history cleanup from Settings
- multi-radio MeshCore support
- MC contacts on the Nodes tab and on the map
- MC chat with channel tabs, DM tabs, delivery state, unread indicators, and local saved message history
- route and hop-count badges on received MC messages, with path visualization on the map
- MC radio settings, channel management, device info, coordinates, TX power, path-hash mode, and reboot tools
- MC advert controls (local or flood) directly from the chat toolbar
- MC bot support, MC Sense activity integration, and per-channel history cleanup from Settings
- MT and MC visible together in one app
- map and Nodes views designed to stay as similar as possible across both systems
- Mesh Sense with route/hop path visualization
- offline maps
- in-app notifications for messages, new nodes, and nodes seen again after a long gap, with per-type sound toggles
- browser notifications and tab unread message count
- accent color and zoom settings
- searchable in-app manual
- Settings → App update checker
- Python 3.9+
- Linux is the primary tested platform and the strongest target environment
- at least one Meshtastic or MeshCore radio
OverMesh is built first around practical Linux use, including Filip's cyberdeck workflow, but the app should stay reasonably usable on Windows and macOS too where the underlying radio tooling allows it.
- Linux: best-supported path, primary development target, and the most natural fit for attached radios and long-running service use
- Windows: usable for direct app runs, but less tested than Linux
- macOS: possible for direct app runs, but less tested than Linux
For now, native installs are the priority. Docker and similar deployment options can come later if they are useful, but they are not the main install path.
The easiest path for Linux, especially for long-running or service installs, is the included install script:
git clone https://github.com/Slofi/overmesh.git
cd overmesh
chmod +x install.sh
./install.shThe script installs Python dependencies, copies the config template, and sets up and enables a systemd user service with the correct paths substituted. After it finishes:
systemctl --user start overmeshThen open http://localhost:8082 and add your radios from Settings.
Manual install (venv)
If you prefer a virtual environment or just want to run it directly:
git clone https://github.com/Slofi/overmesh.git
cd overmesh
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp config.example.json config.json
python3 app.pyA virtual environment is recommended. Modern Linux distros often block system-wide
pip install.
Then open http://localhost:8082. You can add radios from the UI in Settings.
- Install Python 3.9 or newer from python.org — check Add Python to PATH during install
- Clone or download this repo and open the folder in Command Prompt or PowerShell
- Set up the environment:
py -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
copy config.example.json config.jsonPowerShell note: If
venv\Scripts\activatefails with "running scripts is disabled", either use Command Prompt instead, or runSet-ExecutionPolicy -Scope Process -ExecutionPolicy Bypassfirst.
- Run it:
py app.pyThen open http://localhost:8082 and add your radios from Settings.
For subsequent launches you can use start-overmesh.bat — it automatically uses the venv if present, or falls back to system Python.
Serial ports on Windows appear as
COM3,COM4, etc. — not/dev/tty...paths. Use Device Manager to find the right port for your radio.
- Install Python 3.9 or newer
- Clone or download this repo and open Terminal in the repo folder
- Set up the environment:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp config.example.json config.json- Run it:
python3 app.pyThen open http://localhost:8082 and add your radios from Settings.
- The starter config is just a basic template
- You can add radios from the UI after startup in
Settings - Serial device names vary by platform, so do not assume Linux-style
/dev/...paths on Windows or macOS - If you only use one system, the app still works fine
- Start the app
- Open
Settings - Add an MT radio, an MC radio, or both
- Go to
Chat,Nodes, orMap - Use the radio pills and MT/MC toggles to switch views
If you only use one system, that is fine. If you use both, OverMesh keeps them together in one interface.
config.json stores app and radio settings. In normal use, most radio setup can be done from the UI, so you usually only touch the file for first setup or custom deployments.
Key values include:
nodes— list of Meshtastic radiosmc_nodes— list of MeshCore radiosport— default8082host— default0.0.0.0app.zoom— UI zoom levelapp.accent_color— accent color hexsense_passive— enable passive Sense loggingsense_active_auto— auto-run active Sense on connectcross.rules— cross-system forwarding rulesbridge— webhook, ingest, and MQTT bridge settingsgps— optional GPS receiver config (enabled,port); not included in the example config, disabled by default
Environment variables override config file values:
OVERMESH_CONFIG— path to a custom config fileOVERMESH_DATA_DIR— directory for data files (DBs, etc.)OVERMESH_HOST— bind hostOVERMESH_PORT— bind port
The recommended way to set up the service on Linux is ./install.sh, which handles path substitution automatically.
If you prefer to do it manually, the overmesh.service file contains placeholder tokens that must be replaced before copying:
sed \
-e "s#APP_DIR#$(pwd)#g" \
-e "s#PYTHON_BIN#$(command -v python3)#g" \
overmesh.service > ~/.config/systemd/user/overmesh.service
systemctl --user daemon-reload
systemctl --user enable --now overmesh.serviceDo not
cpthe service file directly — the placeholders will not resolve and the service will fail to start.
Logs:
journalctl --user -u overmesh -fThis is a Linux convenience option. Windows and macOS users run it directly with py app.py or python3 app.py.
- some MC metadata, such as per-message SNR, is best-effort rather than guaranteed
- the app is still evolving, so some UI details will keep changing
Recent work has moved OverMesh much closer to feeling like one real dual-network app instead of two uneven halves.
The big changes were better MC support across the app, cleaner MT and MC UI parity, better heard-recently logic, in-app notifications, and per-channel history deletion on both systems.
OverMesh is now clearly the MT plus MC app.
If you want the short public summary, see RELEASE_NOTES.md in this repo.
If you are coming from the older OverMesh setup, see MIGRATION.md.
OverMesh has an app-wide accent color setting, so you can change the look without changing the layout.
Example of the accent color applied across the app
For the background story behind the project, see ABOUT.md.
| File | Purpose |
|---|---|
app.py |
Flask app startup, routes, shutdown handling |
mesh.py |
Meshtastic connect, reconnect, packet handling |
mesh_mc.py |
MeshCore async bridge and event handling |
bot.py |
Bot logic |
cross.py |
Cross-system forwarding logic |
db.py |
SQLite storage |
helpers.py |
SSE push and helper functions |
routes/ |
Flask blueprints by feature area |
templates/index.html |
Main frontend UI |
MIT