# FreeFlow: a free Mac dictation app that replaces Wispr Flow

> FreeFlow is an MIT-licensed Swift menu bar app that transcribes speech through your own Groq or OpenAI-compatible API key. It removes the subscription, but it also removes the vendor: you supply the key, the model and the timeouts.

**zachlatta/freeflow** — Free & fast alternative to Wispr Flow

- Repository: https://github.com/zachlatta/freeflow
- Website: https://freeflow.zachlatta.com
- Stars: 2,768 · Forks: 280
- Language: Swift
- License: MIT
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/zachlatta-freeflow

## What FreeFlow actually replaces

The README frames FreeFlow as a free and open source alternative to Wispr Flow, Superwhisper and Monologue. Those products sell the same loop: hold a key, speak, and get cleaned-up text in whatever field has focus. FreeFlow keeps the loop and drops the monthly subscription by making you bring the API key.

That trade is the whole product. There is no FreeFlow server, so the README states the app does not store or retain your data, and the only information leaving the machine is the API calls to the transcription and LLM providers you configure. Groq is the default provider, and the quick start tells you to get a free Groq API key from groq.com before anything works.

The audience is narrow and specific. It is a Mac app, distributed as a FreeFlow.dmg that the README says works on Apple Silicon and Intel. If you dictate into email, a terminal, a document editor or a chat window and you resent paying per month for it, this is aimed at you. If you work on Windows or Linux, it is not.

## How the dictation loop is wired

The interaction model is two shortcuts over one recording session. Hold Fn to talk, or tap Command-Fn to start and stop. The README describes a detail worth noting: if your toggle shortcut extends your hold shortcut, you can begin in hold mode and press the extra modifier keys to latch into tap mode without stopping the recording. That means the recording is not restarted when you change your mind about how long you want to speak.

After the audio stops, two network stages run. The first is transcription against your configured transcription backend. The second is cleanup: the raw transcript goes to an LLM with a system prompt, and the cleaned text is pasted into the current text field. The README's custom prompt shows the contract the model is held to, including the instruction to return only the cleaned transcript and to return exactly EMPTY when the transcription is empty.

Context-aware cleanup is the third input. FreeFlow can read nearby app context so names and terms are spelled correctly in email, terminals and docs, and custom vocabulary lets you list names, jargon and project-specific words that should survive cleanup. The prompt is explicit that context is only for correcting the spelling of words already spoken, never for inserting words the speaker did not say. The Makefile's test target lists AppContextService.swift and ModelConfiguration.swift among the production sources compiled into the test runner, which is consistent with context gathering and model configuration being separate, testable units rather than logic buried in the UI.

## Installing FreeFlow and dictating your first sentence

The README does not document a build-from-source path for end users. It points at the release DMG, so that is the route to follow. Download it from the releases page, open it, and move the app into Applications.

Before the app is useful you need a key. Create a free Groq API key at groq.com, then paste it into FreeFlow's settings. The README does not name the settings field, so expect to find it in the app rather than in a config file.

With the key in place, the default shortcuts work immediately. Hold Fn while you speak, release, and the cleaned text lands in the focused field. To latch instead of holding, tap Command-Fn to start and tap it again to stop.

If you are pointing FreeFlow at a local provider, the README says to set the API base URL and model IDs in settings, and to set the transcription API URL separately when the transcription backend uses a different endpoint from the LLM backend. Local models are often slower than hosted providers, especially on cold start, long recordings or busy hardware, so the README offers macOS defaults keys to raise the timeouts above the 20-second default:

```bash
defaults write com.zachlatta.freeflow transcription_timeout_seconds -float 120
defaults write com.zachlatta.freeflow post_processing_timeout_seconds -float 120
defaults write com.zachlatta.freeflow context_request_timeout_seconds -float 120
```

The three keys map to audio transcription requests, transcript cleanup and edit mode requests, and nearby app context requests respectively. Only positive values are used. To return to the 20-second default, delete the key you set:

```bash
defaults delete com.zachlatta.freeflow transcription_timeout_seconds
defaults delete com.zachlatta.freeflow post_processing_timeout_seconds
defaults delete com.zachlatta.freeflow context_request_timeout_seconds
```

One more feature is worth enabling early. Edit Mode lets you highlight existing text and transform it with a spoken instruction such as make this shorter or turn this into bullets. It is off until you enable it in settings, and the README offers a Manual mode that requires an extra modifier key so a normal dictation does not accidentally rewrite a selection.

## Where FreeFlow is the wrong tool

The dependency on an external provider is the main limitation, and it is structural rather than a bug. FreeFlow has no server, so it also has no fallback. If Groq is unreachable or your key is invalid, the app has nothing to transcribe with. The README does not document offline transcription or a bundled model.

Latency is the second constraint. The 20-second default timeout applies to transcription, post-processing and context requests separately. A local model that is slow on cold start can exceed that, and the fix is a defaults write rather than a setting in the UI. That is a real friction point for anyone who expects a graphical toggle.

Privacy deserves a precise reading. No FreeFlow server means the project does not retain your audio or transcripts. It does not mean nothing leaves your machine. Your audio goes to the transcription provider and your transcript goes to the LLM provider, and the README says exactly that. Choosing a local OpenAI-compatible server is the way to keep both stages on your hardware.

