Plugin Ecosystem

Extend MeshDash.
Build the Tools
Your Mesh Needs.

Every plugin gets a fully isolated environment — FastAPI router, static file server, sidebar nav entry, in-memory log stream, and lifecycle management — without touching a single line of core code. Ship a plugin in an afternoon. Reach every MeshDash deployment through the verified store.

4
Plugins in Store

Available to install from your dashboard

100%
Verified & Reviewed

Every plugin reviewed before store publication

< 5 min
Install Time

One click in the Plugin Manager

Zero
Core Changes

Plugins never modify core MeshDash files

Isolated FastAPI router — your routes, your namespace
Static file server — ship HTML/CSS/JS with your plugin
In-memory log viewer — visible in the Plugin Manager UI
JWT auth inherited — no auth boilerplate ever
Watchdog-monitored background tasks — auto-restart on crash
Full core context — db, nodes, radio TX, config
Sidebar nav entry — your plugin appears in the dashboard menu
Zero-downtime stop/start — .disabled flag, no process kill
Verified Plugin Store

Available Right Now

These are the real, live plugins currently in the MeshDash plugin store — scanned directly from the plugin repository. Install any of them from the Plugin Manager in your dashboard with one click.

Auto-Responder OFFICIAL v1.0.0
auto_responder · by MeshDash

Automatically replies to incoming Direct Messages. Includes an anti-spam cooldown to prevent infinite reply loops.

PLUGIN OFFICIAL SIDEBAR UI
SIDEBAR ENTRIES
Auto-Responder /plugin/auto_responder/index.html
Hello Mesh OFFICIAL v1.0.0
hello_mesh · by MeshDash

The official MeshDash tutorial plugin. Pre-installed on every instance. Provides a live API explorer where you can test every dashboard endpoint directly in your browser, a background task demonstrating watchdog heartbeating, and a mesh TX test form. All source code is extensively commented and designed to be read as a learning resource.

TUTORIAL WATCHDOG OFFICIAL WATCHDOG SIDEBAR UI
SIDEBAR ENTRIES
Hello Mesh /plugin/hello_mesh/index.html
ISS Tracker OFFICIAL v1.0.0
iss · by MeshDash

Tracks the International Space Station in real time using the Open Notify API. Broadcasts ISS overhead pass predictions and current coordinates to your mesh on a configurable interval. Includes a next-pass calculator for your local grid square.

TELEMETRY WATCHDOG OFFICIAL WATCHDOG SIDEBAR UI
SIDEBAR ENTRIES
ISS Tracker /plugin/iss/index.html
Weather Plugin OFFICIAL v1.0.0
weather · by MeshDash

Fetches current weather conditions from Open-Meteo (no API key required) and broadcasts to a configurable mesh channel on a cron schedule. Supports custom location by coordinates or city name, Celsius or Fahrenheit, and a configurable message prefix. Runs a watchdog-monitored background poller.

AUTOMATION WATCHDOG OFFICIAL WATCHDOG SIDEBAR UI
SIDEBAR ENTRIES
Weather /plugin/weather/index.html
Installing Plugins from Your Dashboard

All plugins in the store are available directly from the Plugin Manager inside your running MeshDash instance. Open the Plugins view, click INSTALL PLUGIN, choose the URL tab, and paste the plugin's .zip URL. The server fetches, extracts, and registers the plugin automatically. Then click APPLY & RESTART.

meshdash.local:8000 → Plugins → INSTALL PLUGIN → FROM URL → paste .zip URL → APPLY & RESTART
Dashboard View

The Plugin Manager — What It Looks Like

meshdash.local:8000 / Plugins
LIVE
4
INSTALLED
4
RUNNING
1
STOPPED
0
CRASHED
Auto-Responder OFFICIAL
auto_responder · v1.0.0 · MeshDash
RUNNING
Automatically replies to incoming Direct Messages. Includes an anti-spam cooldown to prevent infinit…
Hello Mesh OFFICIAL
hello_mesh · v1.0.0 · MeshDash
RUNNING
Interactive API explorer & plugin tutorial. Learn how to build MeshDash plugins by running live exam…
ISS Tracker OFFICIAL
iss · v1.0.0 · MeshDash
RUNNING
Real-time International Space Station tracker. Plot the ISS on a map, view crew details, and set up …
Weather Plugin OFFICIAL
weather · v1.0.0 · MeshDash
RUNNING
Fetch current weather from Open‑Meteo and broadcast to the mesh…
Developer Documentation

Build Your First Plugin This Afternoon

The complete developer guide lives in the MeshDash documentation. Everything below is a practical overview. Start from Hello Mesh — it's already running on your instance.

1. Directory Structure

plugins/
└── my_plugin/
    ├── manifest.json    ← required
    ├── main.py          ← entry point
    ├── requirements.txt ← pip deps
    ├── static/          ← served at /static/plugins/my_plugin/
    │   └── index.html
    └── README.md        ← required for store submission

2. manifest.json

{
  "id":            "my_plugin",
  "name":          "My Plugin",
  "version":       "1.0.0",
  "author":        "Your Name",
  "description":   "What this plugin does.",
  "entry_point":   "main.py",
  "router_prefix": "/api/plugins/my_plugin",
  "static_prefix": "/static/plugins/my_plugin",
  "watchdog":      false,
  "nav_menu": [{
    "label": "My Plugin",
    "icon":  "fa-puzzle-piece",
    "href":  "/plugin/my_plugin/index.html"
  }]
}

