Module Architecture Index
Comprehensive index of all application modules in the app/ directory. Teams for Linux follows a modular architecture where functionality is organized into focused, single-responsibility modules.
All module READMEs are available in the GitHub repository. Click the documentation links to view detailed information about each module.
Core Modules
These modules form the foundation of the application and are essential for basic operation.
| Module | Path | Purpose | Documentation |
|---|---|---|---|
| Startup | app/startup/ | Command line switches & initialization flags | README |
| Main App Window | app/mainAppWindow/ | Primary BrowserWindow that hosts Teams web interface | README |
| App Configuration | app/appConfiguration/ | Application-wide configuration management | README |
| Browser | app/browser/ | Preload scripts & client-side injected scripts | README |
Feature Modules
User-facing features and integrations.
| Module | Path | Purpose | Documentation |
|---|---|---|---|
| MQTT | app/mqtt/ | MQTT broker integration for status publishing | README, User Guide |
| Screen Sharing | app/screenSharing/ | Native screen/window selection and preview | README, User Guide |
| Custom Background | app/customBackground/ | Virtual background management | README, User Guide |
| Custom CSS | app/customCSS/ | Custom styling and themes | README |
| Notifications | app/notifications/ | Native desktop notifications & sound playback | README |
| Incoming Call Toast | app/incomingCallToast/ | Call notification toasts | README |
| InTune SSO | app/intune/ | Microsoft InTune single sign-on integration | README, User Guide |
| Global Shortcuts | app/globalShortcuts/ | System-wide keyboard shortcuts | No README yet |
| Graph API | app/graphApi/ | Microsoft Graph API integration for calendar and mail | Research |
System Integration Modules
OS-level integrations and platform-specific functionality.
| Module | Path | Purpose | Documentation |
|---|---|---|---|
| Idle Monitor | app/idle/ | System idle state monitoring & status correlation | README |
| Login | app/login/ | Authentication and login flow management | README |
| Menus | app/menus/ | Application menu bar and context menus | README |
| Spell Check Provider | app/spellCheckProvider/ | Text spelling correction integration | README |
Utility & Infrastructure Modules
Supporting infrastructure, utilities, and cross-cutting concerns.
| Module | Path | Purpose | Documentation |
|---|---|---|---|
| Helpers | app/helpers/ | Shared utility functions and common logic | README |
| Cache Manager | app/cacheManager/ | Application cache handling | README |
| Config | app/config/ | Configuration file loading and parsing | README |
| Connection Manager | app/connectionManager/ | Network connectivity and connection state | README |
| Partitions | app/partitions/ | Electron partition management for sessions | README |
| Security | app/security/ | Security controls and validation | No README yet |
| Certificate | app/certificate/ | Custom certificate handling | User Guide |
UI Components
Special-purpose windows and UI elements.
| Module | Path | Purpose | Documentation |
|---|---|---|---|
| Documentation Window | app/documentationWindow/ | In-app documentation viewer | README |
| GPU Info Window | app/gpuInfoWindow/ | GPU information display window | README |
| Screen Picker | app/screenPicker/ | Screen/window selection interface | No README yet |
Assets
| Path | Purpose |
|---|---|
app/assets/ | Icons, sounds, and static resources (README) |
Module Development Guidelines
Creating New Modules
When adding a new module to the application:
- Create a dedicated directory under
app/with a descriptive name - Add a README.md documenting:
- Module purpose and responsibilities
- Public API and IPC channels (if any)
- Dependencies on other modules
- Usage examples
- Follow single responsibility principle - one module, one clear purpose
- Use dependency injection - accept dependencies as constructor/function parameters
- Document IPC channels - add descriptive comments above IPC registrations
- Update IPC allowlist - add new channels to
app/security/ipcValidator.js - Generate IPC docs - run
npm run generate-ipc-docsafter adding IPC channels - Add to this index - update the appropriate category in this document
Module Structure Best Practices
app/myModule/
├── README.md # Module documentation
├── index.js # Public interface / entry point
├── service.js # Service class (if applicable)
├── preload.js # Preload script (if needs IPC)
└── tests/ # Unit tests (future)
└── myModule.spec.js
IPC Channel Guidelines
- Naming convention:
module-name:action(e.g.,screen-sharing:get-sources) - Add descriptive comments above
ipcMain.handle()oripcMain.on()calls - Register in allowlist: Add to
app/security/ipcValidator.js - Generate documentation: Run
npm run generate-ipc-docs - Document in module README: List all IPC channels with descriptions
See IPC API Documentation for all available IPC channels.
Architecture Patterns
Module Dependencies
Modules are organized in a hierarchical dependency structure:
Communication Patterns
- IPC (Inter-Process Communication): Main process ↔ Renderer process
- Event Emitters: Within main process for loose coupling
- Dependency Injection: Pass dependencies explicitly, avoid global state
- Configuration-First: Modules read from centralized config object
Related Documentation
- Contributing Guide: Development Guidelines
- IPC API Reference: IPC Channel Documentation
- Configuration Options: Configuration Reference
- Architecture Decisions: ADR Index
Questions?
- "Where should I add new functionality?" → Check if an existing module fits, otherwise create a new focused module
- "How do I communicate between modules?" → Use dependency injection and IPC for renderer↔main communication
- "Which modules are most important to understand?" → Start with Core Modules, then explore Feature Modules
- "How do I add a new IPC channel?" → See Module Development Guidelines above