# What Analytics Does FluidVoice Collect and How It Protects User Privacy

> FluidVoice collects anonymous usage metrics and hardware snapshots, protecting your privacy with an opt-in pipeline you control. Learn more about secure analytics.

- Repository: [ALTIC/FluidVoice](https://github.com/altic-dev/FluidVoice)
- Tags: privacy-policy
- Published: 2026-07-01

---

**FluidVoice collects only anonymous, low-cardinality usage metrics and hardware snapshots, while deliberately excluding user-generated content and personal identifiers through an opt-in/opt-out pipeline that can be disabled at any time in Settings.**

FluidVoice, an open-source transcription application developed by altic-dev/FluidVoice, implements a privacy-first approach to telemetry. Understanding what analytics FluidVoice collects and how it protects user privacy requires examining the lightweight analytics pipeline built into the Swift source code. The system is designed to gather aggregate usage statistics without compromising sensitive user data or transcription content.

## Anonymous Data Collection Only

### Event Properties and Hardware Metadata

Every analytics event captured by `AnalyticsService.shared.capture()` automatically includes generic attributes such as app version, build number, OS version, and CPU architecture. According to [`Sources/Fluid/Analytics/AnalyticsService.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/Analytics/AnalyticsService.swift) (lines 55-94), these **common event properties** also track user-controlled settings like AI processing status, streaming preview mode, and hot-key configuration.

Additionally, a static hardware snapshot capturing CPU family, chip model, and hardware model is gathered once at startup and attached to every event (lines 103-114). This data helps developers understand performance across different Apple Silicon and Intel architectures without identifying individual users.

### Anonymous Installation Identifier

Each installation receives a unique but **anonymous identifier** generated by `AnalyticsIdentityStore.shared.anonymousInstallID`. As implemented in [`Sources/Fluid/Analytics/AnalyticsIdentityStore.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/Analytics/AnalyticsIdentityStore.swift), this ID is strictly isolated from Apple ID, iCloud accounts, or any personal identifiers, ensuring pseudonymization of usage data while maintaining statistical accuracy.

## The Analytics Pipeline Architecture

### In-Memory Queue and Background Processing

The analytics service operates through an **in-memory queue** that drops oldest events when full and flushes batches in the background. According to [`Sources/Fluid/Analytics/AnalyticsService.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/Analytics/AnalyticsService.swift) (lines 4-8), the system uses fire-and-forget network requests to ensure the UI thread never blocks during transmission, maintaining app responsiveness during analytics uploads.

### PostHog Integration and Data Transmission

When analytics is enabled, events serialize as JSON and POST to a configurable PostHog endpoint. If disabled, the queue clears immediately and no network traffic occurs (lines 18-30, 95-102). This **opt-out mechanism** ensures zero data leakage when users disable tracking, as pending events are discarded rather than transmitted.

## User Privacy Controls

### Settings and Default Behavior

The "Share Anonymous Analytics" toggle resides in [`Sources/Fluid/Persistence/SettingsStore.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/Persistence/SettingsStore.swift) (lines 1274-1275) and defaults to **ON**. This design ensures existing installations upgrading to analytics-enabled versions do not silently opt-out, maintaining statistical continuity while respecting user choice through explicit visibility.

### Consent Change Handling

When users toggle analytics off, the app immediately records an `analytics_consent_changed` event and drops any pending events from the queue. This implementation in [`Sources/Fluid/UI/SettingsView.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/UI/SettingsView.swift) (line 1873) guarantees **immediate cessation** of data transmission upon opt-out, with no residual data lingering in memory.

### Transparency in the UI

The [`AnalyticsPrivacyView.swift`](https://github.com/altic-dev/FluidVoice/blob/main/AnalyticsPrivacyView.swift) (lines 13-50) provides clear documentation within the Settings screen, explaining that only anonymous usage metrics are transmitted. The UI emphasizes that transcription content, personal files, and identity information remain strictly private and that analytics collection can be disabled at any time without affecting app functionality.

## Code Examples

```swift
// Toggle analytics collection
AnalyticsService.shared.setEnabled(true)   // or false to disable

// Capture a generic event with custom properties
AnalyticsService.shared.capture(.transcriptionCompleted,
                                properties: ["duration_ms": 1234])

// Automatic properties attached to every event include:
// "app_version", "os_version", "hardware_arch_family", "cpu_family"

```

## Summary

- FluidVoice collects only **low-cardinality, anonymous usage data** (app opens, transcription completions, settings toggles) and hardware metadata, explicitly excluding transcription text or personal identifiers.
- The analytics pipeline uses an **in-memory queue** with background flushing and fire-and-forget requests to prevent UI blocking.
- An **anonymous install ID** provides pseudonymization without linking to Apple IDs or personal accounts.
- Users maintain **full control** through a Settings toggle that defaults to ON but can be disabled instantly, immediately clearing pending events and stopping all network transmission.
- The open-source implementation in `altic-dev/FluidVoice` ensures transparency about exactly what data leaves the device.

## Frequently Asked Questions

### Does FluidVoice collect my transcription text?

No. The analytics system deliberately excludes all user-generated content. According to the source code in [`Sources/Fluid/Analytics/AnalyticsService.swift`](https://github.com/altic-dev/FluidVoice/blob/main/Sources/Fluid/Analytics/AnalyticsService.swift), only predefined events like `transcriptionCompleted` are logged, containing metadata such as duration in milliseconds, never the actual transcribed text or audio samples.

### What is the anonymous install ID?

The anonymous install ID is a unique identifier generated per installation by [`AnalyticsIdentityStore.swift`](https://github.com/altic-dev/FluidVoice/blob/main/AnalyticsIdentityStore.swift). It enables understanding of user journeys and session counts without revealing personal identity. This ID is randomly generated on first launch and is never linked to your Apple ID, email, or any other personally identifying information.

### Can I completely disable analytics?

Yes. Navigate to Settings and toggle "Share Anonymous Analytics" to OFF. Upon disabling, FluidVoice immediately records an `analytics_consent_changed` event, drops all pending queued events from memory, and ceases all network transmission to the analytics endpoint. The change takes effect instantly without requiring an app restart.

### Where is the analytics data sent?

By default, events POST to a configurable PostHog endpoint as JSON payloads. The endpoint URL is configurable within the app settings, and when analytics is disabled, no network requests are generated and the in-memory queue is cleared, ensuring no residual data transmission occurs.