Files
web/apps/web/CONTRIBUTING.md
Ben Meadors bbe9a0d5cd feat(protobufs): sync to firmware-current and consume workspace package (#1097)
* feat(protobufs): sync to firmware-current and consume workspace package

Sync the vendored .proto sources to firmware-current (v2.7.25+48), regenerate the v2 TS bindings, and consume the workspace @meshtastic/protobufs (workspace:*) in place of the stale JSR 2.7.20 — finishing the monorepo migration (core was already workspace:*).

Includes the one required breaking-change fix: admin nodedb_reset changed int32 to bool, so resetNodes() now sends value: true.

* build(protobufs): vendor generated bindings for workspace consumers

The package is consumed via workspace:* — its exports point at the TS source, which imports ./dist/meshtastic/*_pb.ts — so the generated output must exist at build time. CI builds web/core with no codegen step and the runners have no buf CLI, so the bindings are vendored here (kept gitignored; lint/format skip them). Regenerate with: pnpm --filter @meshtastic/protobufs gen

* fix(protobufs): clean script removes the actual generated output dir

buf writes bindings to packages/ts/dist, but clean was removing a non-existent root dist — so it never cleaned stale output. Addresses Copilot review feedback.

* refactor: move web app packages/web -> apps/web

Aligns the web app with the apps/web layout (matching the Vercel web-test Root Directory and the SDK-migration direction). Pure directory move plus root config: pnpm-workspace (adds apps/*), vitest projects, root tsconfig reference, and the pr/release-web/nightly workflows. vercel.json moved with the app. Build + 36 validation tests green.

* feat: config fields, module pages, key verification, telemetry capture

Incorporates the firmware-current feature work onto the protobuf foundation: new config fields (Display message bubbles; LoRa fem_lna_mode + serial_hal_only; Telemetry air_quality_screen_enabled); 4 new ModuleConfig pages (TrafficManagement, StatusMessage, TAK, RemoteHardware); the manual Key Verification flow (sendKeyVerification + ClientNotificationDialog stages + Verify Key button); live telemetry capture (nodeDB addDeviceMetrics) and admin hardening (toggleMutedNode, graceful PortNum default); plus the sdk-preview ConfigEditor demo and store/config tests. Build + lint + format + 131 tests green.

* chore: drop #1062 (unsaved-change-detection) to match upstream revert

#1062 was merged to main by accident (per @danditomaso) and is being reverted. Reverse-applied its diff here via 3-way so #1097 stays consistent with where main is headed, while keeping the feature changes layered on the same files (deviceStore/changeRegistry). Build + 131 tests + lint + format green.

* fix(nodes): clean up SNR display in node table and map popup

SNR is a ratio measured in dB, not dBm (which is absolute power); the
node table and map popup both mislabeled it and crammed three values
together: '0dBm/50%/50raw'. The trailing '%/raw' pair was the same
heuristic ((snr+10)*5) shown twice — once clamped, once not.

Render SNR in dB rounded to one decimal, color-coded by a 0-100%
signal-quality heuristic (green/yellow/red), with the quality percentage
as a muted secondary. Drop the redundant raw value. Adds unit.db; this
matches the existing SNRTooltip, which already renders dB.
2026-06-15 13:23:28 -05:00

4.4 KiB
Raw Blame History

Contributing to Meshtastic Web

Thank you for your interest in contributing to Meshtastic Web! 🎉
We welcome all contributions—whether its 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.
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

Prerequisites

Installation

Clone the repo and install dependencies:

git clone https://github.com/meshtastic/web.git meshtastic-web
cd meshtastic-web
pnpm install

Development

Start the development server:

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 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 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:


🧪 Testing

Tests are written with Vitest.

Run all tests locally with:

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 before starting work.
  • If unsure, open a draft PR for early feedback.

🙌 Community

Contributors are the heart of Meshtastic ❤️.
Join the conversation:


📜 License

By contributing, you agree that your contributions will be licensed under the GPL-3.0-only License.