Skip to main content

Architecture Overview

FitFileViewer is built as a cross-platform desktop application using Electron with a modular, scalable architecture.

High-Level Architecture​

Key Principles​

πŸ” Security-First​

  • Context isolation enabled
  • Node integration disabled in renderer
  • Secure IPC communication
  • Input validation

πŸ“¦ Modularity​

  • 50+ utility modules
  • Clear separation of concerns
  • Reusable components
  • Single responsibility

⚑ Performance​

  • Lazy loading
  • Efficient data processing
  • Memory management
  • Caching strategies

Technology Stack​

LayerTechnologyPurpose
FrameworkElectronCross-platform desktop
UIHTML/CSS/JSUser interface
ChartsChart.js, Vega-LiteData visualization
MapsLeafletGeographic display
TablesDataTablesData grid
ParserGarmin FIT SDKFIT file parsing

Component Layers​

Process Model​

FitFileViewer uses Electron's multi-process architecture:

ProcessResponsibilities
MainApp lifecycle, window management, file system, IPC
RendererUI rendering, user interaction, visualization
PreloadSecure bridge between main and renderer

Module Organization​

electron-app/
β”œβ”€β”€ main.js # Main process entry
β”œβ”€β”€ renderer.js # Renderer process entry
β”œβ”€β”€ preload.js # Security bridge
β”œβ”€β”€ main-ui.js # UI management
β”œβ”€β”€ fitParser.js # FIT file parsing
└── utils/ # Utility modules
β”œβ”€β”€ formatting/ # Data formatters
β”œβ”€β”€ maps/ # Map utilities
β”œβ”€β”€ charts/ # Chart utilities
β”œβ”€β”€ state/ # State management
└── ... # More modules

Data Flow​

Security Model​

IPC Security​

All communication between processes uses validated channels:

// Preload - Exposed API
contextBridge.exposeInMainWorld('electronAPI', {
openFile: () => ipcRenderer.invoke('dialog:open-fit-file'),
// Only specific, validated operations
});

Content Security​

  • No remote content loading
  • Strict CSP headers
  • Sandboxed renderer

Next: Process Architecture β†’