A browser-based companion client for MeshCore — a lightweight LoRa mesh networking protocol for off-grid communication. Connect to your companion radio over USB serial, Bluetooth LE, or WiFi, send messages across the mesh, map your neighbors, and even run AI-powered mesh bots — all with no internet, cellular, or backend infrastructure.
Live at kn0.app
- Zero install, zero account — Open a URL and you're talking to your radio. Nothing to download, no sign-up.
- Truly private — Everything runs in your browser. Message history, contacts, and API keys are encrypted at rest with AES-GCM and never leave your device.
- Off-grid first — Works entirely client-side, so once the page is loaded it keeps working without internet or cell service.
- Batteries included — Chat, contact and channel management, live maps, device stats, radio configuration, and an AI automation engine in one place.
- Three transport modes — USB Serial (Web Serial API), Bluetooth LE (Nordic UART), and WebSocket (WiFi)
- Channels & direct messages — Up to 8 named channels with 16-byte secrets
and encrypted 1-to-1 DMs, with
@-mention suggestions - Contact management — Chat nodes, repeaters, and room servers with hop-distance tracking, favorites, and path reset
- Add & discover contacts — Import by
meshcore://link, paste a public key manually, discover nodes from adverts, or import channels by link - Share your node — Publish a self-contact QR code and shareable link so others can add you in one tap
- Rich chat — Date dividers, per-message copy, and persistent conversations
- Live map view — Leaflet with OpenStreetMap and Carto tiles plotting your contacts and adverts as colored shapes with a legend
- Coordinates & distance — See location and distance in contact and advert detail
- Advertised location — Set and share your own location with a map picker
- Self-advertise — Announce yourself to the mesh (flood or zero-hop)
- Radio parameters — View and edit region presets and radio settings
- Device management — Rename your node, reboot the device, and sync its clock on connect
- Device stats — Battery, RSSI/SNR, packet counters, uptime, and storage in a full-page dashboard
Turn your radio into a helpful, autonomous mesh bot — an auto-responder, a relay assistant, a status announcer — driven by a large language model you control.
- Bring your own key (BYOK) — Connect your own Anthropic API key and run Claude models (Sonnet, Opus, Haiku). Your key is stored per radio, encrypted at rest, held only in memory for the tab's lifetime, and sent directly from your browser to Anthropic — never to any proxy or server.
- Automation rules engine — Build rules as
trigger → condition → action. Fire on incoming direct or channel messages, adverts, ACKs, or connection events, optionally filtered by message content. - Fixed or prompt actions — A
fixedaction runs a deterministic tool call with no LLM required; apromptaction runs an agentic LLM loop over a constrained, MCP-shaped tool set (read contacts, channels, messages, and stats; send DMs and channel messages; advertise; add, remove, and favorite contacts). - Strong guardrails — Per-rule tool allowlists, LoRa airtime rate limiting, turn and token caps, a global kill switch, and an audit log keep automation safe on a shared, low-bandwidth mesh.
- Human-in-the-loop — Choose
approvemode to stage every transmit/write for one-tap sign-off from a top-bar approvals inbox, orautomode for hands-off operation (still rate-limited and stoppable).
- Command palette — A global "Find Anything" search across contacts, channels, messages, automation rules, and actions
- Multi-language UI — English, Spanish, German, and French, auto-detected from the browser and switchable on the connect screen
- Persistent history — Messages stored in IndexedDB with AES-GCM encryption, restored on reconnect
- Fully client-side — No server, no account, no cloud; everything runs in your browser
Web Serial (USB) and Web Bluetooth (BLE) are Chromium APIs, so Chrome or Edge (desktop) support everything. Firefox supports USB but not BLE. Safari is not supported.
- Node.js 20+
- npm 10+
- A MeshCore companion radio flashed with companion firmware
- (Optional) An Anthropic API key to enable the AI automation features
git clone https://github.com/kNoAPP/MeshCore-WebAgent.git
cd MeshCore-WebAgent
npm install
npm run devOpen http://localhost:3000.
npm run build # outputs static site to out/The build produces a fully static site in out/ that can be served from any
static host (GitHub Pages, S3, Cloudflare Pages, nginx, etc.).
The live site at kn0.app deploys automatically from main
via GitHub Pages. To deploy your own fork:
- Enable GitHub Pages in your repo settings (source: GitHub Actions)
- Point your DNS to GitHub Pages and configure your custom domain
- Push to
main— thedeployworkflow handles the rest
app/ Next.js App Router entry points
components/ React UI components
hooks/ useMeshCore, useAutomation, useAdvertise, and more
lib/
meshcore/ Binary protocol implementation (client, transports, parsers)
ai/ LLM provider abstraction, automation engine, tools, secrets
map/ Leaflet map config, markers, and node plotting
i18n/ react-i18next setup (config + instance)
search/ Command palette search index
storage.ts IndexedDB persistence with AES-GCM encryption
locales/ Per-language UI dictionaries (en, es, de, fr)
store/ Zustand global state
types/ TypeScript interfaces
See CONTRIBUTING.md for development setup, branch conventions, and the PR process.
Please do not open public issues for security vulnerabilities. See SECURITY.md for responsible disclosure instructions.
PolyForm Noncommercial License 1.0.0 — free for personal, educational, and non-commercial use. Commercial use requires explicit permission from the author.