Build System
BeatConnect’s cloud build system compiles your plugin for multiple platforms, signs the binaries, and delivers ready-to-distribute artifacts.
Build Overview
┌─────────────────────────────────────────────────────────────────┐
│ Your Repository │
└─────────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ BeatConnect Build System │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ Clone │→ │ Build │→ │ Sign & Notarize │ │
│ │ Repo │ │ (parallel) │ │ (per platform) │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
└─────────────────────────────┬───────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Signed Artifacts │
│ • MyPlugin.vst3 (macOS Universal) │
│ • MyPlugin.component (AU, macOS) │
│ • MyPlugin.vst3 (Windows x64) │
└─────────────────────────────────────────────────────────────────┘
Supported Platforms
| Platform | Architecture | Compiler |
|---|---|---|
| macOS | Universal (x86_64 + arm64) | Apple Clang 15+ |
| macOS | Intel only (x86_64) | Apple Clang 15+ |
| macOS | Apple Silicon only (arm64) | Apple Clang 15+ |
| Windows | x64 | MSVC 2022 |
Default: macOS Universal + Windows x64
Supported Formats
| Format | Platforms | Notes |
|---|---|---|
| VST3 | macOS, Windows | Recommended for widest compatibility |
| AU (Audio Units) | macOS only | Required for Logic Pro, GarageBand |
| Standalone | macOS, Windows | Desktop application version |
| AAX | macOS, Windows | Pro Tools only, requires Avid agreement |
Format Selection
In the build configuration:
{
"formats": ["vst3", "au"],
"platforms": ["macos", "windows"]
}Results in:
MyPlugin.vst3(macOS Universal)MyPlugin.component(macOS AU)MyPlugin.vst3(Windows x64)
Triggering Builds
Manual Builds (Creator Portal)
- Go to Projects → Your Project
- Click Build
- Configure options:
- Platforms
- Formats
- Release type
- Build flags
- Click Start Build
API Builds
curl -X POST https://api.beatconnect.com/functions/v1/builds \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"project_id": "your-project-id",
"platforms": ["macos", "windows"],
"formats": ["vst3", "au"],
"release_type": "patch"
}'Webhook Builds (Automatic)
Configure in Project Settings → Webhooks:
{
"trigger": "push",
"branch": "main",
"auto_build": true,
"platforms": ["macos", "windows"],
"formats": ["vst3", "au"]
}Now pushes to main automatically trigger builds.
Release Types
| Type | Version Change | Use Case |
|---|---|---|
| major | 1.0.0 → 2.0.0 | Breaking changes, major features |
| minor | 1.0.0 → 1.1.0 | New features, backward compatible |
| patch | 1.0.0 → 1.0.1 | Bug fixes, small improvements |
| dev | 1.0.0-dev.1 | Development/testing builds |
| release | 1.0.0-dev.1 → 1.0.0 | Promote dev to release |
Build Flags
Control build behavior with flags:
{
"flags": {
"enableActivationKeys": true,
"enableCreatorMode": false,
"enableFakeMode": false,
"enableDebugMode": false
}
}| Flag | Description |
|---|---|
enableActivationKeys | Build with license activation checking |
enableCreatorMode | Creator test mode (bypasses activation) |
enableFakeMode | Fake success responses (testing only) |
enableDebugMode | Extra debug logging |
Build Process Details
Phase 1: Repository Clone
[1/6] Cloning repository...
├─ Fetching from GitHub
├─ Checking out commit abc1234
└─ Initializing submodules
- Shallow clone for speed
- Submodules recursively initialized
- Specific commit used (for reproducibility)
Phase 2: CMake Configuration
[2/6] Configuring CMake...
├─ Detecting JUCE
├─ Configuring for macOS Universal
├─ Configuring for Windows x64
└─ Generating build files
Default CMake options:
CMAKE_BUILD_TYPE=Release
CMAKE_OSX_ARCHITECTURES="x86_64;arm64"
CMAKE_OSX_DEPLOYMENT_TARGET="10.13"Phase 3: Compilation
[3/6] Building...
├─ macOS Universal (parallel)
│ ├─ Compiling sources
│ ├─ Linking VST3
│ └─ Linking AU
└─ Windows x64 (parallel)
├─ Compiling sources
└─ Linking VST3
- Builds run in parallel across platforms
- Multi-core compilation within each platform
- Typical time: 3-10 minutes
Phase 4: Code Signing
[4/6] Signing...
├─ macOS: Signing with Developer ID
├─ macOS: Notarizing with Apple
└─ Windows: Authenticode signing
See Code Signing for details.
Phase 5: Artifact Upload
[5/6] Uploading artifacts...
├─ MyPlugin.vst3 (macOS) → R2
├─ MyPlugin.component → R2
└─ MyPlugin.vst3 (Windows) → R2
- Secure upload to Cloudflare R2
- SHA256 checksums calculated
- Download URLs generated
Phase 6: Cleanup
[6/6] Cleaning up...
├─ Removing source code
├─ Clearing build cache
└─ Build complete!
Your source code is never stored. It’s deleted immediately after the build.
Build Status
| Status | Description |
|---|---|
pending | Build created, waiting to start |
queued | Waiting for build runner |
running | Build in progress |
success | Build completed successfully |
failed | Build failed (check logs) |
cancelled | Build was cancelled |
Build Artifacts
Each successful build produces:
| Artifact | Platform | Description |
|---|---|---|
MyPlugin.vst3 | macOS | Signed, notarized VST3 bundle |
MyPlugin.component | macOS | Signed, notarized AU bundle |
MyPlugin.vst3 | Windows | Authenticode-signed VST3 |
build.log | All | Complete build log |
checksums.txt | All | SHA256 hashes for verification |
Downloading Artifacts
Via Creator Portal:
- Click Download on any artifact
- Or Download All for ZIP bundle
Via API:
curl -X GET "https://api.beatconnect.com/functions/v1/builds/{build_id}/download/{artifact_id}" \
-H "Authorization: Bearer YOUR_TOKEN" \
-L -o artifact.zipBuild Quotas
| Tier | Builds/Month | Extra Build Cost |
|---|---|---|
| Developer | 5 | $5 per build |
| Team | 20 | $4 per build |
| Enterprise | Unlimited | Contact sales |
Quota Rules
- Failed builds due to your code count against quota
- Failed builds due to our infrastructure don’t count
- Cancelled builds before compilation don’t count
- Quota resets on billing cycle
Checking Usage
curl "https://api.beatconnect.com/functions/v1/builds/usage" \
-H "Authorization: Bearer YOUR_TOKEN"Response:
{
"period": "2025-01",
"used": 3,
"limit": 5,
"remaining": 2,
"extra_builds": 0
}Build Configuration
CMake Variables
Override defaults in your CMakeLists.txt:
# Minimum macOS version
set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0" CACHE STRING "")
# Disable specific formats
set(JUCE_BUILD_AU OFF)
# Custom compiler flags
add_compile_options(-DPRODUCTION_BUILD=1)Build Presets (CMakePresets.json)
{
"version": 3,
"configurePresets": [
{
"name": "release",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_OSX_DEPLOYMENT_TARGET": "10.13"
}
}
]
}Parallel Builds
BeatConnect builds platforms in parallel:
┌─────────────────┐ ┌─────────────────┐
│ macOS Build │ │ Windows Build │
│ │ │ │
│ ┌───────────┐ │ │ ┌───────────┐ │
│ │ Configure │ │ │ │ Configure │ │
│ └─────┬─────┘ │ │ └─────┬─────┘ │
│ ▼ │ │ ▼ │
│ ┌───────────┐ │ │ ┌───────────┐ │
│ │ Build │ │ │ │ Build │ │
│ └─────┬─────┘ │ │ └─────┬─────┘ │
│ ▼ │ │ ▼ │
│ ┌───────────┐ │ │ ┌───────────┐ │
│ │ Sign │ │ │ │ Sign │ │
│ └───────────┘ │ │ └───────────┘ │
└────────┬────────┘ └────────┬────────┘
│ │
└───────────┬───────────┘
▼
┌─────────────┐
│ Upload │
└─────────────┘
Build Caching
We cache:
- CMake configuration
- Compiled object files (per-project)
- JUCE modules
This speeds up subsequent builds significantly.
Cache Invalidation
Cache is cleared when:
- CMakeLists.txt changes
- JUCE version changes
- You request a clean build
Request clean build:
{
"project_id": "...",
"clean_build": true
}Build Logs
Full logs available for debugging:
=== BeatConnect Build System ===
Build ID: build_abc123
Project: My Plugin
Version: 1.0.1
Platforms: macos, windows
Formats: vst3, au
[2025-01-15 10:30:00] Cloning repository...
[2025-01-15 10:30:05] Commit: abc1234 "Fixed buffer handling"
[2025-01-15 10:30:10] Configuring CMake for macOS...
[2025-01-15 10:30:15] Configuring CMake for Windows...
[2025-01-15 10:30:20] Building macOS targets...
...
Download logs:
- In Creator Portal: Build Details → Download Log
- Via API: Include
build.login artifact download