
Meshyface es un panel de control de Meshtastic centrado en el chat que se ejecuta como un único servicio Python y sirve una interfaz web de una sola página a través de HTTP.
La interfaz actual ofrece:
El espacio de trabajo de consola es una superficie de control estilo terminal para el tráfico de paquetes, la búsqueda en el historial y los comandos de utilidad de la malla.
Tab o Enter
para aceptar, ArrowRight para aceptar el sufijo fantasma, y ArrowUp /
ArrowDown para moverte por la ventana emergente.! filtra por ID de nodo.live transmite el tráfico de paquetes hasta Ctrl+C o q. Usa
live grep <text>, live rg <text>, live filter=<text> o simplemente
live <text> para transmitir solo los grupos de paquetes en vivo que coincidan. Los filtros de
capa y verbosidad siguen aplicándose, por ejemplo
live rg TEXT_MESSAGE_APP -vv --layer=2.grep <text> y rg <text> buscan en el historial retenido de paquetes/chat con
ventanas de contexto, límites, filtros de origen de paquetes/chat y filtros de
alcance de resumen/paquetes./search <text> filtra la salida visible de la consola desde el indicador sin
iniciar una búsqueda en el historial retenido.
Vista de mapa con ubicaciones de nodos, enlaces, rutas comunes, clústeres y mapa de calor de señal.

Vista de historial para recuentos de nodos, estado en línea, nuevos nodos e informes de posición.

Vista de topología que muestra los enlaces observados desde el nodo raíz seleccionado.

Vista de trazado para un origen, un destino, enlaces cercanos y detalles de paquetes por salto.

Gráfico de telemetría que compara el historial de sensores entre varios nodos.

