{"id":35129122,"url":"https://github.com/statico/meshtastic-cli","last_synced_at":"2026-03-08T06:07:33.051Z","repository":{"id":329307785,"uuid":"1119038610","full_name":"statico/meshtastic-cli","owner":"statico","description":"🌌 Terminal UI for monitoring Meshtastic mesh networks - view packets, nodes, and chat in real-time","archived":false,"fork":false,"pushed_at":"2026-03-04T03:11:39.000Z","size":735,"stargazers_count":7,"open_issues_count":7,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-04T08:35:07.839Z","etag":null,"topics":["bun","claude","cli","ink","lora","mesh-network","meshtastic","meshtastic-addon","monitoring","react","terminal","tui","vibe-coded","vibe-coding"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/statico.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-12-18T16:40:39.000Z","updated_at":"2026-03-04T03:11:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/statico/meshtastic-cli","commit_stats":null,"previous_names":["statico/meshtastic-cli"],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/statico/meshtastic-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fmeshtastic-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fmeshtastic-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fmeshtastic-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fmeshtastic-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/statico","download_url":"https://codeload.github.com/statico/meshtastic-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/statico%2Fmeshtastic-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30246890,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T05:41:50.788Z","status":"ssl_error","status_checked_at":"2026-03-08T05:41:39.075Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bun","claude","cli","ink","lora","mesh-network","meshtastic","meshtastic-addon","monitoring","react","terminal","tui","vibe-coded","vibe-coding"],"created_at":"2025-12-28T04:30:10.112Z","updated_at":"2026-03-08T06:07:33.042Z","avatar_url":"https://github.com/statico.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Meshtastic CLI\n\n[![Build](https://github.com/statico/meshtastic-cli/actions/workflows/build.yml/badge.svg)](https://github.com/statico/meshtastic-cli/actions/workflows/build.yml)\n[![Docker](https://github.com/statico/meshtastic-cli/actions/workflows/docker.yml/badge.svg)](https://github.com/statico/meshtastic-cli/actions/workflows/docker.yml)\n[![Release](https://img.shields.io/github/v/release/statico/meshtastic-cli)](https://github.com/statico/meshtastic-cli/releases)\n[![License](https://img.shields.io/github/license/statico/meshtastic-cli)](LICENSE)\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003ch3\u003eLive Packet View\u003c/h3\u003e\n      \u003cimg width=\"799\" height=\"815\" alt=\"CleanShot 2025-12-28 at 17 10 17\" src=\"https://github.com/user-attachments/assets/c1862da1-5088-453f-8a14-ed324e2f6edf\" /\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ch3\u003eNode List\u003c/h3\u003e\n      \u003cimg width=\"856\" height=\"793\" alt=\"CleanShot 2025-12-28 at 17 17 16\" src=\"https://github.com/user-attachments/assets/a3efcc6a-70f7-4cb8-a7bf-0588493bbde8\" /\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003ch3\u003eChat Channels\u003c/h3\u003e\n      \u003cimg width=\"799\" height=\"815\" alt=\"CleanShot 2025-12-28 at 17 11 04\" src=\"https://github.com/user-attachments/assets/345982b9-dac1-4783-8a30-a52c3df92cce\" /\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003ch3\u003eInteractive Help\u003c/h3\u003e\n      \u003cimg width=\"799\" height=\"815\" alt=\"CleanShot 2025-12-28 at 17 12 58\" src=\"https://github.com/user-attachments/assets/71cdf736-1c95-40e6-a689-8f50682ebc7d\" /\u003e\\\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003e [!WARNING]\n\u003e This project was completely vibe-coded with [Claude Code](https://claude.com/claude-code) and [Cursor](https://www.cursor.com/).\n\nA terminal UI for monitoring and configuring Meshtastic mesh networks. Connects to a Meshtastic node via HTTP and displays real-time packet traffic, node information, chat messages, and device configuration.\n\n## Features\n\n- **Packets view** - Live packet stream with detailed inspection (decoded payload, JSON, hex dump)\n- **Nodes view** - Discovered nodes with signal quality, battery, position, hardware, favorites\n- **Chat view** - Send and receive channel messages with emoji support and delivery status\n- **DM view** - Direct messages with delivery status and resend support\n- **Config view** - View and edit device configuration with batch mode\n- **Log view** - Position, traceroute, and nodeinfo response history\n- **Node commands** - Traceroute, position/telemetry/nodeinfo request, direct ping, DM\n- **ACK notifications** - Visual feedback when nodes acknowledge your packets\n- **MeshView integration** - Update node info from a MeshView server, view live MeshView traffic\n- **Persistent storage** - SQLite database for nodes, messages, and packets\n- **Session support** - Multiple named sessions for different radios\n\n## Installation\n\n### Download Binary\n\nGrab the latest release for your platform from the [Releases page](../../releases).\n\n```sh\nchmod +x meshtastic-cli-darwin-arm64\n./meshtastic-cli-darwin-arm64 192.168.1.100\n```\n\nNote: macOS binaries are not codesigned. You may need to right-click and select \"Open\" or run `xattr -d com.apple.quarantine \u003cbinary\u003e` to bypass Gatekeeper.\n\n### Docker\n\n```sh\ndocker volume create meshtastic-cli\ndocker run --rm -it -e TERM -v meshtastic-cli:/root/.config ghcr.io/statico/meshtastic-cli 192.168.1.100\n\n# With MeshView integration (e.g., Baymesh)\ndocker run --rm -it -e TERM -v meshtastic-cli:/root/.config ghcr.io/statico/meshtastic-cli 192.168.1.100 --meshview https://meshview.bayme.sh\n```\n\n### Build from Source\n\nRequires [Bun](https://bun.sh).\n\n```sh\nbun install\nbun run dev 192.168.1.100\n```\n\n## Usage\n\n```\nmeshtastic-cli \u003caddress\u003e [options]\n\nArguments:\n  address            Device address (required) - IP address, hostname, or serial port\n\nOptions:\n  --session, -s      Session name for database (default: default)\n  --clear            Clear the database for the session and exit\n  --skip-config      Skip loading device configuration on startup\n  --skip-nodes       Skip downloading node database (faster connect)\n  --meshview, -m     MeshView URL for packet/node links\n  --fahrenheit, -F   Display temperatures in Fahrenheit\n  --port, -P         HTTP port number (default: 4403 if no port in address)\n  --tls, -T          Use HTTPS instead of HTTP\n  --insecure, -k     Accept self-signed SSL certificates\n  --pcap \u003cfile\u003e      Write packets to pcap file for analysis\n  --help, -h         Show help\n```\n\n### Examples\n\nConnect to a Meshtastic device (default port 4403):\n```sh\nmeshtastic-cli 192.168.0.123\n```\n\nConnect to meshtasticd HTTP API (port 8080 with HTTPS):\n```sh\nmeshtastic-cli 127.0.0.1 --port 8080 --tls --insecure\n```\n\n\u003e **Note:** meshtasticd servers need to have the webserver enabled. The webserver typically runs on port 8080 with HTTPS. Check your meshtasticd configuration to ensure the webserver is enabled.\n\nConnect to a device on a custom port:\n```sh\nmeshtastic-cli 192.168.1.100 --port 8080\n```\n\nConnect with HTTPS and accept self-signed certificate:\n```sh\nmeshtastic-cli example.com --tls --insecure\n```\n\nCapture packets to pcap file for analysis:\n```sh\nmeshtastic-cli 192.168.0.123 --pcap traffic.pcap\n```\n\nThe pcap file can be analyzed with tools like Wireshark or tcpdump. Packets are written in pcap format with LINKTYPE_USER0 (147) containing the raw Meshtastic protobuf frames.\n\n## Message Status Indicators\n\nIn Chat and DM views, messages show delivery status:\n\n| Indicator | Meaning |\n|-----------|---------|\n| `[...]` | Pending - waiting for acknowledgment |\n| `[✓]` | Acknowledged - recipient confirmed receipt |\n| `[✗]` | Failed - delivery failed or timed out |\n| `[M]` | MeshView confirmed - packet seen on MeshView server |\n\nThe `[M]` indicator also appears in the Packets view when a MeshView URL is configured. This confirms the packet was received by the MeshView aggregation server, which is useful for verifying mesh propagation.\n\n## Direct Ping (Shift+D)\n\nDirect ping sends a traceroute request with `hopLimit: 0`, which means only nodes in direct radio range will receive and respond to the packet. This is useful for testing immediate connectivity to neighbors.\n\n**How it works:**\n- The request is sent with 0 hops, so only direct recipients can receive it\n- No retransmissions occur (more lightweight than regular traceroute)\n- Only nodes that can directly hear your transmission will respond\n\n**Caveats:**\n- The response may still be relayed through intermediate nodes (firmware limitation)\n- You cannot definitively confirm bidirectional direct connectivity - you only know they heard YOU directly\n- Less reliable than regular traceroute (single transmission, no retries)\n- No response could mean: (a) not in direct range, or (b) packet was lost to interference\n\nFor full bidirectional direct-link testing with RSSI measurements, firmware changes would be needed. See [meshtastic/firmware#8905](https://github.com/meshtastic/firmware/discussions/8905) for ongoing discussion.\n\n## Terminal Compatibility\n\nFor proper emoji and Unicode character display, ensure your terminal uses Unicode-compliant width calculations:\n\n- **Ghostty** - Uses Unicode widths by default (`grapheme-width-method = unicode`)\n- **Kitty** - Uses Unicode widths by default\n- **iTerm2** - Enable in Preferences → Profiles → Text → \"Unicode version 9+ widths\"\n- **Terminal.app** - May have issues with some emoji\n\nThere are still issues with some emoji and fixing them is a work in progress.\n\n## Keybindings\n\n### Global\n\n| Key | Action |\n|-----|--------|\n| 1-7 | Switch to view (7 with MeshView) |\n| [ / ] | Previous / Next view |\n| Ctrl+L | Redraw screen |\n| q | Quit |\n| ? | Toggle help |\n\n### Packets View\n\n| Key | Action |\n|-----|--------|\n| j/k | Navigate packets |\n| g/G | First/last packet |\n| h/l | Switch inspector tab |\n| Tab | Toggle pane sizes |\n| +/- | Resize inspector |\n| m | Open position in Maps |\n| n/Enter | Jump to sender node |\n| u | Update node from MeshView |\n| o | Open packet in MeshView |\n\n### Nodes View\n\n| Key | Action |\n|-----|--------|\n| j/k | Navigate nodes |\n| / | Filter nodes |\n| t | Traceroute |\n| p | Request position |\n| e | Request telemetry |\n| d | Start DM |\n| D | Direct ping (hop=0) |\n| u | Update from MeshView |\n| U | Update all unknown from MeshView |\n| m | Open position in Maps |\n| l | Lookup hardware model |\n| f | Toggle favorite |\n| i | Request node info |\n| I | Toggle ignored |\n| x | Remove node from DB |\n| H | Sort by hops |\n| S | Sort by SNR |\n| B | Sort by battery |\n| A | Sort by age (last heard) |\n| F | Sort by favorites |\n\n### Chat View\n\n| Key | Action |\n|-----|--------|\n| j/k | Navigate messages |\n| / | Filter messages |\n| Tab | Switch channel |\n| n | Go to sender node |\n| d | DM the sender |\n| u | Update node from MeshView |\n| R | Resend failed message |\n| Enter | Focus input |\n| Alt+E | Emoji selector |\n| Escape | Unfocus / Exit |\n\n### DM View\n\n| Key | Action |\n|-----|--------|\n| j/k | Navigate conversations or messages |\n| l/→ | Enter message selection mode |\n| h/← | Back to conversation list |\n| n | Go to node |\n| u | Update node from MeshView |\n| R | Resend failed message |\n| Enter | Focus input |\n| Escape | Back / Unfocus |\n| # | Delete conversation |\n\n### Log View\n\n| Key | Action |\n|-----|--------|\n| j/k | Navigate responses |\n| g/G | First/last response |\n\n### Config View\n\n| Key | Action |\n|-----|--------|\n| h/j/k/l | Navigate menu |\n| Enter | Select section |\n| j/k | Navigate config fields |\n| g/G | First/last field |\n| c | Commit changes |\n| C | Discard changes |\n| Escape | Back to menu |\n| r | Reboot device |\n\n### Channel Config\n\n| Key | Action |\n|-----|--------|\n| j/k | Navigate channels |\n| e | Edit channel name |\n| r | Cycle channel role |\n| p | Edit encryption key (PSK) |\n| u | Toggle uplink |\n| D | Toggle downlink |\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstatico%2Fmeshtastic-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstatico%2Fmeshtastic-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstatico%2Fmeshtastic-cli/lists"}