AI You Control: Choose your models. Own your data. Eliminate vendor lock-in.
Thunderbolt is an open-source, cross-platform AI client that can be deployed on-prem anywhere.
- π Available on all major desktop and mobile platforms: web, iOS, Android, Mac, Linux, and Windows.
- π§ Compatible with frontier, local, and on-prem models.
- π Enterprise features, support, and FDEs available.
make doctor # verify your tools β prints exact install commands for anything missing
make setup # install frontend + backend dependencies, wire up agent symlinks
make up # start Postgres + PowerSync in Docker
make run # start the backend (:8000) and frontend (:1420)For self-hosting with Docker Compose, Kubernetes, or Pulumi on AWS, see docs/self-hosting/. For full dev-environment details, see docs/internals/development/quick-start.md.
Found a bug? Have an idea?
- We're actively working on our docs, community, and roadmap. For now, the best way to get in touch is to File an issue.
We welcome contributions from everyone.
- Getting set up: the devel 8000 opment guide gets the backend, sync service, and frontend running locally.
- Conventions: AGENTS.md documents the code style and architecture invariants this repository is held to β TypeScript and React rules,
useEffectdiscipline, localization, responsive sizing, the app-version gate, reconciled defaults. It is written for coding agents, but it is the same reference human reviewers use. - Further development, tooling, and architecture docs are listed under Documentation below.
- Make sure to check out the Mozilla Community Participation Guidelines.
Everything under docs/ is also published at thunderbolt.io/docs.
- Introduction β what Thunderbolt is, and who it is for today
- FAQ β funding, the relationship to Thunderbird, model support, data handling
- Customize β the extension points: agents, models, skills, projects, widgets, MCP servers, auth providers
- CLI β
thunderbolt, the single-binary terminal coding agent, and the ACP/MCP bridge that connects it to the app - Telemetry β what is collected, and how to turn it off
Features:
- Projects β a workspace whose instructions every chat inside it inherits
- Skills β reusable instruction bundles invoked with
/slugor loaded by the model - Widgets β interactive components the model embeds in a response
- HTML Artifacts β model-authored pages rendered in a sandboxed iframe
- Attachments β files on a chat turn, and why the bytes are never stored server-side
- Voice Mode β spoken conversation through the same send path as typing
- Search and the Command Palette β
Cmd/Ctrl+Kover chats, messages and settings - MCP Connections β adding Model Context Protocol servers
- ACP Agents β handing a thread to an external coding agent over WebSocket or iroh
- WebView β opening links in the app's side panel (desktop and mobile)
- Multi-Device Sync and End-to-End Encryption β local-first SQLite, opt-in sync, opt-in E2EE
- Export Format β the JSON snapshot behind Settings β Preferences β Export My Data
- Overview β the three deployment targets and the stack they share
- Configuration β every backend environment variable
- Docker Compose β single-host stack, for demos and evaluation
- Kubernetes β manifests and ConfigMaps synthesized from
deploy/config/ - Pulumi (AWS) β ECS Fargate or EKS via infrastructure-as-code
- Deployment assets β the Dockerfiles, realm and sync-rule configs all three targets build on
- Authentication β the four flows that mint a session, plus OIDC, SAML and personal access tokens
- Rate limiting β the Postgres-backed limiter in front of the routes that cost money
- Self-hosting the iroh relay β for the peer-to-peer CLIβapp bridge
- Quick Start β prerequisites, bootstrap, and the local service layout
- AGENTS.md β code style and architecture invariants (see Contributing above)
- Frontend Structure β where a new file goes in
src/, and theui/conventions - Error Handling β optimistic code, and the few places that legitimately catch
- Testing and Backend Testing β
bun testscopes, PGlite, and what not to run at the repo root - Mobile Setup β iOS and Android Tauri dev
- Integrations β adding a third-party account the model can act on
- CI and Preview Environments β the workflows a pull request starts
- AI Code Review β the automated review every non-draft PR receives
- Storybook, Vite Bundle Analyzer, Local CDN for app updates, Tauri Signing Keys
- Release Process β cutting and publishing a release
Start with the architecture map β the components, how they talk, and where each piece of state lives. Then, by area:
- Client β App initialization Β· Chat runtime Β· System prompt, tools and citations Β· Content view Β· Data access layer Β· Auth and session Β· Client data migrations Β· Settings and preferences Β· Reconciled defaults Β· Tauri shell Β· In-browser agent harness Β· The
shared/module - Backend β API surface Β· Universal proxy Β· Managed inference Β· Sign-in and the waitlist Β· Debug transcripts Β· Backend service
- Sync and data β PowerSync, account and devices Β· Sync middleware Β· Upload authorization Β· Composite primary keys and default data Β· Delete account and revoke device
Please read our Code of Conduct. All participants in the Thunderbolt community agree to follow these guidelines and Mozilla's Community Participation Guidelines.
If you discover a security vulnerability, please report it responsibly via our vulnerability reporting form. Please do not file public GitHub issues for security vulnerabilities.
Thunderbolt is licensed under the Mozilla Public License 2.0.