忧劳可以兴国,逸豫可以亡身。——新五代史伶官传序

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 不是那种“我什么都能离线、我什么都不依赖”的理想型角色——至少现在还不是。

它会认真告诉你两件事(是那种很诚恳的“我正在努力”):

  1. 我最终想 fully offline-first,但目前我还依赖 authentication 和 search functionality
    (不过你可以在应用里 integrations screen 把 search 关掉)
  2. 我没有公共推理端点(public inference endpoint)
    你需要自己添加模型提供方:
    • 想免费本地推理?它推荐你跟 Ollamallama.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/:共享 Dockerfiles
    • config/:共享配置(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
2
3
cd deploy
cp .env.example .env
docker compose up --build

它会把服务摆好桌子、点好灯,然后告诉你:来吧,坐。

服务入口它也写得明明白白:

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
2
docker compose down        # stop, keep data
docker compose down -v # stop + wipe 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:/adminadmin / 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.