Building
This guide covers building Kuse Cowork for distribution.
Build Requirements
Ensure you have all prerequisites from Development Setup.
Development Build
bash
# Quick development build
pnpm tauri build --debugOutput: src-tauri/target/debug/
Production Build
Local Build
bash
# Full production build
pnpm tauri buildOutput locations:
- macOS:
src-tauri/target/release/bundle/dmg/ - Windows:
src-tauri/target/release/bundle/msi/ - Linux:
src-tauri/target/release/bundle/deb/
Platform-Specific Builds
bash
# Build for current architecture
pnpm tauri build
# Build for specific architecture
pnpm tauri build --target aarch64-apple-darwin # Apple Silicon
pnpm tauri build --target x86_64-apple-darwin # Intel
# Universal binary (both architectures)
pnpm tauri build --target universal-apple-darwin
# Output formats:
# .app - Application bundle
# .dmg - Disk image
# .pkg - Installer packagebash
# Build for Windows
pnpm tauri build
# Build specific format
pnpm tauri build --bundles msi
pnpm tauri build --bundles nsis
# Output formats:
# .exe - Executable
# .msi - MSI installer
# *-setup.exe - NSIS installerbash
# Build for Linux
pnpm tauri build
# Build specific format
pnpm tauri build --bundles deb
pnpm tauri build --bundles appimage
pnpm tauri build --bundles rpm
# Output formats:
# .deb - Debian package
# .rpm - Red Hat package
# .AppImage - Universal Linux appBuild Configuration
Tauri Config
src-tauri/tauri.conf.json:
json
{
"build": {
"beforeBuildCommand": "pnpm build",
"beforeDevCommand": "pnpm dev",
"devUrl": "http://localhost:1420",
"frontendDist": "../dist"
},
"bundle": {
"active": true,
"category": "DeveloperTool",
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/icon.icns",
"icons/icon.ico"
],
"identifier": "com.kuse-cowork.app",
"targets": "all"
},
"productName": "Kuse Cowork",
"version": "0.1.0"
}Cargo Release Profile
src-tauri/Cargo.toml:
toml
[profile.release]
lto = true
opt-level = "s"
codegen-units = 1
panic = "abort"
strip = trueCross-Compilation
From macOS
bash
# Build for Windows (requires mingw)
brew install mingw-w64
rustup target add x86_64-pc-windows-gnu
pnpm tauri build --target x86_64-pc-windows-gnuFrom Linux
bash
# Build for Windows (requires mingw)
sudo apt install mingw-w64
rustup target add x86_64-pc-windows-gnu
pnpm tauri build --target x86_64-pc-windows-gnuCI/CD Build
GitHub Actions
.github/workflows/build.yml:
yaml
name: Build
on:
push:
tags:
- 'v*'
jobs:
build:
strategy:
matrix:
include:
- os: macos-latest
target: aarch64-apple-darwin
- os: macos-latest
target: x86_64-apple-darwin
- os: windows-latest
target: x86_64-pc-windows-msvc
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 8
- name: Install Rust
uses: dtolnay/rust-action@stable
with:
targets: ${{ matrix.target }}
- name: Install dependencies (Linux)
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libayatana-appindicator3-dev
- name: Install frontend dependencies
run: pnpm install
- name: Build
run: pnpm tauri build --target ${{ matrix.target }}
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: binaries-${{ matrix.target }}
path: src-tauri/target/${{ matrix.target }}/release/bundle/Code Signing
macOS
- Get Apple Developer certificate
- Export certificate to
.p12 - Set environment variables:
bash
export APPLE_CERTIFICATE="base64-encoded-p12"
export APPLE_CERTIFICATE_PASSWORD="password"
export APPLE_SIGNING_IDENTITY="Developer ID Application: ..."- Build with signing:
bash
pnpm tauri buildWindows
- Get code signing certificate (EV recommended)
- Configure in
tauri.conf.json:
json
{
"bundle": {
"windows": {
"certificateThumbprint": "YOUR_THUMBPRINT",
"digestAlgorithm": "sha256"
}
}
}Notarization
macOS Notarization
- Configure Apple credentials:
bash
export APPLE_ID="your@email.com"
export APPLE_PASSWORD="app-specific-password"
export APPLE_TEAM_ID="TEAM_ID"- Enable in config:
json
{
"bundle": {
"macOS": {
"entitlements": "entitlements.plist",
"signingIdentity": "-"
}
}
}Build Optimization
Minimize Binary Size
toml
# Cargo.toml
[profile.release]
lto = true # Link-time optimization
opt-level = "s" # Optimize for size
strip = true # Strip symbols
codegen-units = 1 # Better optimizationFaster Builds
toml
# For development
[profile.dev]
opt-level = 0
debug = true
# For CI
[profile.release]
lto = "thin" # Faster than full LTO
codegen-units = 16 # Faster compilationTroubleshooting
Build fails with missing libraries
Linux:
bash
sudo apt install libwebkit2gtk-4.1-dev libayatana-appindicator3-devmacOS:
bash
xcode-select --installCode signing fails
- Verify certificate is valid
- Check keychain access
- Ensure correct identity name
Build is too large
- Enable LTO in release profile
- Use
opt-level = "s"or"z" - Strip debug symbols
Cross-compilation fails
- Install target:
rustup target add <target> - Install cross-compiler toolchain
- Check linker configuration
Versioning
Update version in multiple places:
package.json:
json
{ "version": "1.0.0" }src-tauri/Cargo.toml:
toml
version = "1.0.0"src-tauri/tauri.conf.json:
json
{ "version": "1.0.0" }Release Checklist
- [ ] Update version numbers
- [ ] Update CHANGELOG.md
- [ ] Run all tests
- [ ] Build for all platforms
- [ ] Test built applications
- [ ] Sign binaries
- [ ] Notarize macOS build
- [ ] Create GitHub release
- [ ] Upload artifacts
- [ ] Update documentation