Skip to content

Building from Source

Finnegan's Owner edited this page Jul 13, 2026 · 4 revisions

Building from Source

Prerequisites

Follow the Tauri prerequisites guide for your platform.

At minimum you need:

  • Node.js 22+
  • Rust (latest stable)
  • Platform-specific build tools (Xcode CLI on macOS, Visual Studio Build Tools on Windows, etc.)
  • Perl — the build vendors OpenSSL from source (via native-tls-vendored), and OpenSSL's configure step requires Perl. On Windows you also need NASM on PATH.

Quick Build

git clone https://github.com/pacmano1/launcher.git
cd launcher
npm install
npm run tauri build

The built application will be at:

  • macOS: src-tauri/target/release/bundle/macos/Launcher.app
  • Windows: src-tauri/target/release/bundle/msi/
  • Linux: src-tauri/target/release/bundle/deb/

macOS Universal Binary

To build a universal binary that runs natively on both Apple Silicon and Intel Macs:

rustup target add x86_64-apple-darwin
npm run tauri build -- --target universal-apple-darwin

Output: src-tauri/target/universal-apple-darwin/release/bundle/

Development Mode

npm install
npm run tauri dev

This starts the Nuxt dev server with hot reload and the Tauri window.

Rust Only

To check or test just the Rust backend without building the frontend:

cargo check --manifest-path src-tauri/Cargo.toml
cargo test --manifest-path src-tauri/Cargo.toml

OpenSSL Build Toolchain

The connectivity status probe uses reqwest with the native-tls-vendored feature, which compiles OpenSSL from source as part of the build. This adds two build-time requirements beyond the standard Tauri toolchain:

  • Perl on every platform (used by OpenSSL's configure step).
  • NASM on Windows, in addition to Perl.

Because OpenSSL is vendored, you do not need a separately installed OpenSSL or any OPENSSL_* environment variables. On Windows, install Strawberry Perl and NASM, make sure both are on PATH, then build normally with npm run tauri build.

CI/CD

The GitHub Actions workflow at .github/workflows/build-launcher.yml builds on every push and pull request. The run also executes cargo audit and npm audit, and an aggregating ci-success check gates merges.

Draft releases are cut only from a pushed version tag (v*), not on every push to master. A guard step fails the release unless the pushed tag matches the manifest version (package.json), so a mis-tag can't produce a release. The release is always a draft — a human reviews the assets and publishes it. See RELEASING.md in the repo for the full release procedure.

Build Matrix

Runner Architecture Artifacts
macos-latest Universal (ARM64 + x86_64) .app, .dmg
ubuntu-latest x86_64 .deb, .rpm, .AppImage
ubuntu-24.04-arm ARM64 .deb, .rpm, .AppImage
windows-latest x86_64 .exe, .msi
windows-11-arm ARM64 .exe, .msi

DMG Bundling (macOS)

To create a .dmg installer on macOS, you need create-dmg:

brew install create-dmg

Without it, the .app still builds successfully — only the DMG step fails.

Stale DMG Mounts

If the DMG bundling step fails repeatedly, stale mounted disk images from previous builds may be blocking it. Eject them:

hdiutil info | grep -B1 "Launcher" | grep "^/dev/" | sort -u | while read dev; do hdiutil detach "$dev" -force; done

Icon Requirements

The app icon (src-tauri/icons/icon.png) must be square (equal width and height). The Linux AppImage bundler will fail if the icon is not square.

Clone this wiki locally