3. Python Entry Point

from fastapi import APIRouter
plugin_router = APIRouter()
_ctx = {}

def init_plugin(context: dict):
    global _ctx
    _ctx = context
    _ctx['logger'].info("my_plugin loaded")

@plugin_router.get("/hello")
async def hello():
    node = _ctx['meshtastic_data'].local_node_id
    return {"node": node, "status": "ok"}

@plugin_router.post("/announce")
async def announce(text: str):
    conn = _ctx['connection_manager']
    await conn.sendText(text, destinationId="^all",
                        channelIndex=0)
    return {"sent": True}

4. init_plugin Context Keys

db_manager DatabaseManager — SQLite access
meshtastic_data Nodes, packets, stats, local node ID
connection_manager sendText() — transmit to mesh
node_registry Dict of all active NodeSlot objects
event_loop Main asyncio loop for threadsafe scheduling
logger Python logger pre-scoped to plugin.{id}
plugin_watchdog Dict — write [pid]=time.time() for heartbeat
plugin_id This plugin's own id string

Background Task with Watchdog — Full Example

import time, threading
from fastapi import APIRouter

plugin_router = APIRouter()
_running = False

@plugin_router.get("/status")
async def status():
    return {"running": _running}

def _loop(ctx):
    global _running
    pid      = ctx["plugin_id"]
    logger   = ctx["logger"]
    watchdog = ctx["plugin_watchdog"]
    conn     = ctx["connection_manager"]
    _running = True
    logger.info("Background task started")

    while _running:
        try:
            # ── Do your work here ──────────────
            logger.debug("poll cycle")

            # MUST heartbeat if watchdog=true
            watchdog[pid] = time.time()
        except Exception as e:
            logger.error(f"Poll error: {e}")
        time.sleep(30)

def init_plugin(context: dict):
    t = threading.Thread(
        target=_loop, args=(context,), daemon=True)
    t.start()
    context["logger"].info("Plugin init complete")
Watchdog Behaviour

Set "watchdog": true in manifest.json. Your background task must write watchdog[pid] = time.time() at least once per minute. If the heartbeat stops, MeshDash marks the plugin as hung, routes return 503, and the APPLY & RESTART button appears.

Route Security

All plugin routes automatically get a state-check dependency injected by the PluginManager. If the plugin status is not running or the watchdog has fired, the dependency raises 503 Service Unavailable. You never need to implement this yourself.

Disabling a Plugin
touch /opt/meshdash/plugins/my_plugin/.disabled

This is what the STOP button does internally. The plugin stops loading at startup without being deleted. Remove the file (or click START) to re-enable.

Get Into the Store

Submit Your Plugin — Own Your Distribution

Your MeshDash account — created during the Setup Wizard — is your developer account. No separate registration, no fee, no gatekeeping on development. Only store publication is reviewed.

1
Create Account via Setup Wizard

Visit meshdash.co.uk/c2_setup.php to set up MeshDash. The account you create is automatically a developer account.

2
Build with Hello Mesh as Your Template

Clone Hello Mesh from your running instance's Plugin Manager. It's already fully documented with live endpoints you can test.

3
Submit via Developer Portal

Log in at meshdash.co.uk/plugin-development.php. Upload your plugin .zip, fill in the submission form, and link a test instance.

4
Verification Review

Code review, manifest validation, functional testing, and documentation check. Two-way feedback via the developer portal. Most reviews complete within 5 business days.

5
Live in the Store

Your plugin appears in every MeshDash Plugin Manager worldwide. You keep full ownership and can push revisions through the portal at any time.

What You Get as a Developer

Repository Management

Push revisions at any stage — pre-review, during review, or after going live. Security-affecting changes trigger a targeted re-review only.

Install Analytics

See how many instances have your plugin installed, which versions are active, and aggregate error rates from watchdog reports.

Review Feedback Thread

Two-way conversation with the MeshDash review team — request clarification, respond to notes, track approval status.

Version Control

Maintain stable, beta, and deprecated releases. Instances on older versions are notified of updates in their Plugin Manager.

Permanent Attribution

Your name on every plugin card in every Plugin Manager worldwide. Attribution is tied to your account, not just the release.

Security Disclosure Channel

Private channel to coordinate responsible disclosure updates directly with the MeshDash security team.

Why There's a Review Process

MeshDash plugins run inside the server process with access to the database, connected radios, and the network. That's significant trust. The review exists to keep users safe — not to slow down development.

Security Review

No injection risks, no unsafe subprocess, no credential exfiltration, no calls outside the plugin API.

Manifest Validation

Required fields, valid semver, safe nav labels, no conflicting route prefixes with core or other plugins.

Functional Test

Installed on a clean instance. Start/stop/restart lifecycle exercised. Routes tested. Watchdog verified.

Docs Check

README must explain functionality, config options, external dependencies, and known limitations.

Ready to build?

Start from Hello Mesh — running on your instance right now. Read the developer docs. Set up via the Setup Wizard to get your developer account. The first working plugin usually takes under an afternoon.

Full Developer Docs Setup Wizard — Get Account Developer Portal

Setup wizard account = developer account. No fee. No separate registration.
Development is unrestricted — only store publication goes through review.