Docs
Doc / build-macos
Build OmniEdge for macOS
OmniEdge v2.x is built with Rust and Tauri. This guide covers building both the CLI and Desktop applications on macOS.
Supported Versions
- macOS 11 Big Sur or later
- Apple Silicon (M1/M2/M3/M4) and Intel Macs
Prerequisites
Install Xcode Command Line Tools
xcode-select --installInstall Rust Toolchain
# Install Rust (1.70+ required)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
# Verify
rustc --version # Should be 1.70+
cargo --versionInstall Node.js (for Desktop)
# Using Homebrew
brew install node
# Or using nvm (recommended)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.zshrc
nvm install 20
nvm use 20
# Verify
node --version # Should be 18+
npm --versionBuild CLI
Clone and Build
git clone https://github.com/omniedgeio/omniedge.git
cd omniedge
# Build CLI in release mode
cargo build --release -p omni-cli
# Binary location
ls -la target/release/omniedgeInstall CLI
# Install to /usr/local/bin
sudo cp target/release/omniedge /usr/local/bin/
# Verify
omniedge --versionBuild for Both Architectures (Universal Binary)
# Add both targets
rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin
# Build for each
cargo build --release -p omni-cli --target x86_64-apple-darwin
cargo build --release -p omni-cli --target aarch64-apple-darwin
# Create universal binary
lipo -create \
target/x86_64-apple-darwin/release/omniedge \
target/aarch64-apple-darwin/release/omniedge \
-output omniedge-universal
# Verify
file omniedge-universal
# Should show: Mach-O universal binary with 2 architecturesBuild Desktop Application
Build Desktop
cd apps/desktop
# Install npm dependencies
npm install
# Build Tauri app (creates .dmg)
npm run tauri buildBuild Output
Installers are created in apps/desktop/src-tauri/target/release/bundle/:
| Format | Location |
|---|---|
| DMG | bundle/dmg/OmniEdge_*.dmg |
| App Bundle | bundle/macos/OmniEdge.app |
Build for Both Architectures
cd apps/desktop
# Build for Intel
npm run tauri build -- --target x86_64-apple-darwin
# Build for Apple Silicon
npm run tauri build -- --target aarch64-apple-darwinDevelopment Mode
CLI Development
# Run CLI in debug mode
cargo run -p omni-cli -- --help
# Run with arguments
cargo run -p omni-cli -- statusDesktop Development
cd apps/desktop
# Start development server with hot reload
npm run tauri devTesting
# Run all tests
cargo test
# Run specific crate tests
cargo test -p omni-cli
cargo test -p omni-tunCode Signing (For Distribution)
Developer ID Signing
For distributing outside the App Store:
- Obtain a "Developer ID Application" certificate from Apple Developer
- Configure Tauri for signing:
Edit apps/desktop/src-tauri/tauri.conf.json:
{
"bundle": {
"macOS": {
"signingIdentity": "Developer ID Application: Your Name (TEAM_ID)",
"entitlements": "./Entitlements.plist"
}
}
}Notarization
Apple requires notarization for apps distributed outside the App Store:
# After building, notarize the app
xcrun notarytool submit apps/desktop/src-tauri/target/release/bundle/dmg/OmniEdge_*.dmg \
--apple-id "your@email.com" \
--password "app-specific-password" \
--team-id "TEAM_ID" \
--waitEntitlements
Create apps/desktop/src-tauri/Entitlements.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
</dict>
</plist>Troubleshooting
Gatekeeper Blocks App
When running an unsigned development build:
- Right-click the app and select "Open"
- Or: System Settings → Privacy & Security → "Open Anyway"
TUN Interface Permissions
OmniEdge uses the native utun interface. It requires admin privileges:
sudo omniedge startRosetta on Apple Silicon
If building or running Intel binaries on Apple Silicon:
# Install Rosetta (if not installed)
softwareupdate --install-rosettaIf you have more questions, feel free to discuss.
On This Page