https://github.com/0xlau/openbroca
An open-source, system-wide voice interface for the AI era — dictate into any app, then transcribe, rewrite, and transform with pluggable local or cloud ASR & LLM providers.
https://github.com/0xlau/openbroca
ai asr cross-platform desktop-app dictation electron llm local-first monorepo open-source pnpm react speech-to-text tailwindcss transcription trpc turborepo typescript voice-input voice-interface
Last synced: 4 days ago
JSON representation
An open-source, system-wide voice interface for the AI era — dictate into any app, then transcribe, rewrite, and transform with pluggable local or cloud ASR & LLM providers.
- Host: GitHub
- URL: https://github.com/0xlau/openbroca
- Owner: 0xlau
- License: mit
- Created: 2026-05-02T05:43:28.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2026-05-20T18:45:22.000Z (12 days ago)
- Last Synced: 2026-05-20T22:09:34.297Z (11 days ago)
- Topics: ai, asr, cross-platform, desktop-app, dictation, electron, llm, local-first, monorepo, open-source, pnpm, react, speech-to-text, tailwindcss, transcription, trpc, turborepo, typescript, voice-input, voice-interface
- Language: TypeScript
- Homepage:
- Size: 3.84 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
- Roadmap: docs/ROADMAP.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
An open-source voice interface for the AI era.
It turns speech into text, intent into action, and your voice into a system-wide input layer.
Explore the docs »
Download
·
Report Bug
·
Request Feature
[](https://github.com/0xlau/openbroca/graphs/contributors)
[](https://github.com/0xlau/openbroca/network/members)
[](https://github.com/0xlau/openbroca/stargazers)
[](https://github.com/0xlau/openbroca/issues)
[](LICENSE)
[](https://github.com/0xlau/openbroca/actions/workflows/ci.yml)
[](https://github.com/0xlau/openbroca/actions/workflows/release.yml)
[](https://github.com/0xlau/openbroca/releases/latest)
[](https://www.typescriptlang.org/)
[](https://www.electronjs.org/)
[](https://pnpm.io/)
## Table Of Contents
1. [About The Project](#about-the-project)
- [Why OpenBroca](#why-openbroca)
- [What OpenBroca Does](#what-openbroca-does)
- [The Idea](#the-idea)
- [Built With](#built-with)
- [Status](#status)
2. [Getting Started](#getting-started)
- [Prerequisites](#prerequisites)
- [Installation](#installation)
3. [Usage](#usage)
4. [Project Structure](#project-structure)
5. [Architecture](#architecture)
6. [Roadmap](#roadmap)
7. [Releasing](#releasing)
8. [Security](#security)
9. [Contributing](#contributing)
10. [License](#license)
11. [Contact](#contact)
12. [Acknowledgments](#acknowledgments)
## About The Project
OpenBroca is an open-source voice interface for the AI era.
Computers should hear you before they read your mind. OpenBroca is built around that simple belief: voice should be a first-class input layer for computers, not a narrow dictation box locked to one vendor, one model, or one workflow.
It started from a personal itch. Tools like Typeless show how delightful desktop dictation can be, but I kept running into places where the behavior I wanted was not customizable. OpenBroca is my attempt to solve that problem for myself first, in the open, with the hope that the same flexibility can help other people shape voice input around their own workflows too.
OpenBroca captures audio locally, routes transcription and LLM work through provider registries, and delivers the final text back into the desktop context where you were working. The app is built with Electron, React, TypeScript, tRPC over IPC, and a provider-first monorepo architecture.
Product screenshots and demo media will be added as the first public release stabilizes.
### Why OpenBroca
Keyboards were built for typewriters. They were never designed for how humans actually think.
We think in language.
We speak in flow.
We edit by intention.
OpenBroca exists to make voice a first-class interface for computers:
- Speak naturally, then let OpenBroca transcribe, clean up, and deliver text where you need it.
- Use local or cloud ASR providers through one shared provider contract.
- Connect LLM providers through a registry that supports model selection, provider settings, and middleware.
- Keep provider credentials in OS-backed secure storage.
- Build desktop-first automation without coupling the app to one vendor or hosted backend.
### What OpenBroca Does
- Dictate into any focused app.
- Use cloud or local ASR providers.
- Rewrite, polish, and transform text with LLM providers.
- Switch between providers and models.
- Build custom voice workflows.
- Extend the system with open provider interfaces.
### The Idea
The future interface will not be the keyboard.
Maybe it is voice.
Maybe it is brain-computer interfaces.
Maybe voice is only the bridge.
OpenBroca is building that bridge.
### Built With
- [Electron](https://www.electronjs.org/)
- [React](https://react.dev/)
- [TypeScript](https://www.typescriptlang.org/)
- [electron-vite](https://electron-vite.org/)
- [tRPC](https://trpc.io/)
- [TanStack Query](https://tanstack.com/query)
- [Zustand](https://zustand-demo.pmnd.rs/)
- [Tailwind CSS](https://tailwindcss.com/)
- [Turborepo](https://turbo.build/repo)
- [pnpm](https://pnpm.io/)
- [Vitest](https://vitest.dev/)
- [electron-builder](https://www.electron.build/)
- [release-please](https://github.com/googleapis/release-please)
### Status
OpenBroca is pre-1.0 software. The repository is active, usable for development, and currently focused on desktop dictation, provider architecture, ASR provider support, LLM provider support, system-wide text insertion, and local-first voice workflows.
Expect provider contracts, desktop UX details, and release packaging to keep moving while the project matures.
## Getting Started
You can use OpenBroca as a packaged desktop app or run it from source for development.
### Prerequisites
- [Node.js](https://nodejs.org/) 22 or newer
- [pnpm](https://pnpm.io/) 10.32.1 or newer
- macOS, Windows, or Linux for local development
- Platform build tools required by native Electron dependencies such as `keytar`, `uiohook-napi`, and `audify`
Install pnpm if you do not already have it:
```bash
corepack enable
corepack prepare pnpm@10.32.1 --activate
```
### Installation
#### Download A Release
Download the latest installer from the [Releases page](https://github.com/0xlau/openbroca/releases/latest).
Current release targets:
- macOS Apple Silicon and Intel: `.dmg`
- Windows x64: `.exe`
macOS and Windows builds may be unsigned while the project is early. Your operating system may show the usual unknown publisher warning.
#### Run From Source
1. Clone the repository:
```bash
git clone https://github.com/0xlau/openbroca.git
cd openbroca
```
2. Install dependencies:
```bash
pnpm install
```
3. Start the desktop app:
```bash
pnpm dev
```
4. Run the main quality checks:
```bash
pnpm check
pnpm test
```
5. Build the app:
```bash
pnpm build
```
6. Create desktop bundles:
```bash
pnpm bundle:mac
pnpm bundle:win
pnpm bundle:linux
```
## Usage
1. Launch OpenBroca.
2. Complete the desktop permission onboarding for microphone access and platform-specific text delivery.
3. Select a microphone from the sidebar or tray menu.
4. Configure ASR and LLM providers in the app.
5. Use the configured shortcut to start dictation, then speak naturally.
6. Let OpenBroca transcribe, rewrite, polish, transform, and deliver the result to your active app or clipboard fallback.
Default shortcuts and provider setup may change before the 1.0 release. See [docs/PRIVACY.md](docs/PRIVACY.md) for data-handling notes and [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for how the desktop processes fit together.
## Project Structure
```text
apps/
desktop/ Electron + React desktop app
packages/
app-identity/ Cross-platform active app/window identification
audio-capture/ Audio capture primitives
providers/ ASR/LLM provider contracts, registries, implementations
ui/ Shared React component library
eslint-config/ Shared ESLint config
tailwind-config/ Shared Tailwind CSS base
typescript-config/ Shared TypeScript configs
docs/
ARCHITECTURE.md System overview
PRIVACY.md Data and credential handling notes
RELEASING.md Release process
ROADMAP.md Current direction
```
Common workspace commands:
```bash
pnpm dev
pnpm build
pnpm lint
pnpm typecheck
pnpm test
pnpm format
```
Target a specific package:
```bash
pnpm --filter openbroca-desktop dev
pnpm --filter @openbroca/providers test
pnpm --filter @openbroca/ui typecheck
```
## Architecture
The desktop app uses Electron's main, preload, and renderer processes under `apps/desktop/src`.
Renderer-to-main communication goes through tRPC over a custom Electron IPC transport rather than HTTP:
```text
Renderer
-> tRPC client
-> preload contextBridge
-> ipcMain handler
-> main-process tRPC router
```
The provider platform lives in `packages/providers` and is consumed directly as TypeScript source by the desktop app.
- LLM providers implement `LLMProvider` and register descriptors with `LLMProviderRegistry`.
- ASR providers implement `ASRProvider`, `StreamingASRProvider`, or `LocalASRProvider`.
- Provider configuration uses a minimal `ConfigSchema` interface, so Zod or any compatible parser can be used.
- LLM middleware can wrap provider completion for cross-cutting behavior.
Read the full system overview in [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).
## Roadmap
- [ ] Stabilize desktop dictation.
- [ ] Harden system-wide text insertion.
- [ ] Expand ASR provider support.
- [ ] Expand LLM provider support.
- [ ] Improve local-first voice workflows.
- [ ] Improve local ASR model management.
- [ ] Add richer update and release verification.
- [ ] Publish polished screenshots and demo media.
- [ ] Document provider authoring in more depth.
See [docs/ROADMAP.md](docs/ROADMAP.md) and the [open issues](https://github.com/0xlau/openbroca/issues) for proposed features and known issues.
## Releasing
OpenBroca uses [release-please](https://github.com/googleapis/release-please) to manage version bumps, changelog entries, tags, and GitHub Releases from Conventional Commits.
The release workflow builds macOS and Windows installers, uploads them to GitHub Releases, and publishes update metadata for `electron-updater`.
Read the release checklist in [docs/RELEASING.md](docs/RELEASING.md).
## Security
Do not commit API keys, model provider credentials, local `.env` files, desktop build artifacts, or agent-local state. The repository is configured to ignore common local and secret-bearing files.
Before opening a PR, run a local secret scan:
```bash
trufflehog git file://$(pwd) --no-update
trufflehog filesystem . --no-update --force-skip-binaries --force-skip-archives
```
If you discover a vulnerability, please follow [SECURITY.md](SECURITY.md) and report it privately.
## Contributing
Contributions are welcome, especially provider integrations, cross-platform desktop reliability improvements, accessibility fixes, and focused tests.
1. Fork the project.
2. Create your feature branch:
```bash
git checkout -b feat/amazing-feature
```
3. Commit your changes using Conventional Commits:
```bash
git commit -m "feat: add amazing feature"
```
4. Push to the branch:
```bash
git push origin feat/amazing-feature
```
5. Open a pull request.
Please read [CONTRIBUTING.md](CONTRIBUTING.md) and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) before opening issues or pull requests.
### Top Contributors
## License
Distributed under the MIT License. See [LICENSE](LICENSE) for more information.
## Contact
Project maintainer: [Timothy Lau](https://github.com/0xlau)
Project link: [https://github.com/0xlau/openbroca](https://github.com/0xlau/openbroca)
For bugs and feature requests, use [GitHub Issues](https://github.com/0xlau/openbroca/issues/new/choose).
## Acknowledgments
- [Best-README-Template](https://github.com/othneildrew/Best-README-Template) for the README structure.
- [Electron](https://www.electronjs.org/) and [electron-builder](https://www.electron.build/) for desktop packaging.
- [Turborepo](https://turbo.build/repo) and [pnpm](https://pnpm.io/) for monorepo tooling.
- [release-please](https://github.com/googleapis/release-please) for release automation.
- Everyone who files issues, tests builds, improves providers, and helps make OpenBroca calmer and more useful.