Finally, the README is thin on operational detail. It does not document rollback, it does not describe what happens when the paste target disappears mid-cleanup, and it does not give a from-source build procedure for users. The Makefile exists and defines targets including check, run, icon, dmg, codesign-dmg, notarize, test, typecheck and validate, but the README does not walk through them.

## How FreeFlow differs from Superwhisper and Monologue

Superwhisper and Monologue are named in the README as the products FreeFlow is inspired by. The difference is where the model runs and who pays for it. Those tools present themselves as finished products with their own accounts and billing. FreeFlow presents itself as a client: you configure an OpenAI-compatible provider, and the README's default is Groq.

That means the comparison is not really about transcription quality. It is about control over the pipeline. With FreeFlow you can point the LLM stage at Ollama, LM Studio or another OpenAI-compatible server, and you can split the transcription endpoint from the LLM endpoint. You can also replace the cleanup prompt entirely; the README includes a simpler post-processing prompt for people who want literal cleanup instead of context-aware rewriting, and it is pasted into the custom system prompt setting.

The cost of that control is setup. A hosted product asks you to install and sign in. FreeFlow asks you to install, obtain a Groq key, and understand that two separate network calls happen per dictation. If you would rather not think about providers at all, the hosted alternatives are the better fit, and that is a legitimate choice rather than a failure of FreeFlow.

## Maintenance, releases and the MIT licence

The repository is not archived. Its last push was on 2026-09-07, and the release history shows v1.2.0 on 2026-07-13, v1.2.1 on 2026-08-11, and a dev build tagged FreeFlow Dev ad5c827b5a32 on 2026-04-30. The README credits @marcbodea with maintaining the project, and the Makefile defaults APP_NAME to FreeFlow Dev with bundle identifier com.zachlatta.freeflow.dev, which is how a development build stays distinguishable from a release build when both are installed. The Makefile comment notes that dev builds get a distinct hammer-on-waveform icon for exactly that reason.

Upgrade cost is low in the ordinary case: the DMG is the distribution channel, and the README does not describe a migration step between versions. The settings you should expect to re-check after an upgrade are the provider configuration and any timeout overrides, because those live in macOS defaults under com.zachlatta.freeflow rather than in a checked-in config file.

The MIT licence is permissive and places few obligations on you. It does not, however, cover your API usage. Groq or whichever provider you configure has its own terms and its own data handling, and FreeFlow's no-server claim says nothing about what that provider does with the audio you send it. Read the provider's terms separately; this is not legal advice.

## Conclusion

Adopt FreeFlow if you dictate on a Mac, already have or are willing to create a Groq API key, and want the cleanup step to run against a model you choose rather than a vendor you pay monthly. Skip it if you need Windows or Linux, if you want a provider-managed account with no key handling, or if you expect the README to tell you how to build from source; it documents the DMG download and the runtime settings, not a from-scratch setup. Before committing, verify three things on your own machine: that the Fn hold-to-talk shortcut is not already claimed by another app, that your chosen transcription and LLM endpoints both speak the OpenAI-compatible shape FreeFlow expects, and that a local model answers inside the 20-second default timeout or that you have raised it with the defaults write commands. The repository's last push was on 2026-09-07, and the most recent tagged release is v1.2.1 from 2026-08-11.

## FAQ

### What is FreeFlow AI?

FreeFlow is a free Mac dictation app described in its README as an open source alternative to Wispr Flow, Superwhisper and Monologue. It transcribes your speech and runs a cleanup pass through an OpenAI-compatible provider, with Groq as the default.

### How do you use FreeFlow?

Download the FreeFlow.dmg, get a free Groq API key from groq.com, and then hold Fn to talk or tap Command-Fn to start and stop dictation. Whatever you say is pasted into the current text field.

### Does FreeFlow store my recordings?

The README states there is no FreeFlow server, so the project does not store or retain your data. It also states that API calls to your configured transcription and LLM provider are the only information that leaves your computer.

### Can FreeFlow run against a local model instead of Groq?

Yes. The README says you can configure the API base URL and model IDs for a local or self-hosted OpenAI-compatible provider such as Ollama or LM Studio, and set the transcription API URL separately if that backend uses a different endpoint.

### What are the FreeFlow timeout settings?

FreeFlow keeps a 20-second default network timeout. You can extend transcription, post-processing and context request timeouts with macOS defaults keys transcription_timeout_seconds, post_processing_timeout_seconds and context_request_timeout_seconds, and only positive values are used.

### What is FreeFlow's licence?

FreeFlow is licensed under the MIT license, according to the README and the LICENSE file in the repository root.

## Sources

- [License: MIT](https://github.com/zachlatta/freeflow/blob/main/LICENSE)
- [Project website](https://freeflow.zachlatta.com)
- [README](https://github.com/zachlatta/freeflow/blob/main/README.md)
- [Releases](https://github.com/zachlatta/freeflow/releases)
- [zachlatta/freeflow on GitHub](https://github.com/zachlatta/freeflow)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/zachlatta-freeflow
