Building desktop apps and PWAs
Build cross-platform desktop applications and Progressive Web Apps with Aurelia using Electron, Tauri, and modern PWA technologies.
Deploy your Aurelia application beyond the browser—as installable Progressive Web Apps (PWAs) that work offline, or as native desktop applications for Windows, macOS, and Linux using Electron or Tauri. This guide covers strategies for building, packaging, and distributing cross-platform applications.
Why This Is an Advanced Scenario
Desktop and PWA deployment involves:
Platform adaptation - Tailoring UX for desktop vs. web
Native integrations - File system, system tray, notifications
Distribution complexity - App stores, auto-updates, code signing
Security considerations - Sandbox escaping, IPC security
Performance optimization - Bundle size, startup time, memory usage
Offline capabilities - Service workers, local data, sync strategies
Multi-platform testing - Windows, macOS, Linux variations
Advanced topics:
Custom protocols and deep linking
Native module integration
Hardware access (USB, Bluetooth, Serial)
System-level permissions
Crash reporting and analytics
Auto-update mechanisms
Technology Overview
Progressive Web Apps (PWAs)
Web applications with native-like capabilities:
Pros: No installation friction, automatic updates, cross-platform
Cons: Limited system access, browser dependency
Best for: Customer-facing apps, content-heavy applications
Electron
Chromium + Node.js for desktop apps:
Pros: Full Node.js access, mature ecosystem, extensive APIs
Cons: Large bundle size (~150MB), slower startup
Best for: Feature-rich applications, enterprise software
Tauri
Rust + WebView for lightweight desktop apps:
Pros: Tiny bundles (~5MB), fast startup, memory efficient, secure
Cons: Younger ecosystem, less plugins
Best for: Performant apps, resource-conscious deployments
Part 1: Progressive Web Apps (PWAs)
Complete PWA Guide
For comprehensive PWA documentation including service workers, caching strategies, manifest configuration, and offline functionality:
See the complete guide: Progressive Web Apps (PWA)
PWA Quick Start
PWA Best Practices
Offline-First Architecture
App-like Navigation - No URL bar, custom chrome
Background Sync - Queue actions when offline
Push Notifications - Re-engagement strategy
Install Prompts - Strategic timing for install banners
Part 2: Electron Desktop Apps
Installing Electron
Project Structure
Main Process Setup
Preload Script (Secure IPC)
Using Electron APIs in Aurelia
Package.json Scripts
Electron Builder Configuration
Auto-Updates
Part 3: Tauri Desktop Apps
Installing Tauri
Initialize Tauri:
Project Structure
Tauri Configuration
Rust Backend (main.rs)
Using Tauri APIs in Aurelia
Package.json Scripts
Building for Distribution
Outputs:
Windows:
.exeinstaller,.msimacOS:
.app,.dmgLinux:
.AppImage,.deb,.rpm
Comparison: Electron vs. Tauri
Bundle Size
~150MB
~5MB
Memory
100-200MB base
30-50MB base
Startup Time
1-3 seconds
<1 second
Backend Language
Node.js (JavaScript)
Rust
Maturity
Very mature
Growing
Plugin Ecosystem
Extensive
Growing
Security
Good (with care)
Excellent
Auto-Updates
Built-in
Third-party
Learning Curve
JavaScript only
Requires Rust
Common Patterns
Environment Detection
Cross-Platform File Operations
System Notifications
Distribution & Deployment
Code Signing
macOS:
Windows:
App Stores
Microsoft Store: Package as MSIX
Mac App Store: Notarization required
Snap Store (Linux): Snapcraft packaging
Auto-Updates
Electron + electron-updater:
Tauri: Use external update servers or GitHub releases
Security Best Practices
Disable Node Integration (Electron)
Enable Context Isolation (Electron)
Use Preload Scripts for IPC
Validate All IPC Messages
Allowlist Required APIs (Tauri)
Keep Dependencies Updated
Implement CSP Headers
Code Sign All Releases
Performance Optimization
Bundle Size
Tree-shake unused code
Code split large dependencies
Compress assets
Use native modules sparingly
Startup Time
Lazy load heavy components
Defer non-critical initialization
Cache computed values
Optimize Electron/Tauri window creation
Memory Usage
Dispose subscriptions properly
Use virtual scrolling for lists
Implement pagination
Profile with DevTools
Testing Desktop Apps
Resources
PWA
Electron
Tauri
Deployment
Last updated
Was this helpful?