Skip to main content

Development Roadmap

Status: Living document. Detailed per-issue and per-PR state lives in GitHub Issues, Pull Requests, the CHANGELOG, and ADRs. This document carries themes, principles, and parked work only.


Principles

  • Validate first: Run spikes before implementing complex features
  • Start simple: Build MVP, add complexity only if needed
  • User-driven: Implement Phase 2 features only when users request them
  • Linux-first: Embrace Unix philosophy --- composable tools over monolithic features
  • Measured releases: Accumulate meaningful changes rather than rapid incremental releases (#2235)
  • Automate triage, not decisions: Bots surface information; maintainers decide
  • Incremental configuration: New features use nested config patterns from day one; existing flat options migrate opportunistically (configuration organization research)

Active Themes

Current status is tracked via the linked GitHub labels. This section serves as an orientation map, not a real-time tracker.

  • Stability and Reliability: auth recovery, network error scoping, media permission handling, drag-and-drop file uploads (restore File.path Electron now strips, #2679). Live: bug.

  • Media and Calls: camera and mic handling, speaking indicator, call drops on multi-interface systems. Live: media, screen-sharing. In review: suppress automatic audio/video device switching (media.preventDeviceSwitching, PR #2652).

  • Downloads: download-feedback manager shipped --- taskbar/KDE JobView progress and completion notifications (#2512). In review: save options download.saveDirectory / download.alwaysAskWhereToSave / download.openWhenDone plus a policy-block notification for M365/SharePoint-interrupted downloads (PR #2652), and context-menu attachment download ("Download Attachment & Copy to Clipboard", "Save Open Document to File") through the authenticated session (PR #2654). All three split out of #2645.

  • macOS Desktop Integration: In review: presence-status overlay on the Dock icon (media.showStatusOnDockIcon) and opt-out Apple-Silicon rendering/performance switches (media.macPerformanceMode, larger V8 heap gated to arm64) (PR #2653).

  • Wayland Compatibility: ozone-platform default reset under community testing (#2508). Live: wayland.

  • MQTT Integration: presence, media state, screen-share topics shipped. Home Assistant auto-discovery shipped (PR #2464, PR #2571). Microphone state shipped (PR #2497). Incoming-call topic shipped (PR #2572). Camera topic shipped (PR #2582). Live: mqtt.

  • Notifications: lifecycle stable; remaining work in notifications.

  • Config Schema as Single Source of Truth (#2597): phases 0-2 shipped in v2.12.0 (drift fixes, generated reference + config-schema.json with CI drift guard, docs config explorer); 3a (applyMode + nested-field metadata, hard-failing generator lint) and 4 (warn-only startup validation) landed; 3b (in-app settings window) is the remaining phase (research). The settings window is the deliverable, and its restart-only MVP can ship on its own:

    • Build the restart-only settings MVP, reusing the legacyConfigStore override-on-boot layering and allowlisting writes to schema keys with type/choice plus deep prototype-pollution validation; defer the live-apply subset and the object-typed forms.

    The flat-to-nested config migration is an optional, independent companion rather than a prerequisite, and can land before, alongside, or after the window. Done before (add structured renamedTo metadata to the remaining flat options, naming owned by configuration organization research, then ship the opt-in --migrate-config codemod and deprecated badges) it de-risks the writer by collapsing config to one canonical nested shape. It can also ride on the window itself: since every save writes canonical nested keys, the UI passively migrates each user with no separate phase.

  • Testing Infrastructure: cross-distro Docker tests passing for all 9 configurations (ADR-016); CI integration in progress.

  • Dev Experience: stale bot tuning and a project-specific code-reviewer subagent are the next quick wins. (PR template landed 2026-05-15.)


Awaiting User Feedback

Phase 2 work depending on a user trigger.

  • Quick Chat Access (#2109, shipped v2.7.4): notification click-to-chat, recent contacts cache, favorites list if requested.
  • Graph API Enhanced Features (research): calendar sync, mail preview notifications. Presence endpoint returns 403 because the Teams token lacks Presence.Read scope.

Not Planned / Not Feasible

FeatureIssueReasonNotes
Screen Lock Media Privacy#2106Closed --- no user interestReopen if requested
Meeting Join with ID#2152Microsoft limitationWorkaround: use meeting link via clipboard
Custom Notifications Phase 2#2108Dropped --- didn't work for the userMVP (v2.6.16) remains
GNOME Search Provider#2075Latency too high (~300-1100ms)Technically feasible but poor UX
External Browser Auth#2017Not feasibleTeams manages OAuth internally
Multiple Windows#1984Rejected (ADR-010)Quick Chat is the alternative
useSystemPicker---Rejected (ADR-008)Reconsider when Electron improves Linux support
Disable Chat Spellcheck#2304Not feasibleSpellcheck is controlled by Teams/Chromium, not the wrapper
Formatting View on Compose#2318Not feasibleTeams UI internals; no injection point

Infrastructure