Extract and export worship song lyrics from ProPresenter 7
View the Project on GitHub adamswbrown/propresenterlyricexport
Create releases and distribute the application.
The project supports multiple distribution targets:
npm run build:exe
Creates three executables in executables/:
propresenter-lyrics-macos-x64 (macOS Intel)propresenter-lyrics-macos-arm64 (macOS Apple Silicon)propresenter-lyrics-win-x64.exe (Windows)# 1. Compile TypeScript
npm run build
# 2. Run pkg on compiled code
pkg dist/cli.js --targets node18-macos-x64,node18-macos-arm64,node18-win-x64
# 3. Output to executables/
Key flags:
--assets logo.png - Bundle assets--options max-old-space-size=4096 - Memory limitnpm run electron:dev
Runs with hot reload and dev tools enabled.
# 1. Compile TypeScript and React
npm run electron:build
# 2. Package with electron-builder
npm run electron:package
Creates in release/:
.zip file with app bundle.exe installerelectron-builder.config.js:
# 1. Update version
vim package.json # Version: X.Y.Z
vim CHANGELOG.md # Add [X.Y.Z] section
# 2. Commit and tag
git add package.json CHANGELOG.md
git commit -m "v X.Y.Z: Release notes"
git tag vX.Y.Z
# 3. Push (triggers workflow)
git push origin main
git push origin vX.Y.Z
When you push a tag vX.Y.Z:
See: .github/workflows/release.yml
Desktop App:
ProPresenter-Lyrics-vX.Y.Z-mac.zip (50-80MB)ProPresenter-Lyrics-vX.Y.Z-win.exe (60-90MB)CLI Executables:
propresenter-lyrics-macos-x64 (120MB)propresenter-lyrics-macos-arm64 (120MB)propresenter-lyrics-win-x64.exe (120MB)# Create distribution package
mkdir propresenter-lyrics-v2.2.1
cp executables/* propresenter-lyrics-v2.2.1/
cp docs/getting-started.md propresenter-lyrics-v2.2.1/
zip -r propresenter-lyrics-v2.2.1.zip propresenter-lyrics-v2.2.1/
For production releases, sign the app:
# In electron-builder.config.js
{
mac: {
certificateFile: '/path/to/certificate.p12',
certificatePassword: process.env.CSC_KEY_PASSWORD,
signingIdentity: 'Developer ID Application: ...'
}
}
Apple requires notarization for distribution:
# electron-builder handles this if configured
{
mac: {
notarize: {
teamId: 'XXXXXXXXXX' // Apple Team ID
}
}
}
# Clear build artifacts
rm -rf dist dist-electron executables release
# Rebuild
npm run build
npm run build:exe
npm run electron:package
# Usually pptxgenjs issue
# Check version in package.json (must be 3.10.0)
npm list pptxgenjs
# If wrong version
npm install pptxgenjs@3.10.0
# Clear cache
rm -rf node_modules/.cache
# Reinstall
npm install
# Rebuild
npm run electron:build
npm run electron:package
Before publishing:
# Test CLI executable
./executables/propresenter-lyrics-macos-x64 status
./executables/propresenter-lyrics-macos-arm64 status
# Test Electron app
open release/mac-arm64/ProPresenter\ Lyrics.app
# On Windows
release/win-unpacked/ProPresenter Lyrics.exe
git tag vX.Y.Z)git push origin vX.Y.Z)# Current: ~120MB per executable
# To reduce:
1. Tree-shake unused code
2. Minify bundle
3. Remove debug symbols
# In package.json scripts:
"build:exe": "... --compress Brotli"
# CLI startup is ~5 seconds (Node.js overhead)
# To improve:
1. Use V8 snapshots
2. Precompile TypeScript
3. Profile with --prof flag