* 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.
* feat(ui): add SNR, RSSI, hops, MQTT info for messages
* review fixes
* zeros for new fields
* Move label under the message
---------
Co-authored-by: Pmmlabs <meshtastic@pmmlabs.ru>
* feat(conn): add connection screen and logic
* fixes from code review
* force https
* code review fixes
* add http for self testing
* enable deviceStore persistance
* added translations
* disabled feature flag
* i18n updates
* chore: add new folders to biome config (#910)
* chore(i18n): New Crowdin Translations by GitHub Action (#908)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
* fix: use correct deprecated GPS coordinate format enum (#917)
The Config_DisplayConfig_GpsCoordinateFormat export doesn't exist in the protobufs package. The correct export is Config_DisplayConfig_DeprecatedGpsCoordinateFormat, which matches what's used in the validation schema.
Added TODO comment explaining that this field is deprecated since protobufs 2.7.4 and should be migrated to DeviceUIConfig.gps_format when DeviceUI settings are implemented.
* style: fix line wrapping for GPS coordinate format enum (#918)
- Split long enum reference across multiple lines to improve code readability
- Maintains consistent code formatting standards without changing functionality
* fix(core): ensure core package works in browser (#923)
* fix(core): ensure core package works in browser
* style(core): revert new line removal
* fix: add @serialport/bindings-cpp to onlyBuiltDependencies (#914)
* feat(ui): Add UI library (#900)
* feat: scaffold UI library
* Update packages/ui/src/components/theme-provider.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* add lock file
* lint/formatting fixes
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* formatting/linting fixes
* fixed some paring logic
* fixed connection issue with serial
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: Kamil Dzieniszewski <kamil.dzieniszewski@gmail.com>
Co-authored-by: Azarattum <43073346+Azarattum@users.noreply.github.com>
Co-authored-by: Ben Allfree <ben@benallfree.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Clear heartbeat and queue when disconnected
* Give clearer error in case configure fails due to a lost connection. Used to throw 'Packet does not exist'
* If the queue processing error is due to a lost connection, throw it instead of looping endlessly
* In case we send a disconnection event we don't need to also throw
* Catch heartbeat errors
* Also handle invalid state errors
* Handle socket timeouts
* Log heartbeat failures
* Make linter happy
* Transform stream being a singleton prevented reconnection attempts
* Adapt tests to not using singleton
* Aborting already ends the connection
* Transport status events
Add symbol docs
Emit transport status events
Transport test suite
* Review fixes
* Remove core dependency
* HTTP transport use AbortSignal, error handling in TransportNode
* Improve stream handling
* Update packages/transport-web-serial/src/transport.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Fix linting
---------
Co-authored-by: philon- <philon-@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* feat: publish js libs to npm
* changed license type
* updated readme
* added id
* added exclusion for web and deno packages
* update comment
* updating env var