Dependencies for Building FluidVoice from Source: A Complete Guide
Building FluidVoice from source requires six external Swift packages—AppUpdater, FluidAudio, PromiseKit, DynamicNotchKit, SwiftWhisper, and PostHog—declared in the top-level 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 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. 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 (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, branchB/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, branchmain): Renders the animated "notch" UI element that visualizes speech activity. - SwiftWhisper (
exPHAT/SwiftWhisper, branchmaster): 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). 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:
# 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:
- Open
Fluid.xcodeprojlocated at the repository root. - Xcode automatically invokes SPM; allow it to download packages on first open.
- 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:
swift package update PromiseKit
swift build
To view the complete dependency tree including transitive dependencies:
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: The application entry point that wires together services depending onFluidAudio,PromiseKit, andPostHog.Sources/Fluid/Networking/AppleIntelligenceProvider.swift: Implements transcription logic usingFluidAudiofor audio capture andSwiftWhisperfor model inference.Sources/Fluid/UI/AISettingsView.swift: Provides user interface controls for enabling or disablingPostHoganalytics and other dependency-provided features.build.sh: A helper script at the repository root that orchestrates clean builds and app packaging, invokingswift buildinternally.
Summary
- FluidVoice requires six external Swift packages managed through SPM: AppUpdater, FluidAudio, PromiseKit, DynamicNotchKit, SwiftWhisper, and PostHog.
- All dependencies are declared in
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 resolveto fetch dependencies andswift buildto compile theFluidVoiceexecutable 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, 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 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. 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.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →