A desktop client for analyzing and managing large-scale, low-bandwidth mesh networks
This application is a desktop client for the Meshtastic Project, designed to allow users to reliably manage large, decentralized mesh networks. Currently the Meshtastic client ecosystem has strong support for managing single nodes, but minimal support for network-level management and analysis. The goal of this project is to give users confidence in their Meshtastic networks as a reliable communications infrastructure through novel algorithmic analysis and connection-level insights.
This application is built using the Tauri Framework, a modern, secure successor to the Electron Framework. This allows us to natively support Linux, macOS, and Windows within the same codebase without the performance or memory overhead of a Chromium browser. Our core application infrastructure is written in Rust due to its performance and safety, and our UI and client functionality is written in React TypeScript using Vite. This project is in early stages of development, and as such is not yet suitable for production use.
At the time of writing, this project is currently maintained by a single developer. As such, the project is looking for developers willing to contribute towards or take lead on the following major initiatives:
This project is still in early stages of development, but here's a rough roadmap of functionality we're working on. We're placing a high priority on getting our core infrastructure right, since this is the core of any robust and effective UI layer.
This project is built on the Meshtastic hardware ecosystem, and as such this client requires that you have access to a Meshtastic radio. This may change in the future, but for the time being a physical radio is required to use this client.
I've written up some personal hardware recommendations here.
This project is built in Rust and React TypeScript, and managed using the PNPM package manager. As such, this project requires the following programs to be installed on your development machine:
To run this project locally, follow the steps below:
git clone https://github.com/meshtastic/network-management-client.git
git submodule update --init
pnpm i
pnpm run rust:dev
command. The application should compile successfully, and you should see the application open successfully. If this process fails for you, please let us know!While this project can be developed within any text editor, we recommend the Visual Studio Code editor. If using VSCode, we strongly recommend that you install the following Visual Studio Code extensions. These extensions both enforce code style and enable language and framework support for our tech stack.
Some optional extensions that aren't required but we find very helpful:
To standardize our development flow, we utilize PNPM commands, defined in package.json
. These commands can be run with the pnpm run NAME ...ARGS
syntax. Our commands are broken out into two primary categories, rust:*
commands and ui:*
commands. The rust:*
commands run the entire desktop application, where the ui:*
commands only run the UI layer.
Note: We strongly recommend against using the
ui:dev
andui:build
commands manually. These commands are invoked internally by therust:dev
andrust:build
commands, respectively. You will not be able to connect to a serial devce when running theui:dev
command, as this logic is not handled in the UI layer.
We are currently working to add support for the Storybook framework, which will allow contributors to develop UI components without running the entire desktop application.
pnpm run rust:dev
- Starts the desktop application in development mode, allowing for hot reloading of UI and Rust code
pnpm run rust:build
- Builds the desktop application in production mode for your system architecture. Currently we only use this command for testing our application's CLI argument parser.
pnpm run rust:test
- Runs backend tests on the Rust codebase directory (/src-tauri
). This command also generates TypeScript client bindings in the /src-tauri/bindings
directory. Add -- --show-output
to show Rust println!
macro calls within test suites.
pnpm run ui:dev
- Starts the UI development server, allowing for UI development in a browser environment. Note that any code that interfaces with the Rust backend will not function within this browser environment, meaning you will be unable to connect to serial devices in this context
pnpm run ui:build
: - Runs a production build on the UI code into the dist
directory
pnpm run ui:lint
- Uses ESLint to check for code style errors. Note that our CI pipeline requires that this command succeeds before any changes can be merged
pnpm run ui:format
- Formats the UI codebase using Prettier and ESLint. We strongly recommend you run this before creating a PR!
pnpm run ui:test
- Runs UI test suite using Jest. Currently the project does not have a UI testing suite, but we're very open to contributions!
(deprecated)pnpm run ui:preview
- Runs the built UI from the dist
directory. This command must be run after ui:build
Note: On Linux, your user may not have permission to access a given serial port. If this happens, you will likely need to add your user to the group that controls the serial port you want to access. You can find the group that controls a serial port via the
ls -ld PATH_TO_PORT_HERE
command. You can add your user to this group via theusermod -a -G GROUP_NAME_HERE $USER
command.
As we are still very early in development, we don't yet have a standardized framework for accepting contributions. This being said, we are very open to suggestions and/or code changes! If you're interested in contributing to this repository, we would ask that you first check our issue board to ensure your work isn't duplicating the work of others. Then, please make an issue on our board so we know what you're interested in working on. If you have any questions about the project, we would love to hear from you!