Research Documentation
This directory contains research, analysis, and strategic insights generated during the development and improvement of Teams for Linux.
These documents capture in-depth analysis and strategic insights that inform development decisions and provide context for major features.
Contents
Ready for Implementation
-
WebAuthn / FIDO2 Implementation Plan - Hardware security key support on Linux via fido2-tools interception of navigator.credentials. Shipped as opt-in beta behind
auth.webauthn.enabled. See ADR-021. -
System Performance Research - Renderer overhead, main process I/O, and metrics infrastructure
- Identifies 10 performance-sensitive patterns (MutationObserver sprawl, polling, sequential I/O)
- Proposes lightweight startup/memory instrumentation with zero dependencies
- Status: Item 5 (
shortcuts.jspolling) shipped; items 1, 2, 3, 4, 8 remaining and being addressed opportunistically
First Iteration Shipped — Awaiting Feedback
- Join Meeting Window Takeover Research — "Join Meeting" replacing the whole window (#2322)
- First iteration: same-origin deep-link navigation +
Return to Teamsmenu item - Caveat: authenticated-org path not verifiable locally; some takeovers are Microsoft-enforced
- Follow-ups: navigation-event auto-return, dedicated meeting window, keyboard accelerator
- First iteration: same-origin deep-link navigation +
Awaiting User Feedback
-
MQTT Extended Status Investigation - Extended MQTT status publishing
- Phase 1 Shipped: Infrastructure, LWT, call state, screen-sharing topics
- Phase 2 Microphone Shipped: PR #2497 merged; publishes speaking/silent/muted/off to
{topicPrefix}/microphone - Phase 2 Camera Shipped: PR #2582 merged; renderer emits
camera-state-changedvia video track monitoring in speakingIndicator - Home Assistant Auto-Discovery Shipped: PR #2464 and PR #2571 merged; sensors, binary_sensors, and buttons auto-created in HA
-
Graph API Integration Research - Microsoft Graph API for enhanced features
- Phase 1 Shipped (v2.7.4): Token acquisition plus 7 IPC channels (user profile, calendar events/view, calendar create, mail messages, People search, send chat). People search and send chat power Quick Chat (ADR-014, ADR-015)
- Phases 2-3: Calendar widget, mail preview, presence, settings UI — not started
Idea Stage
-
Documentation, Contributing, and Config UX — make
app/config/index.jsthe single source of truth feeding generated docs, an in-app settings UI, and startup validation (#2597)- Found confirmed config drift (stale
msTeamsProtocolsdefault; undocumentedmqtt.homeAssistant.*andauth.webauthn.debug); 76 options hand-mirrored in a 924-line reference with no codegen link - Phased: fix drift (P0) → generate config reference +
config-schema.json(P1) → interactive config explorer (P2) → schemaapplyMode/nested metadata (P3a) → in-app settings window (P3b) → schema-driven validation (P4)
- Found confirmed config drift (stale
-
Custom Stickers — External Sources — follow-up to the v1 ship (#2476, PR #2550)
- Three realistic paths ranked by simplicity: URL paste (shipped in v1), Telegram sticker pack import (next phase), AI generation via a user-configured backend such as a local Ollama image-gen session (more futuristic)
- Telegram path: HTML scrape default, Bot API as opt-in fallback, static
.webponly for v1 - AI path: mirrors the
customBackgroundpattern; wrapper has no opinion about which backend sits at the other end
Reference
- Project Management Tools Research - Evaluation of Beads, release-please, release-it, and other tooling for solo OSS maintainer workflows. Status: Research complete, no implementation decision.
Historical (Migrated)
- Configuration Organization Research - Configuration system improvements
- Phase 1 Complete: Documentation reorganization
- Phases 2-3: Nested structure migration happening incrementally
Shipped (Retained for Reference)
- Custom Notification System Research - Alternative notification modal system
- MVP shipped in v2.6.16: toast notifications with auto-dismiss and click-to-focus
- Phase 2 dropped: notifications worked on maintainer's machine but not for the requesting user
- Retained because future requests for custom notifications should reference the lessons learned here
Implemented Features (Research Removed)
Research documents are deleted once a feature is fully shipped and the document provides no ongoing reference value. The ADRs and git history preserve the decisions and context.
| Feature | Version | Reference |
|---|---|---|
| MQTT Microphone State | v2.10.0 | Speaking-indicator driven microphone state (speaking/silent/muted/off) published to MQTT. See PR #2497 |
Notification Sound Player (inline replacement for node-sound) | v2.7.10 | Phase 1 of the notification-sound research shipped — paplay/pw-play/aplay/afplay detection in app/audio/player.js. See PR #2306 |
| Cross-Distro CI Smoke Test | v2.7.x | Workflow .github/workflows/cross-distro-smoke.yml ships the design proposed in the original research. Umbrella decision in ADR-016 |
| Electron 41 Upgrade | v2.8.0 | Repo skipped Electron 40 entirely and jumped 39.8.2 → 41.x via dependabot PR #2347, with follow-up bumps to 41.5.0; the Electron 40 migration research is therefore obsolete |
| Issue-PR Release Linking | v2.7.11 | GraphQL closingIssuesReferences query; closes: metadata in changelog files. See PR #2317 |
| Codebase Review (March 2026) | v2.7.x | Code quality, maintainability, performance, and DX review; findings addressed incrementally |
| Issue Triage Bot | v2.7.x | All four phases implemented; migrated to standalone Go service. See ADR-018 and github-issue-triage-bot |
| Dependency Cleanup | v2.7.10 | Removed node-sound, lodash, electron-positioner; project now has 6 production deps |
| Speaking Indicator | v2.7.11 | WebRTC getStats() for three-state mute/speaking detection. See PR #2299 |
| Electron-Updater Auto-Update | v2.7.6 | ADR-011; research covered electron-updater integration |
| External Changelog Generation | v2.7.x | ADR-005; fork detection + release automation shipped |
| Screen Lock Media Privacy | --- | Closed (#2106); no user interest; work preserved in branch |
| Tray Icon Logout Indicator | --- | Archived (#1987); user not responding; work preserved in branch |
| External Browser Authentication | --- | Not feasible; Teams manages OAuth internally (#2017) |
| GNOME Search Provider | --- | Not recommended; latency too high for acceptable UX (#2075) |
| Code Quality Hardening (Phases 1-3) | v2.7.5 | Logging hygiene, resilience, input handling, IPC hardening, CI/CD gates |
| Wayland/X11 Ozone Platform | v2.7.4 | Force X11 by default due to Electron 38+ Wayland regressions |
| Quick Chat / Chat Modal | v2.7.4 | ADR-014, ADR-015 |
| PII Log Sanitization | v2.7.2 | ADR-013 |
| DOM Access Restoration | v2.5.2 | Hybrid API + DOM approach for React compatibility |
| Architecture Modernization | --- | Rejected (DDD too complex) --- incremental refactoring adopted instead |
| MQTT Commands | v2.6.x | Bidirectional MQTT support for toggle-mute, toggle-video, etc. |
| Calendar Data Export | v2.6.x | MQTT get-calendar command |
| useSystemPicker | --- | Rejected --- ADR-008 |
Purpose
These documents capture strategic insights, comprehensive analysis, research findings, and context that inform development decisions and provide rationale for major features.
Document Lifecycle
Research documents follow this lifecycle:
- Active Research Phase: Document findings, analysis, and recommendations
- Decision Phase: Use research to inform final decisions (implemented or rejected)
- Archive Phase: Move content to appropriate location after decision:
- Implemented features: Create ADR if significant, update feature docs, delete research
- Rejected features: Create/update ADR with concise decision record, delete research
- Superseded research: Close with reference to superseding document
- History: Git commit history preserves full investigation context
Contributing Research
When adding new research documents:
- Follow naming convention: Use descriptive, kebab-case filenames
- Include context: Date, scope, and purpose of analysis
- Link related documents: Cross-reference relevant files
- Update this index: Add entries for new research documents
- Provide actionable outcomes: Include clear recommendations or decisions
Related Documentation
- Configuration Options - Application configuration reference
- IPC API - Developer integration documentation
- Architecture Decision Records - Formal architectural decisions
- Development Roadmap - Future development plans