mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-03-27 10:11:48 -04:00
113 lines
7.1 KiB
Markdown
113 lines
7.1 KiB
Markdown
# Roadmap
|
|
|
|
> Last updated: 2026-03-12
|
|
|
|
Forward-looking priorities for the Meshtastic KMP multi-target effort. For current state, see [`kmp-status.md`](./kmp-status.md). For the full gap analysis, see [`decisions/architecture-review-2026-03.md`](./decisions/architecture-review-2026-03.md).
|
|
|
|
## Architecture Health (Immediate)
|
|
|
|
These items address structural gaps identified in the March 2026 architecture review. They are prerequisites for safe multi-target expansion.
|
|
|
|
| Item | Impact | Effort | Status |
|
|
|---|---|---|---|
|
|
| Purge `java.util.Locale` from `commonMain` (3 files) | High | Low | ✅ |
|
|
| Replace `ConcurrentHashMap` in `commonMain` (3 files) | High | Low | ✅ |
|
|
| Create `core:testing` shared test fixtures | Medium | Low | ✅ |
|
|
| Add feature module `commonTest` (settings, node, messaging) | Medium | Medium | ✅ |
|
|
| Desktop Koin `checkModules()` integration test | Medium | Low | ✅ |
|
|
| Auto-wire Desktop ViewModels via K2 Compiler (eliminate manual wiring) | Medium | Low | ✅ |
|
|
| **Migrate to JetBrains Compose Multiplatform dependencies** | High | Low | ✅ |
|
|
|
|
## Active Work
|
|
|
|
### Desktop Feature Completion (Phase 4)
|
|
|
|
**Objective:** Complete desktop wiring for all features and ensure full integration.
|
|
|
|
**Current State (March 2026):**
|
|
- ✅ **Settings:** ~35 screens with real configuration, including theme/about parity and desktop language picker support
|
|
- ✅ **Nodes:** Adaptive list-detail with node management
|
|
- ✅ **Messaging:** Adaptive contacts with message view + send
|
|
- ✅ **Connections:** Dynamic discovery of platform-supported transports (TCP)
|
|
- ❌ **Map:** Placeholder only, needs MapLibre or alternative
|
|
- ⚠️ **Firmware:** Placeholder wired into nav graph; native DFU not applicable to desktop
|
|
- ⚠️ **Intro:** Onboarding flow (may not apply to desktop)
|
|
|
|
**Implementation Steps:**
|
|
|
|
1. **Tier 1: Core Wiring (Essential)**
|
|
- Complete Map integration (MapLibre or equivalent)
|
|
- Verify all features accessible via navigation
|
|
- Test navigation flows end-to-end
|
|
2. **Tier 2: Polish (High Priority)**
|
|
- Additional desktop-specific settings polish
|
|
- Keyboard shortcuts
|
|
- Window management
|
|
- State persistence
|
|
3. **Tier 3: Advanced (Nice-to-have)**
|
|
- Performance optimization
|
|
- Advanced map features
|
|
- Theme customization
|
|
- Multi-window support
|
|
|
|
| Transport | Platform | Status |
|
|
|---|---|---|
|
|
| TCP | Desktop (JVM) | ✅ Done — shared `StreamFrameCodec` + `TcpTransport` in `core:network` |
|
|
| Serial/USB | Desktop (JVM) | ❌ Next — jSerialComm |
|
|
| MQTT | All (KMP) | ❌ Planned — Ktor/MQTT (currently Android-only via Eclipse Paho) |
|
|
| BLE | Desktop | ❌ Future — Kable (JVM) |
|
|
| BLE | iOS | ❌ Future — Kable/CoreBluetooth |
|
|
|
|
### Desktop Feature Gaps
|
|
|
|
| Feature | Status |
|
|
|---|---|
|
|
| Settings | ✅ ~35 real screens (7 desktop-specific) + desktop locale picker with in-place recomposition |
|
|
| Node list | ✅ Adaptive list-detail with real `NodeDetailContent` |
|
|
| Messaging | ✅ Adaptive contacts with real message view + send |
|
|
| Connections | ✅ Unified shared UI with dynamic transport detection |
|
|
| Metrics logs | ✅ TracerouteLog, NeighborInfoLog, HostMetricsLog |
|
|
| Map | ❌ Needs MapLibre or equivalent |
|
|
| Charts | ✅ Vico KMP charts wired in commonMain (Device, Environment, Signal, Power, Pax) |
|
|
| Debug Panel | ✅ Real screen (mesh log viewer via shared `DebugViewModel`) |
|
|
| About | ✅ Shared `commonMain` screen (AboutLibraries KMP `produceLibraries` + per-platform JSON) |
|
|
| Packaging | ✅ Done — Native distribution pipeline in CI (DMG, MSI, DEB) |
|
|
|
|
## Near-Term Priorities (30 days)
|
|
|
|
1. **`core:testing` module** — ✅ Done (established shared fakes for cross-module `commonTest`)
|
|
2. **Feature `commonTest` bootstrap** — ✅ Done (131 shared tests across all 7 features covering integration and error handling)
|
|
3. **Radio transport abstraction** — ✅ Done: Defined `RadioTransport` interface in `core:repository/commonMain` and replaced `IRadioInterface`; Next: continue extracting remaining platform transports from `app/repository/radio/` into core modules
|
|
4. **`feature:connections` module** — ✅ Done: Extracted connections UI into KMP feature module with dynamic transport availability detection
|
|
5. **Navigation 3 parity baseline** — ✅ Done: shared `TopLevelDestination` in `core:navigation`; both shells use same enum; parity tests in `core:navigation/commonTest` and `desktop/test`
|
|
6. **iOS CI gate** — add `iosArm64()`/`iosSimulatorArm64()` to convention plugins and CI (compile-only, no implementations)
|
|
7. **Build-logic consolidation** — **Planned:** Consolidate expansive build-logic convention plugins. There is currently some duplication in Compose dependencies that should be factored into common conventions (`meshtastic.kmp.library.compose` vs manually specifying JetBrains CMP deps in feature modules).
|
|
|
|
## Medium-Term Priorities (60 days)
|
|
|
|
1. **App module thinning** — 63 files remaining (down from 90). Extracted ChannelViewModel, NodeMapViewModel, NodeContextMenu, EmptyDetailPlaceholder to shared modules. Remaining: extract service/worker/radio files from `app` to `core:service/androidMain` and `core:network/androidMain`
|
|
2. **Serial/USB transport** — direct radio connection on Desktop via jSerialComm
|
|
3. **MQTT transport** — cloud relay operation (KMP, benefits all targets)
|
|
4. **Desktop ViewModel auto-wiring** — ✅ Done: ensured Koin K2 Compiler Plugin generates ViewModel modules for JVM target; eliminated manual wiring in `DesktopKoinModule`
|
|
5. **KMP charting** — ✅ Done: Vico charts migrated to `feature:node/commonMain` using KMP artifacts; desktop wires them directly
|
|
6. **Navigation contract extraction** — ✅ Done: shared `TopLevelDestination` enum in `core:navigation`; icon mapping in `core:ui`; parity tests in place. Both shells derive from the same source of truth.
|
|
7. **Dependency stabilization** — track stable releases for CMP, Koin, Lifecycle, Nav3
|
|
|
|
## Longer-Term (90+ days)
|
|
|
|
1. **iOS proof target** — declare `iosArm64()`/`iosSimulatorArm64()` in KMP modules; BLE via Kable/CoreBluetooth
|
|
2. **Map on Desktop** — evaluate MapLibre for cross-platform maps
|
|
3. **`core:api` contract split** — separate transport-neutral service contracts from Android AIDL packaging
|
|
4. **Native packaging** — ✅ Done: DMG, MSI, DEB distributions for Desktop via release pipeline
|
|
5. **Module maturity dashboard** — living inventory of per-module KMP readiness
|
|
|
|
## Design Principles
|
|
|
|
1. **Solve in `commonMain` first.** If it doesn't need platform APIs, it belongs in `commonMain`.
|
|
2. **Interfaces in `commonMain`, implementations per-target.** The repository pattern is established — extend it.
|
|
3. **Stubs are a valid first implementation.** Every target starts with no-op stubs, then graduates to real implementations.
|
|
4. **Feature modules stay target-agnostic in `commonMain`.** Platform UI goes in platform source sets.
|
|
5. **Transport is a pluggable adapter.** BLE, serial, TCP, MQTT all implement `RadioInterfaceService`.
|
|
6. **CI validates every target.** If a module declares `jvm()`, CI compiles it. No exceptions.
|
|
7. **Test in `commonTest` first.** ViewModel and business logic tests belong in `commonTest` so every target runs them.
|