# Release Cycle for FluidVoice: How Feature-Driven Updates Work

> Discover FluidVoice's feature-driven release cycle. Learn how semantic-versioned Git tags automate updates via GitHub Actions for timely new versions.

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

---

**The release cycle for FluidVoice is feature-driven rather than calendar-based, with new versions published when maintainers push semantic-versioned Git tags that trigger an automated GitHub Actions pipeline.**

The open-source voice application FluidVoice (altic-dev/FluidVoice) does not adhere to a rigid time-based schedule. Instead, the project employs a flexible release cycle for FluidVoice that prioritizes code stability and meaningful updates, publishing new versions only when defined sets of features, bug fixes, or enhancements are deemed ready by the maintainers.

## How the Release Cycle for FluidVoice Works

FluidVoice operates on a **feature-driven release model** that eschews fixed deadlines in favor of code quality. New versions are published when the maintainers determine that a coherent set of enhancements is production-ready, rather than on a predetermined calendar date.

Each release is tagged in the Git repository and distributed as a GitHub Release. The **"latest release" badge** displayed in the repository's [`README.md`](https://github.com/altic-dev/FluidVoice/blob/main/README.md) (lines 17-19) automatically points to the most recent published tag, providing users with immediate visibility into the current stable version.

### Tag-Based Deployment Triggers

Releases are triggered exclusively through **Git tag pushes**. When maintainers create and push a semantic-versioned tag (e.g., `v1.6.0`), the repository's continuous integration system detects the event and initiates the build and publication workflow. This approach ensures that every release is explicitly versioned and traceable to a specific point in the codebase.

## Continuous Integration Pipeline

The project utilizes a **GitHub Actions workflow** defined in [`.github/workflows/build.yml`](https://github.com/altic-dev/FluidVoice/blob/main/.github/workflows/build.yml) (lines 1-30) to automate the build and release process. This CI pipeline executes on every push to the `main` branch and on every tag creation event.

When a release tag is pushed, the workflow automatically builds the application and publishes the resulting artifact to the GitHub Releases page. This **continuous-integration driven** approach eliminates manual build steps and ensures that release artifacts are generated consistently from the tagged source code.

## Beta Channel and Pre-Release Access

For users seeking early access to upcoming features, FluidVoice provides an **optional beta channel**. This feature is exposed within the application through Settings → Automatic Updates, as documented in [`README.md`](https://github.com/altic-dev/FluidVoice/blob/main/README.md) (lines 31-33).

Enabling the beta channel subscribes the app to **pre-release tags** published on GitHub. This allows testers to receive new builds before they are promoted to stable status, facilitating community testing and feedback collection without disrupting the main user base.

## Versioning and Build Configuration

The project maintains version consistency through multiple configuration files. The [`Package.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Package.swift) file declares the Swift package dependencies and versioning metadata used during the build process, while `Fluid.xcodeproj/project.pbxproj` defines the Xcode project settings that produce the final distributable app bundle.

These configuration files ensure that every release artifact—whether generated locally or through CI—maintains the correct semantic version and build parameters defined by the release tag.

## Practical Implementation Examples

### Fetching the Latest Release via GitHub API

You can programmatically check the latest stable version using Swift:

```swift
import Foundation

let url = URL(string: "https://api.github.com/repos/altic-dev/FluidVoice/releases/latest")!
let task = URLSession.shared.dataTask(with: url) { data, _, error in
    guard let data = data, error == nil,
          let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
          let tag = json["tag_name"] as? String,
          let url = json["html_url"] as? String else {
        print("Unable to fetch release info")
        return
    }
    print("Latest Fluid Voice version: \(tag)")
    print("Release page: \(url)")
}
task.resume()

```

### Enabling Beta Updates in SwiftUI

The following SwiftUI implementation demonstrates how the beta channel toggle is structured within the app's settings:

```swift
import SwiftUI

struct SettingsView: View {
    @AppStorage("betaUpdatesEnabled") private var betaUpdates = false

    var body: some View {
        Toggle("Beta Releases", isOn: $betaUpdates)
            .help("Receive pre‑release builds when they are published")
    }
}

```

### Building from Source Locally

To build the project locally using the CI-provided script:

```bash

# Clone the repo

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

# Build using the project's helper script (runs SwiftPM & Xcode build)

./build.sh

```

## Summary

- **Feature-driven releases**: FluidVoice publishes versions when enhancements are ready, not on fixed dates.
- **Tag-triggered deployments**: Pushing semantic-versioned Git tags (e.g., `v1.6.0`) initiates the release process.
- **Automated CI/CD**: The [`.github/workflows/build.yml`](https://github.com/altic-dev/FluidVoice/blob/main/.github/workflows/build.yml) pipeline handles building and publishing automatically.
- **Beta channel**: Users can opt into pre-release builds via Settings → Automatic Updates, as documented in [`README.md`](https://github.com/altic-dev/FluidVoice/blob/main/README.md).
- **Semantic versioning**: [`Package.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Package.swift) and Xcode project files ensure consistent versioning across build artifacts.

## Frequently Asked Questions

### Does FluidVoice follow a fixed release cycle?

No, FluidVoice does not follow a rigid calendar-based release schedule. According to the source code, new versions are published when the maintainers determine that a set of features, bug fixes, or enhancements are ready for production, rather than on predetermined intervals.

### How do I access beta versions of FluidVoice?

Users can enable the optional beta channel through **Settings → Automatic Updates** within the application. This setting, documented in the repository's [`README.md`](https://github.com/altic-dev/FluidVoice/blob/main/README.md), subscribes the app to pre-release tags on GitHub, allowing you to receive new builds before they reach stable status.

### What triggers a new release in the FluidVoice repository?

New releases are triggered when maintainers push a **semantic-versioned Git tag** (e.g., `v1.6.0`) to the repository. This action initiates the GitHub Actions workflow defined in [`.github/workflows/build.yml`](https://github.com/altic-dev/FluidVoice/blob/main/.github/workflows/build.yml), which automatically builds the application and publishes the release artifact to GitHub Releases.

### Where can I find the latest stable version of FluidVoice?

The latest stable release is indicated by the **"latest release" badge** in the [`README.md`](https://github.com/altic-dev/FluidVoice/blob/main/README.md) file, which links directly to the most recent published tag. You can also query the GitHub API endpoint `https://api.github.com/repos/altic-dev/FluidVoice/releases/latest` programmatically to retrieve current version information.