Complete guide for releasing new versions of Milo with auto-updates.
# 1. Export signing key
export TAURI_SIGNING_PRIVATE_KEY=$(cat ~/.tauri/milo.key)
# 2. Run automated release
pnpm release v0.1.13
# 3. Push to GitHub
git push origin master && git push origin v0.1.13
# 4. Create GitHub release and upload files (see below)After running pnpm release v0.1.13, you'll find these files:
src-tauri/target/release/bundle/dmg/
└── Milo_0.1.13_x64.dmg
src-tauri/target/release/bundle/macos/
├── Milo.app.tar.gz
└── Milo.app.tar.gz.sig
project-root/
└── latest.json
Create a new release on GitHub and upload these files:
-
Milo_0.1.13_x64.dmg(from/dmg/folder)- For users to download and install
-
Milo.app.tar.gz(from/macos/folder)- For automatic updates
-
latest.json(from project root)- Update manifest (tells app about new version)
pnpm tauri signer generate -w ~/.tauri/milo.key --password test123CRITICAL: Store these securely in your password manager:
- File:
~/.tauri/milo.key - Password:
test123 - Note: "Required for Milo app updates. If lost, cannot release updates."
- ✅ Validates signing key setup
- ✅ Updates versions in
Cargo.toml,package.json,tauri.conf.json - ✅ Builds app with cryptographic signatures
- ✅ Extracts signatures from build artifacts
- ✅ Generates latest.json with update information
- ✅ Commits and tags (optional)
# Generate new key
pnpm tauri signer generate -w ~/.tauri/milo.key --password test123# Set signing key
export TAURI_SIGNING_PRIVATE_KEY=$(cat ~/.tauri/milo.key)
export TAURI_SIGNING_PRIVATE_KEY_PASSWORD="test123"- Ensure all dependencies installed:
pnpm install - Check Rust toolchain:
rustup update - Verify key permissions:
ls -la ~/.tauri/milo.key
- Build completed but signatures missing
- Manual signatures will be created in
latest.json - Check that
createUpdaterArtifacts: trueintauri.conf.json
- User has Milo v0.1.12 installed
- You release v0.1.13 using this process
- App checks
latest.jsonon startup - Shows update notification if newer version found
- Downloads
Milo.app.tar.gzautomatically - Installs and restarts with new version
- Signing key backed up securely
- Environment variables set
- Version number follows semantic versioning
- Run
pnpm release vX.X.X - Review generated
latest.json - Push to GitHub:
git push origin master && git push origin vX.X.X - Create GitHub release
- Upload DMG file from
/dmg/folder - Upload
Milo.app.tar.gzfrom/macos/folder - Upload
latest.jsonfrom project root - Test auto-update on previous version
For fully automated releases, set up GitHub Actions with:
TAURI_SIGNING_PRIVATE_KEY(base64 encoded key)TAURI_SIGNING_PRIVATE_KEY_PASSWORD
Then releases happen automatically on git tag push!