Skip to main content
Building Impactor can be complex due to platform-specific requirements. This guide covers all platforms and their unique specifications.

Prerequisites

All platforms require these core dependencies:

Rust

Install the Rust toolchain using rustup

CMake

Build system and C++ compiler required

Basic build commands

Once dependencies are installed, use these commands to build and test:
# Building / testing GUI
cargo run --bin plumeimpactor

# Building / testing CLI
cargo run --bin plumesign -- <args>
For production builds:
# Release build for both applications
cargo build --bins --workspace --release

Platform-specific requirements

Linux builds require additional system libraries for GUI rendering and device communication.

Ubuntu/Debian

sudo apt-get install libclang-dev pkg-config libgtk-3-dev \
  libpng-dev libjpeg-dev libgl1-mesa-dev libglu1-mesa-dev \
  libxkbcommon-dev libexpat1-dev libtiff-dev

Fedora/RHEL

sudo dnf install clang-devel pkg-config gtk3-devel \
  libpng-devel libjpeg-devel mesa-libGL-devel mesa-libGLU-devel \
  libxkbcommon-devel expat-devel libtiff-devel

Runtime requirements

On Linux, usbmuxd must be installed on your system. It comes with most popular distributions by default.Due to some distributions’ udev rules, usbmuxd may stop running after no devices are connected. You can mitigate this by plugging your phone in first, then restarting the app.
Some distributions (like Bazzite) may need you to run:
sudo update-crypto-policies
This ensures usbmuxd can detect devices properly.

Building AppImage

For distribution, you can build an AppImage:
make linux PROFILE=release APPIMAGE=1
macOS builds require Apple development tools.

Requirements

Install one of the following:

Building universal binaries

To create a universal binary (Apple Silicon + Intel):
# Build for both architectures
cargo build --bins --workspace --release --target aarch64-apple-darwin
cargo build --bins --workspace --release --target x86_64-apple-darwin

# Create universal binary using Makefile
make macos BIN1=target/aarch64-apple-darwin/release/plumeimpactor \
  BIN2=target/x86_64-apple-darwin/release/plumeimpactor \
  BUNDLE=1 ARCH=universal

Creating DMG installer

brew install create-dmg
# See .github/workflows/build.yml for complete DMG creation steps
The macOS-specific plume_gestalt crate provides wrapper functionality for libMobileGestalt.dylib, used to obtain your Mac’s UDID for Apple Silicon sideloading.
Windows builds require Visual Studio build tools.

Requirements

Install both:

Cross-compilation from Linux

You can cross-compile for Windows from Linux:
# Install mingw-w64
sudo apt-get update
sudo apt-get install -y mingw-w64

# Add Windows target
rustup target add x86_64-pc-windows-gnu

# Build
cargo build --bins --workspace --release --target x86_64-pc-windows-gnu

Creating installer

On Windows, you can create an NSIS installer:
# Install NSIS
choco install nsis.portable

# Build installer (see package/windows/ for installer scripts)
makensis package/windows/installer.nsi
On Windows, iTunes must be downloaded so Impactor can use the drivers for interacting with Apple devices.

GitHub Actions reference

The best reference for building on any platform is the GitHub Actions workflow at .github/workflows/build.yml. This file contains:
  • Complete build steps for all platforms
  • Cross-compilation configurations
  • Packaging and distribution steps
  • Code signing and notarization (macOS)
  • AppImage generation (Linux)
  • NSIS installer creation (Windows)

Build profiles

Impactor uses optimized release profiles for smaller binaries:
[profile.release]
codegen-units = 1           # reduces binary size by ~2%
lto = true                  # reduces binary size by ~14%
opt-level = "s"             # reduces binary size by ~25%
panic = "abort"             # reduces binary size by ~50%
strip = "symbols"           # reduces binary size by ~65%
These optimizations significantly reduce binary size while maintaining performance.

Build docs developers (and LLMs) love