# Contributing to Meshtastic Web Thank you for your interest in contributing to **Meshtastic Web**! πŸŽ‰ We welcome all contributionsβ€”whether it’s fixing a typo, improving documentation, adding new features, or reporting bugs. This document outlines how to get started and the conventions we follow. --- ## πŸ“‹ Code of Conduct We follow the [Meshtastic Code of Conduct](https://meshtastic.org/docs/legal/conduct/). Please make sure you are familiar with it before contributing. --- ## πŸš€ Getting Started Before making changes, please take some time to explore the repository and its monorepo structure. Understanding how the packages are organized will make it much easier to contribute effectively. [Meshtastic Web](https://github.com/meshtastic/web/) ### Prerequisites - [Node.js](https://nodejs.org/) (v22 or later) - [pnpm](https://pnpm.io/) (v10.14.x or later) - Git ### Installation Clone the repo and install dependencies: ```bash git clone https://github.com/meshtastic/web.git meshtastic-web cd meshtastic-web pnpm install ``` ### Development Start the development server: ```bash pnpm --filter @meshtastic/web dev ``` Once running, the site will be available at: πŸ‘‰ **http://localhost:3000** --- ## πŸ—‚ Repository Structure Meshtastic Web uses a **monorepo** setup managed with **pnpm workspaces**: ``` /packages β”œβ”€ web # React frontend β”œβ”€ core # Shared types & logic β”œβ”€ transport-* # Transport layer packages └─ ...other packages ``` --- ## βœ… Contribution Workflow 1. **Fork the repo** and create your branch from `main`. ### Branch Naming - Use [Conventional Commit](https://www.conventionalcommits.org/) style for your branch names: ``` feat/add-project-filter fix/storage-service chore/update-ci-cache ``` 2. **Make your changes locally** and verify that the app runs as expected at `http://localhost:3000`. 3. **Commit your changes** with a descriptive commit message that follows the [Conventional Commits](https://www.conventionalcommits.org/) style. 4. **Open a Pull Request (PR)** from your fork's branch to the main repository's `main` branch on GitHub: - Clearly describe the problem and solution. - Reference related issues (e.g., `Fixes #123`). - Keep PRs focused on a single feature or fix. - Complete all fields in the PR template. - Tag a **Meshtastic Web developer** in the PR for review. 5. **CI/CD**: - Our GitHub Actions workflows handle builds, linting, and packaging automatically. - All checks must pass before merge. --- ## 🌍 Internationalization (i18n) Meshtastic Web supports multiple languages. If your changes introduce **new user-facing strings**: - Add them to the **`en.json`** file. - Do **not** hardcode English strings directly in components. - This ensures they can be translated into other languages. πŸ”— See these guides for more details: - [i18n Developer Guide](https://github.com/meshtastic/web/blob/main/packages/web/CONTRIBUTING_I18N_DEVELOPER_GUIDE.md) - [Translation Contribution Guide](https://github.com/meshtastic/web/blob/main/packages/web/CONTRIBUTING_TRANSLATIONS.md) --- ## πŸ§ͺ Testing Tests are written with [Vitest](https://vitest.dev/). Run all tests locally with: ```bash pnpm --filter @meshtastic/web test ``` Please include tests for new features and bug fixes whenever possible. --- ## πŸ“ Commit Messages We use **Conventional Commits**: - `feat:` – a new feature - `fix:` – a bug fix - `docs:` – documentation changes - `chore:` – maintenance, dependencies, build scripts - `refactor:` – code restructuring without feature changes - `test:` – adding or updating tests - `ci:` – CI/CD changes Example: ``` feat: add toast notification system fix: correct caching issue in storage service ``` --- ## πŸ’‘ Tips for Contributors - Keep PRs **small, focused, and atomic**. - Discuss larger changes with the team on [Discord](https://discord.gg/meshtastic) before starting work. - If unsure, open a draft PR for early feedback. --- ## πŸ™Œ Community Contributors are the heart of Meshtastic ❀️. Join the conversation: - [Discord](https://discord.gg/meshtastic) - [GitHub Discussions](https://github.com/meshtastic/web/discussions) --- ## πŸ“œ License By contributing, you agree that your contributions will be licensed under the [GPL-3.0-only License](../../LICENSE).