Thanks for your interest in contributing! MeshInfo is open source under the GPL-3.0 license.
- Docker and Docker Compose
- Python 3.12.4+ (for backend development without Docker)
- Node.js 20.19+ and Yarn 4 (for frontend development)
- A running PostgreSQL 16 instance (Docker Compose provides one)
-
Clone the repository
git clone https://github.com/MeshAddicts/meshinfo.git cd meshinfo -
Copy configuration files
cp config.toml.sample config.toml cp frontend/.env.sample frontend/.env cp Caddyfile.sample Caddyfile
-
Start the full stack in development mode
docker compose -f docker-compose-dev.yml up --build
This starts PostgreSQL, the backend, and the frontend with hot-reload enabled.
If you prefer to run components outside Docker:
Backend:
pip install -r requirements.txt
# Set storage.postgres.host = "localhost" in config.toml
python main.pyFrontend:
cd frontend
yarn install
yarn devThe frontend dev server proxies API requests to http://localhost:9000 by default (configurable in frontend/.env).
meshinfo/
├── api/ # FastAPI REST endpoints
│ ├── api.py # Main API application
│ └── static_map.py # Static map image generation
├── bot/ # Discord bot integration
├── frontend/ # React / TypeScript SPA
│ ├── src/
│ │ ├── pages/ # Page components (Chat, Map, Nodes, Graph, etc.)
│ │ ├── components/ # Reusable UI components
│ │ ├── slices/ # Redux state management
│ │ ├── maps/ # Map layers and geocoding
│ │ ├── hooks/ # Custom React hooks
│ │ ├── utils/ # Helper utilities
│ │ └── types/ # TypeScript type definitions
│ ├── package.json
│ └── vite.config.ts
├── models/ # Data models
├── postgres/ # Database schema definitions
├── scripts/ # Build and migration scripts
├── config.py # Configuration loading and validation
├── main.py # Application entry point
├── mqtt.py # MQTT broker connection and message handling
├── memory_data_store.py # In-memory data store with PostgreSQL writes
├── Dockerfile # Backend container image
├── Dockerfile.spa # Frontend container image
├── Dockerfile.caddy # Caddy reverse proxy image
├── docker-compose.yml # Production stack
└── docker-compose-dev.yml # Development stack
- Create feature branches from
develop - Use descriptive branch names:
feature/multi-broker,fix/chat-scroll,docs/update-readme
- The backend is a Python application using FastAPI with uvicorn
- MQTT message processing is in mqtt.py
- API endpoints are in api/api.py
- Configuration is loaded and validated in config.py
- PostgreSQL is the only supported storage backend (see POSTGRES.md)
- Built with React 19, TypeScript, Vite, and Tailwind CSS
- State management uses Redux Toolkit
- Maps support both OpenLayers (OSM) and Mapbox GL
- Run
yarn devfor hot-reload development - Run
yarn buildto create a production build - Run
yarn testto run the test suite
- Python: Follow existing conventions in the codebase. Use type hints where practical.
- TypeScript/React: ESLint and Prettier are configured in the frontend. Run
yarn lintto check.
- Make sure your changes work locally with
docker compose -f docker-compose-dev.yml up --build - Keep PRs focused -- one feature or fix per PR
- Write a clear description of what the PR does and why
- Reference any related GitHub issues
Open an issue on GitHub with:
- What you expected to happen
- What actually happened
- Steps to reproduce
- Your deployment method (Docker Compose, bare metal, etc.)
Join us on #meshinfo on the SacValleyMesh Discord for questions and discussion.