forked from jsnbuchanan/crowd-funder-for-time-pwa
- Updated electron-builder.config.json with proper TimeSafari metadata - Added Linux package support (AppImage, deb, rpm) - Created build-packages.sh script for easy package building - Added npm scripts for building from project root - Created comprehensive README-BUILDING.md documentation - Fixed package.json metadata (author, homepage, repository) - Added maintainer information for Linux packages Features: - AppImage: Portable, no installation required (~145MB) - Debian package: System integration via package manager (~96MB) - RPM package: Support for RPM-based distributions - Build scripts support individual or all package types Usage: - npm run electron:build (all packages) - npm run electron:build:appimage (AppImage only) - npm run electron:build:deb (Debian package only) - cd electron && ./build-packages.sh [type]
5.6 KiB
5.6 KiB
Building TimeSafari Electron App
This guide explains how to build distributable packages for the TimeSafari Electron desktop application.
Quick Start
From Project Root
# 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
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
# 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
# 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:
rpmbuildmust be installed - Usage: Install via package manager
# 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 packagesfpm- automatically downloaded by electron-builder
Node Dependencies
All required dependencies are in package.json:
electron-builder- Main build toolbetter-sqlite3-multiple-ciphers- SQLite with encryption- Native module compilation tools
Build Process
1. Preparation
# Install dependencies
npm install
# Build TypeScript
npm run build
2. Package Creation
The build process:
- Compiles TypeScript to JavaScript
- Rebuilds native modules for Electron
- Packages the app with electron-builder
- 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:
{
"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
# Clear cache and rebuild
npm run build
2. Missing Dependencies
# Install system dependencies (Arch Linux)
sudo pacman -S base-devel python
# Install Node dependencies
npm install
3. RPM Build Fails
# 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:
DEBUG=electron-builder npx electron-builder build
Distribution
GitHub Releases
- Create a new release on GitHub
- Upload the built packages as release assets
- Users can download and install directly
Package Repositories
- Debian/Ubuntu: Upload
.debto repository - Fedora/CentOS: Upload
.rpmto 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
--dirflag 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:
- Check the console output for specific errors
- Verify all dependencies are installed
- Try cleaning and rebuilding
- Check electron-builder documentation
- Open an issue with build logs
Happy Building! 🚀