Tarjetas superiores para la actividad de radio, los recuentos de nodos, los paquetes, los enlaces, la batería y el uso de canales.
Los temas pueden reformar todo el panel con colores personalizados, degradados, transparencia, desenfoque, fuentes, partículas o un fondo de mapa en vivo. Estas paletas de ejemplo son temas personalizados; selecciona cualquier vista previa para abrir su captura de pantalla en resolución completa.
Los nodos de Meshyface pueden compartir paquetes de apariencia compactos que contienen una
receta de tema de nodo y un fantasma o marca de agua opcional. Configura y previsualiza tu nodo en
Settings > Appearance > Node Appearance, habilita Share node appearance,
y luego usa Broadcast appearance para publicarlo.
flowchart LR
Browser["Browser<br/>single-page UI"]
CDN["Vendored browser assets<br/>Leaflet + leaflet.heat + particles.js"]
Tiles["Basemap provider<br/>OpenStreetMap tile service"]
Server["ThreadingHTTPServer<br/>HTML shell + JSON API"]
Assets["Python template assembly<br/>meshdash/html* + meshdash/assets/*"]
State["State loaders<br/>live snapshot + history readers"]
Services["Write services<br/>chat, settings, tools, games, optional files"]
Tracker["DashboardTracker<br/>live receive path + in-memory buffers"]
History["HistoryStore / SQLite (WAL)<br/>chat, packets, rollups, settings"]
Radio["Meshtastic interface<br/>serial or TCP"]
Mesh["Meshtastic radio / mesh"]
Atlas["Bundled offline atlas<br/>reference basemap fallback"]
Browser -->|GET /| Server
Browser -->|GET /api/*| Server
Browser -->|POST write APIs| Server
Browser --> CDN
Browser --> Tiles
Browser -->|fallback basemap data| Atlas
Server --> Assets
Server --> State
Server --> Services
State <--> Tracker
State <--> History
Services <--> History
Services <--> Radio
Radio <--> Mesh
Radio -->|receive callbacks| Tracker
Comienza con prerrequisitos y dependencias, y luego elige una ruta de instalación:
/opt/meshyface para un host persistente actualizable desde GitHub./data montado para el estado persistente.--history-db es el nombre final del archivo SQLite en disco. El panel ya no
añade un sufijo de radio conectada, por lo que cualquier radio conectada al panel
contribuye al mismo historial persistido de paquetes, chat, nodos y rollups.
--no-history deshabilita el almacenamiento persistente y conserva solo los búferes
en memoria en vivo.mesh_dashboard_theme_settings.json de forma predeterminada, o en el archivo proporcionado mediante
--theme-settings-file.Los comandos operativos que inspeccionan o reparan los datos locales del panel están documentados en docs/maintenance.md.
La subvista Links es una vista de topología, no una reproducción de ruta de paquetes.
History se basa en el historial de enlaces almacenado en SQLite.Live se basa únicamente en las observaciones de enlaces de la sesión actual.La raíz actual es el nodo alrededor del cual se centra el grafo. Seleccionar un nodo distinto cambia la raíz y vuelve a calcular los anillos de distancia numerados desde ese nodo.
--mesh-host <ip-or-dns>: host de radio TCP--mesh-tcp-port <port>: puerto de radio TCP, predeterminado 4403--mesh-port <path>: ruta del dispositivo serie--default-gateway-host <host>: host TCP de respaldo si no se proporciona --mesh-host y
el serie sigue en la ruta predeterminada--default-gateway-port <port>: puerto TCP de respaldo para
--default-gateway-host--no-default-gateway: fuerza el serie a menos que --mesh-host se establezca explícitamenteVariables de entorno relacionadas:
MESH_GATEWAY_HOSTMESH_GATEWAY_PORTMESH_DASH_MESH_PORT para la ruta serie predeterminada--http-host <host>: host de enlace, predeterminado 0.0.0.0--http-port <port>: puerto de enlace, predeterminado 8877--refresh-ms <ms>: intervalo de sondeo del navegador, predeterminado 3000--packet-limit <n>: tamaño del búfer de paquetes en vivo recientes, predeterminado 250--reset-ticker-scale-on-restart / --no-reset-ticker-scale-on-restart--show-secrets: revela claves/contraseñas/PSK privadas en los paneles JSON sin procesar--debug-mode / --no-debug-mode: expone superficies del panel solo de depuración, como
los diagnósticos de red avanzadosVariables de entorno relacionadas:
MESH_DASH_PRIVATE_MODEMESH_DASH_API_TOKENMESH_DASH_GAMES_ENABLEMESH_DASH_VERSIONMESH_DASH_GIT_COMMITMESH_DASH_PR_NUMBERLa identidad en tiempo de ejecución proviene del commit de git de 12 caracteres, seguido de un
número de pull request opcional, por ejemplo abc123456789 · PR #43. El panel de Software
muestra esta única revisión en lugar de una versión de paquete. Los asuntos de commits de
fusión/squash de GitHub se detectan automáticamente; las implementaciones de vista previa sin
fusionar pueden establecer MESH_DASH_PR_NUMBER explícitamente.
/api/revision es el endpoint canónico de identidad. Sus campos revision y
build_ref informan la revisión en tiempo de ejecución, mientras que commit y pr_number
permanecen disponibles como campos estructurados. /api/version permanece como endpoint
heredado, y su campo version conserva los metadatos de versión/paquete.
MESH_DASH_VERSION está igualmente reservado para el empaquetado explícito de versiones y no
se muestra en el panel.
--file-transfer-enable: habilita la aplicación Archivos; requiere
--accept-file-transfer-traffic-disclaimer--file-transfer-auto-accept: acepta transferencias entrantes directas sin
confirmación del navegador--file-transfer-max-bytes <bytes>: límite por archivo, predeterminado 65536 y
limitado a 1024-524288Las transferencias usan el protocolo beta MF_FILE_V2 en el puerto privado 258 y no son
compatibles con el transporte anterior de mensajes de texto. Cuando un destino tiene un
recuento de saltos detectado utilizable, Meshyface usa ese recuento más uno, limitado por el
límite de saltos de radio configurado. Los datos de saltos con más de una hora de antigüedad recurren al
límite configurado. La aplicación Archivos muestra el límite seleccionado y su origen.
Variables de entorno relacionadas:
MESH_DASH_FILE_TRANSFER_ENABLEMESH_DASH_FILE_TRANSFER_AUTO_ACCEPTMESH_DASH_FILE_TRANSFER_MAX_BYTESMESH_DASH_ACCEPT_FILE_TRANSFER_TRAFFIC_DISCLAIMER--history-db <path>: ruta base de la base de datos SQLite--history-max-rows <n>: predeterminado 200000--history-retention-days <days>: predeterminado 30, usa 0 para deshabilitar la poda
por antigüedad--history-event-max-rows <n>: tope de solo agregación de eventos de paquetes, predeterminado
200000--history-event-retention-days <days>: predeterminado 30--history-rollup-retention-days <days>: predeterminado 365--no-history: modo solo memoriaVariables de entorno relacionadas:
MESH_DASH_HISTORY_DB--theme-presets <json>: archivo opcional de preestablecidos de temas personalizados--theme-preset <name>: nombre del preestablecido seleccionado--theme-settings-file <json>: archivo persistido de selección de tema en tiempo de ejecuciónPreestablecidos integrados:
default (azul Meshyface seguro, partículas deshabilitadas)custom (tema de exhibición con partículas y efectos de fondo habilitados)Las instalaciones nuevas usan default como predeterminado, a menos que un archivo persistido de ajustes de tema o
MESH_DASH_THEME_PRESET seleccione otro preestablecido.
Variables de entorno relacionadas:
MESH_DASH_THEME_PRESETSMESH_DASH_THEME_PRESETMESH_DASH_THEME_SETTINGS_FILE--private-mode y/o un token de API para un control más estricto de la ruta de escritura.MESH_DASH_API_TOKEN sobre --api-token en hosts compartidos o
multiusuario. Un token de línea de comandos puede ser visible en los listados de procesos y conservarse
en el historial del shell.Join Meshyface integrado usa una PSK Meshyface compartida
intencionadamente pública para la interoperabilidad entre usuarios de este software. No
uses ese canal público para tráfico privado.--show-secrets expone valores sensibles en los paneles JSON sin procesar; no lo habilites
sin cuidado en pantallas compartidas.--no-allow-tokenless-raw-packet-download.Ejecuta el conjunto de pruebas normal:
python -m pytest
Ejecuta Ruff de la misma manera que lo hace CI:
scripts/run_ruff_local.sh
Ejecuta el informe de cobertura informativo de la aplicación:
python -m pytest \
--cov=meshdash \
--cov=mesh_dashboard \
--cov=mesh_connection \
--cov-report=term
Ejecuta el umbral de cobertura local con el mínimo más estricto del 85%:
scripts/run_coverage_local.sh
Ejecuta el punto de referencia local de capacidad de respuesta de la GUI antes de los PR:
scripts/run_gui_responsiveness_local.sh
La cobertura excluye intencionadamente el paquete del motor Zork portado del cálculo, pero las pruebas de Zork independiente y de enrutamiento siguen ejecutándose. GitHub Actions publica el mismo informe de cobertura como comentario y artefacto informativos del PR. CI falla por debajo del 80%. El umbral local se mantiene 5 puntos porcentuales por encima de CI.
![]() |
--private-mode / --no-private-mode: elimina los fragmentos de chat públicos y bloquea
los endpoints públicos seleccionados--api-token <token>: exige autenticación en los endpoints de escritura mediante
Authorization: Bearer <token> o X-API-Token; prefiere
MESH_DASH_API_TOKEN en hosts compartidos porque los tokens de línea de comandos pueden aparecer
en los listados de procesos y en el historial del shell--allow-tokenless-raw-packet-download /
--no-allow-tokenless-raw-packet-download: permite descargas de la base de datos de paquetes
sin procesar sin token para clientes de loopback/LAN privada; habilitado de forma predeterminada--games-enable / --no-games-enable: habilita endpoints de consola de Zork
independientes y jugables--seed-from-node-db: arranca el rastreador en vivo desde la NodeDB de la radio conectada--backfill-environment-rollups: reconstruye los rollups de entorno una vez y sale;
consulta docs/maintenance.md--backfill-environment-rollups-reset: borra los rollups existentes antes de la reconstrucción--node-history-hours <hours>: ventana predeterminada del nodo seleccionado, predeterminado 72--node-history-max-points <n>: puntos máximos devueltos por
/api/history/node, predeterminado 1440