# Building TimeSafari Electron App This guide explains how to build distributable packages for the TimeSafari Electron desktop application. ## Quick Start ### From Project Root ```bash # Build all Linux packages (AppImage, deb) npm run electron:build # Build specific package types npm run electron:build:appimage # AppImage only npm run electron:build:deb # Debian package only ``` ### From Electron Directory ```bash cd electron # Build all packages ./build-packages.sh # Build specific types ./build-packages.sh appimage ./build-packages.sh deb ./build-packages.sh pack # Unpacked directory (for testing) ``` ## Package Types ### 1. AppImage (Recommended for Linux) - **File**: `TimeSafari-1.0.0.AppImage` - **Size**: ~145MB - **Usage**: Download and run directly, no installation required - **Distribution**: Upload to GitHub releases or website ```bash # Make executable and run chmod +x TimeSafari-1.0.0.AppImage ./TimeSafari-1.0.0.AppImage ``` ### 2. Debian Package (.deb) - **File**: `TimeSafari_1.0.0_amd64.deb` - **Size**: ~96MB - **Usage**: Install via package manager - **Distribution**: Upload to repositories or direct download ```bash # Install sudo dpkg -i TimeSafari_1.0.0_amd64.deb # Run timesafari ``` ### 3. RPM Package (.rpm) - **File**: `TimeSafari-1.0.0.x86_64.rpm` - **Requirements**: `rpmbuild` must be installed - **Usage**: Install via package manager ```bash # Install rpmbuild (Arch Linux) sudo pacman -S rpm-tools # Build RPM ./build-packages.sh rpm # Install (on RPM-based systems) sudo rpm -i TimeSafari-1.0.0.x86_64.rpm ``` ## Build Requirements ### System Dependencies - Node.js 18+ - npm or yarn - Python 3 (for native module compilation) - Build tools (gcc, make) ### Optional Dependencies - `rpmbuild` - for RPM packages - `fpm` - automatically downloaded by electron-builder ### Node Dependencies All required dependencies are in `package.json`: - `electron-builder` - Main build tool - `better-sqlite3-multiple-ciphers` - SQLite with encryption - Native module compilation tools ## Build Process ### 1. Preparation ```bash # Install dependencies npm install # Build TypeScript npm run build ``` ### 2. Package Creation The build process: 1. Compiles TypeScript to JavaScript 2. Rebuilds native modules for Electron 3. Packages the app with electron-builder 4. Creates platform-specific installers ### 3. Output Location All built packages are saved to `electron/dist/`: ``` dist/ ├── TimeSafari-1.0.0.AppImage # Portable AppImage ├── TimeSafari_1.0.0_amd64.deb # Debian package ├── TimeSafari-1.0.0.x86_64.rpm # RPM package (if built) └── linux-unpacked/ # Unpacked directory ``` ## Configuration ### App Metadata App information is configured in `electron/package.json`: ```json { "name": "TimeSafari", "version": "1.0.0", "description": "Time Safari - Community building through gifts, gratitude, and collaborative projects", "homepage": "https://timesafari.app", "author": { "name": "Matthew Raymer", "email": "matthew@timesafari.app" } } ``` ### Build Configuration Build settings are in `electron/electron-builder.config.json`: - Package formats and architectures - Icons and assets - Platform-specific settings - Signing and publishing options ## Troubleshooting ### Common Issues #### 1. Native Module Compilation Errors ```bash # Clear cache and rebuild npm run build ``` #### 2. Missing Dependencies ```bash # Install system dependencies (Arch Linux) sudo pacman -S base-devel python # Install Node dependencies npm install ``` #### 3. RPM Build Fails ```bash # Install rpmbuild sudo pacman -S rpm-tools # Try building again ./build-packages.sh rpm ``` #### 4. Large Package Size The packages are large (~100-150MB) because they include: - Complete Electron runtime - Node.js runtime - SQLite native modules - Application assets This is normal for Electron applications. ### Debug Mode For detailed build information: ```bash DEBUG=electron-builder npx electron-builder build ``` ## Distribution ### GitHub Releases 1. Create a new release on GitHub 2. Upload the built packages as release assets 3. Users can download and install directly ### Package Repositories - **Debian/Ubuntu**: Upload `.deb` to repository - **Fedora/CentOS**: Upload `.rpm` to repository - **Arch Linux**: Create PKGBUILD for AUR ### Direct Download Host the packages on your website for direct download. ## Cross-Platform Building ### Current Support - **Linux**: Full support (AppImage, deb, rpm) - **Windows**: Configured but requires Windows build environment - **macOS**: Configured but requires macOS build environment ### Building for Other Platforms To build for Windows or macOS, you need: - The target platform's build environment - Platform-specific signing certificates - Updated build configuration ## Security Considerations ### Code Signing For production releases, consider code signing: - **Linux**: Not required but recommended - **Windows**: Required for Windows SmartScreen - **macOS**: Required for Gatekeeper ### Package Integrity - Verify package checksums - Use HTTPS for distribution - Consider GPG signatures for packages ## Performance Tips ### Build Optimization - Use `--dir` flag for faster development builds - Cache node_modules between builds - Use CI/CD for automated builds ### Package Size Reduction - Remove unnecessary dependencies - Use electron-builder's file filtering - Consider using electron-updater for delta updates ## Support For build issues: 1. Check the console output for specific errors 2. Verify all dependencies are installed 3. Try cleaning and rebuilding 4. Check electron-builder documentation 5. Open an issue with build logs --- **Happy Building! 🚀**