thunderbolt
忧劳可以兴国,逸豫可以亡身。——新五代史伶官传序
Thunderbolt:一位“你说了算”的 AI 客户端,带着你的数据回家
如果 AI 也会说话,那 Thunderbolt 可能会把手插在兜里,抬头看你一眼,然后认真地说:
AI You Control: Choose your models. Own your data. Eliminate vendor lock-in.
它不想把你拴在某个供应商的门口,不想让你的数据四处漂泊,更不想替你做决定。它的脾气很明确:你来选模型,你来掌控数据,你来决定把它部署到哪里。
它只是一个开源的、跨平台的 AI 客户端——但它的姿态很像一个“能在企业机房里站稳脚跟”的伙伴。
先自我介绍一下:Thunderbolt 是谁?
Thunderbolt 是一个 open-source、cross-platform 的 AI client,而且它还很在意“落地”这件事:
它可以被 on-prem 部署在任何地方。
它甚至有点骄傲地掰着手指数给你看:
- 🌐 我在所有主流桌面与移动平台都能出现:web、iOS、Android、Mac、Linux、Windows
- 🧠 我能和各种模型相处:frontier、local、on-prem models
- 🙋 如果你是企业用户,我也有企业能力、支持与 FDE(Field Deployment Engineer)可选
不过它也不装成熟,反而很直白地提醒你:
它 still early and under active development,正在做 security audit,并且在为 enterprise production readiness 做准备。
它现在还在成长:Thunderbolt 的“坦白局”
Thunderbolt 不是那种“我什么都能离线、我什么都不依赖”的理想型角色——至少现在还不是。
它会认真告诉你两件事(是那种很诚恳的“我正在努力”):
- 我最终想 fully offline-first,但目前我还依赖 authentication 和 search functionality
(不过你可以在应用里 integrations screen 把 search 关掉) - 我没有公共推理端点(public inference endpoint)
你需要自己添加模型提供方:- 想免费本地推理?它推荐你跟 Ollama 或 llama.cpp 交朋友
- 或者你也可以在设置里加任何 OpenAI-compatible 的模型提供方 API key
它不抢你的方向盘,只把“选择权”递到你手里。
需要帮助?它把门牌号贴好了
Thunderbolt 现在还在搭建 docs、community 和 roadmap。
如果你发现 bug、有想法,它最希望你做的事很简单:
- File an issue
它喜欢把事情放到台面上讨论,越开源越坦荡。
贡献者欢迎入场:一起把它养大
Thunderbolt 说话很像社区里的老朋友:
- “我们欢迎每个人的贡献。”
- “开发怎么开始?去看 development guide。”
- “进来之前,先跟 Mozilla Community Participation Guidelines 打个照面。”
它不摆架子,但很重视秩序与共识。
文档导航:它把地图摊开给你看
Thunderbolt 的文档像一座正在扩建的城市,路标已经立起来了:
- FAQ - Frequently asked questions
- Deployment - Self-host with Docker Compose or Kubernetes
- Development - Quick start, setup, and testing
- Architecture - System architecture and diagrams
- Features and Roadmap - Platform and feature status
- Claude Code Skills - Slash commands, automation, and subtree syncing
- Storybook - Build, test, and document components
- Vite Bundle Analyzer - Analyze frontend bundle size
- Tauri Signing Keys - Generate and manage signing keys for releases
- Release Process - Instructions for creating and publishing new releases
- Telemetry - Information about data collection and privacy policy
它不怕你问路,它怕你不来。
说到部署:Thunderbolt 的“落地方案”有两条腿
Thunderbolt 的部署文档语气更严肃一些,上来就先敲桌子:
⚠️ Under active development — not production ready.
这些部署路径用于评估与早期测试,不要用于生产环境。
它的部署目标很明确:
Self-hosted Thunderbolt with OIDC authentication via Keycloak。
并且给你两条路,像给你递上两把钥匙:
- Docker Compose:适合本地开发、演示、快速体验
- Kubernetes:适合企业客户、生产、以及熟悉 k8s 的团队
- (另外还有 Pulumi (AWS):可以部署到 Fargate 或 EKS)
目录结构:它把“行李箱”打开给你看
Thunderbolt 的 deploy 目录像一个装备箱,分门别类摆得很清楚:
deploy/docker/:共享 Dockerfilesconfig/:共享配置(nginx、PowerSync、Keycloak realm)pulumi/:IaC(AWS Fargate / EKS)k8s/:K8s manifests + up/down 脚本docker-compose.yml:本地 Docker Compose.env.example:环境变量模板
powersync-service/init-db/:Postgres init SQL(deploy 引用,不重复放)config/:Dev PowerSync config
它像是在说:我不怕复杂,我怕你找不到。
最快启动:Docker Compose(Quickest)
Thunderbolt 喜欢你“先跑起来再说”。它给出的最快路线非常直接:
1 | cd deploy |
它会把服务摆好桌子、点好灯,然后告诉你:来吧,坐。
服务入口它也写得明明白白:
| Service | URL | Credentials |
|---|---|---|
| App | http://localhost:3000 | (via Keycloak SSO) |
| Keycloak admin | http://localhost:8180 | admin / admin |
| Demo user | (Keycloak login) | demo@thunderbolt.io / demo |
如果你想让它先休息一会儿:
1 | docker compose down # stop, keep data |
它很懂“可撤销”带来的安全感。
它的“身体”由哪些容器组成?
无论你走 Docker Compose、Kubernetes,还是 Pulumi(AWS),Thunderbolt 都强调:大家用的是同一套 Docker images。
它把自己的构成拆开给你看:
| Service | Dockerfile | Purpose |
|---|---|---|
| Frontend | docker/frontend.Dockerfile |
nginx serving SPA + COEP/COOP headers |
| Backend | docker/backend.Dockerfile |
Bun API server with auto-migrations |
| PostgreSQL | docker/postgres.Dockerfile |
WAL logical replication(init SQL 来自 powersync-service/init-db/) |
| Keycloak | docker/keycloak.Dockerfile |
OIDC identity provider with realm import |
| PowerSync | docker/powersync.Dockerfile |
Real-time sync service |
| MongoDB | mongo:7.0(official) |
PowerSync storage backend |
它像个工程师一样,讲究、克制、并且把每个器官的职责写在标签上。
配置:它偏爱“企业默认值”
Thunderbolt 的部署配置里,企业味道很浓:
它默认就站在 “OIDC + Keycloak” 的阵地上。
Enterprise Defaults
| Setting | Value |
|---|---|
| Auth mode | OIDC (Keycloak) |
| Waitlist | Disabled |
| Frontend | VITE_AUTH_MODE=oidc, VITE_THUNDERBOLT_CLOUD_URL=/v1 |
Environment Variables
它让你看 .env.example。
并且提醒你:有些变量在 docker-compose.yml 里硬编码了(比如 auth mode、数据库 URL、OIDC 配置),除非你想覆盖,否则不必设置。
Keycloak:它的“门禁管理员”
Thunderbolt 找 Keycloak 当门卫,还给它配好了“上岗培训资料”:
- Realm:
thunderbolt
首次启动会从config/keycloak-realm.json自动导入 - Client:
thunderbolt-app - 默认用户:
demo@thunderbolt.io / demo - Admin console:
/admin(admin / admin)
它的态度很像在说:先有身份,再谈能力。
PowerSync:它的“实时同步神经”
Thunderbolt 把实时同步交给 PowerSync,并把规则写在:
config/powersync-config.yaml
它还会提醒你一个关键点(像在叮嘱别把钥匙配错了):
- JWT secret 必须在 backend 与 PowerSync 配置之间保持一致
行为准则、安全与许可:它的底线写在脸上
Thunderbolt 不喜欢“口头承诺”,它更喜欢把规则落在文件里。
- Code of Conduct:所有参与者都要遵守,并遵循 Mozilla 的社区参与指南
- Security:发现漏洞要走 vulnerability reporting form,不要把安全问题直接丢到公开 issue 里
- License:Mozilla Public License 2.0 (MPL-2.0)
它像个有原则的角色:
热情欢迎你加入,也认真保护每个人的边界。
结尾:Thunderbolt 的一句话,足够当标语
Thunderbolt 其实不想当“最会说”的 AI 客户端。
它更想当“最让你安心”的那一个。
它把话说得很干净,也很有力:
AI You Control: Choose your models. Own your data. Eliminate vendor lock-in.
