# Dependencies for Building FluidVoice from Source: A Complete Guide

> Discover the essential dependencies for building FluidVoice from source. This guide details the six external Swift packages needed for macOS 15+ development with Swift Package Manager.

- Repository: [ALTIC/FluidVoice](https://github.com/altic-dev/FluidVoice)
- Tags: how-to-guide
- Published: 2026-06-30

---

**Building FluidVoice from source requires six external Swift packages—AppUpdater, FluidAudio, PromiseKit, DynamicNotchKit, SwiftWhisper, and PostHog—declared in the top-level [`Package.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Package.swift) and resolved automatically by Swift Package Manager for macOS 15+ development.**

FluidVoice is a Swift 5.9 application targeting macOS 15 and later. All **dependencies for building FluidVoice from source** are managed through Swift Package Manager (SPM) and declared in the repository's [`Package.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Package.swift) file, which SPM reads to fetch, compile, and link the required libraries into the final executable.

## System Requirements and Build Tools

Before resolving dependencies, ensure your development environment meets the baseline requirements defined in [`Package.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Package.swift). The `platforms` clause explicitly restricts builds to **macOS 15 or later** (see lines 8-10). You need **Xcode 15** or newer with Swift 5.9 toolchain support, along with a working internet connection for the initial package resolution.

## External Dependencies Declared in Package.swift

According to the `FluidVoice` source code, six external packages are declared as dependencies in [`Package.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Package.swift) (lines 11-18). Each serves a specific architectural purpose:

- **AppUpdater** (`mxcl/AppUpdater`, v1.0.0+): Handles automatic update checks and downloading of new releases.
- **FluidAudio** (`altic-dev/FluidAudio`, branch `B/cohere-coreml-asr`): Provides low-latency audio capture and Core ML-based automatic speech recognition (ASR).
- **PromiseKit** (`mxcl/PromiseKit`, v6.0.0+): Supplies a modern promise-based API for chaining asynchronous operations throughout the networking and audio pipelines.
- **DynamicNotchKit** (`altic-dev/DynamicNotchKit`, branch `main`): Renders the animated "notch" UI element that visualizes speech activity.
- **SwiftWhisper** (`exPHAT/SwiftWhisper`, branch `master`): A Swift wrapper around OpenAI's Whisper model, offering optional offline transcription capabilities.
- **PostHog** (`PostHog/posthog-ios`, v3.0.0+): Telemetry and analytics SDK that records usage events with privacy-preserving defaults.

Several dependencies point to specific Git branches rather than tagged releases, meaning SPM will clone the latest commit from those branches during the first build.

## How Swift Package Manager Resolves Dependencies

When you run `swift build` or open `Fluid.xcodeproj` in Xcode, SPM automatically processes the dependency graph defined in the `FluidVoice` target (lines 20-30 of [`Package.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Package.swift)). The manager clones each repository at the specified version or branch, resolves any transitive dependencies, and links the compiled modules into the executable.

Because branch-based dependencies (`FluidAudio`, `DynamicNotchKit`, `SwiftWhisper`) track moving targets, SPM requires internet connectivity for the initial resolution. Subsequent builds reuse locally cached copies stored in the `.build` directory.

## Build Instructions

### Command Line Build

To compile the project after cloning:

```bash

# Clone the repository

git clone https://github.com/altic-dev/FluidVoice.git
cd FluidVoice

# Resolve and fetch all Swift packages

swift package resolve

# Build the executable (debug configuration)

swift build -c debug

# Run the built app

swift run FluidVoice

```

The `swift package resolve` command downloads all six external dependencies and their sub-dependencies before compilation begins.

### Xcode Build

For IDE-based development:

1. Open `Fluid.xcodeproj` located at the repository root.
2. Xcode automatically invokes SPM; allow it to download packages on first open.
3. Select the **FluidVoice** scheme and press **⌘ R** to build and run.

Xcode integrates SPM output directly into the build log, showing dependency resolution status alongside compilation errors.

## Managing Dependency Updates

To update a specific package (for example, PromiseKit) to its latest compatible version:

```bash
swift package update PromiseKit
swift build

```

To view the complete dependency tree including transitive dependencies:

```bash
swift package show-dependencies

```

This outputs a hierarchical view of how `FluidAudio`, `SwiftWhisper`, and other packages depend on lower-level Swift libraries.

## Key Source Files Consuming Dependencies

Several files in the `Sources/Fluid` directory import and utilize these packages:

- **[`Sources/Fluid/fluidApp.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/fluidApp.swift)**: The application entry point that wires together services depending on `FluidAudio`, `PromiseKit`, and `PostHog`.
- **[`Sources/Fluid/Networking/AppleIntelligenceProvider.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/Networking/AppleIntelligenceProvider.swift)**: Implements transcription logic using `FluidAudio` for audio capture and `SwiftWhisper` for model inference.
- **[`Sources/Fluid/UI/AISettingsView.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/UI/AISettingsView.swift)**: Provides user interface controls for enabling or disabling `PostHog` analytics and other dependency-provided features.
- **[`build.sh`](https://github.com/altic-dev/FluidVoice/blob/main/build.sh)**: A helper script at the repository root that orchestrates clean builds and app packaging, invoking `swift build` internally.

## Summary

- **FluidVoice** requires six external Swift packages managed through SPM: AppUpdater, FluidAudio, PromiseKit, DynamicNotchKit, SwiftWhisper, and PostHog.
- All dependencies are declared in [`Package.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Package.swift) (lines 11-18) with specific version or branch constraints.
- The build targets **macOS 15+** exclusively, as defined in the platforms clause (lines 8-10).
- Initial builds require internet access to clone branch-based dependencies; cached copies speed up subsequent compiles.
- Use `swift package resolve` to fetch dependencies and `swift build` to compile the `FluidVoice` executable target (lines 20-30).

## Frequently Asked Questions

### Do I need to manually download dependencies before building FluidVoice?

No. Swift Package Manager handles all dependency resolution automatically when you run `swift package resolve` or open the project in Xcode. SPM clones the repositories defined in [`Package.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Package.swift), including branch-based dependencies like `FluidAudio` and `SwiftWhisper`, without manual intervention.

### Can I build FluidVoice on macOS versions earlier than 15?

No. The [`Package.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Package.swift) file explicitly sets the platform requirement to macOS 15 or later (lines 8-10). Attempting to build on earlier versions will result in a platform incompatibility error from the Swift compiler.

### How do I update a specific dependency to the latest version?

Run `swift package update [PackageName]` followed by `swift build`. For example, `swift package update PromiseKit` fetches the latest v6.x release while respecting the version constraint defined in [`Package.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Package.swift). Use `swift package show-dependencies` to verify current versions.

### Why do some dependencies use specific branches instead of version tags?

The `FluidVoice` project tracks active development branches for `FluidAudio` (`B/cohere-coreml-asr`), `DynamicNotchKit` (`main`), and `SwiftWhisper` (`master`) to incorporate bleeding-edge features and bug fixes not yet available in tagged releases. This approach requires an internet connection for the initial build but ensures access to the latest Core ML optimizations and UI enhancements.