OpenFlow

Dictation that floats over your keyboard.

Open source, offline first, provider neutral. Tap or hold the bubble, speak, and cleaned text lands where your cursor already is — in whatever app you happen to be using.

Pre-alpha Nothing to install yet.

Every claim, and the limit it cannot cross.

Six of them. Each sets the promise against what it does not do, in a different typeface — the same rule the app’s permission screen follows.

  • Works with no network.

    The default engine, sherpa-onnx, runs on the device. A cloud adapter would not.

  • No account, ever.

    None in V1. A sync provider would need one.

  • Nothing leaves the device.

    Every dictation records which provider answered, how long it took, and whether anything left the device.

  • Open source.

    Apache-2.0 covers the app. The ~45 MB speech model ships under its own licence.

  • Inserts text anywhere.

    Not into secure fields. It refuses before it opens the microphone.

  • Your history is yours.

    Export it as JSON, or delete all of it, from Settings → Privacy.

It tells you which engine answered.

Most dictation apps hide the speech engine. OpenFlow picks one from a fixed, ordered set of rules and writes down what it decided — including when the answer was nothing.

RoutingDecision the rules are the ADR’s; this combination is illustrative
request     en-US · offline · privacyMode local-only

candidates  sherpa-onnx … en-20M   local   MODEL_MISSING
            cloud-whisper            cloud   HEALTHY

chosen      none
blockedBy   rule 2

rejected    cloud-whisper           rule 2   privacyMode is local-only
            sherpa-onnx … en-20M  rule 5   MODEL_MISSING

An empty candidate set is still a decision. Without one, the honest answer collapses into “no provider available” — when the truth might be no speech model installed, nothing allowed offline, or over your cost ceiling. Three failures, three completely different fixes.

From docs/adr/0004-adaptive-dictation-router.md

Where it is.

The contracts are written and locked: the speech provider interface, the dictation state machine, the router, the refiner, the privacy rules, and the text-insertion strategy. The Android app does not exist yet.

Written down

Six architecture decision records and seventeen documents, all checked in CI for links that do not resolve and files nobody wrote. The glossary defines every term the project uses.

How it works

Not built

No Gradle project, no APK, no signing config. Before a release can claim to ship, it has to pass an acceptance gate on three device classes across ten text-entry scenarios — and the person building it has one phone.

Get involved