| Name |
|---|
| 📁docs |
| 📄commercialization.md |
| 📄design.md |
| 📄design.zh.md |
| 📄product.md |
| 📄product.zh.md |
| 📄protocol-design.md |
| 📄protocol-design.zh.md |
| 📄protocol-spec.md |
| 📄protocol-spec.zh.md |
| 📄README.md |
| 📄README.zh.md |
One self-hosted platform to build, test, and run voice AI on your devices — from day-one simulation to a production fleet.
iotta is the server that turns an embedded device into a voice assistant — it receives audio from a device, runs it through a speech-recognition → language-model → speech-synthesis pipeline, dispatches tool calls, and streams synthesized speech back. It is also the development environment the same teams use to build that assistant: the same server runs from pre-hardware simulation, through prototype bring-up, to the production fleet. There is no separate test tool, and no re-integration between stages.
iotta contains no product-specific knowledge — any voice AI product can be built on it without modifying the platform.
See docs/product.md for the full case, the feature catalog, and a
side-by-side comparison with xiaozhi.
Every administrative operation runs in the browser, served by the platform itself — no separate install. (Screenshots show the built-in empty-state demo content.)
![]() |
![]() |
|---|---|
| Devices & fleet liveness | Tool & prompt registry |
![]() |
![]() |
|---|---|
| Firmware rollout | Session traces |
cp config.example.yaml config.yaml # edit paths/secrets as needed
cp .env.example .env # set OPENAI_API_KEY (and tokens)
docker compose up
The operator UI is then served at http://localhost:8000/ (redirects to /ui).
# System dependencies
apt install libopus-dev libportaudio2 # Linux
brew install opus portaudio # macOS
# Server
cd server
pip install uv
uv pip install -e ".[dev,audio]"
cp config.example.yaml config.yaml # fill in your API keys
IOTTA_CONFIG=config.yaml iotta # serves the API + UI on :8000
# Client (software device simulator)
cd ../client
uv pip install -e .
iotta-client --server ws://localhost:8000/session
The server package installs operator CLIs alongside the server:
| Command | Purpose |
|---|---|
iotta |
Run the session server + operator UI |
iotta-registry |
Manage tool/prompt versions and promotion |
iotta-eval |
Run scored eval suites |
iotta-devices |
Devices, agents, firmware, OTA rollout/rollback |
iotta-doctor |
Preflight: stores, disk, auth posture, provider keys |
iotta-backup / iotta-restore |
Consistent snapshot ↔ restore (one .tar.gz) |
| Variable | Purpose |
|---|---|
OPENAI_API_KEY |
ASR (Whisper), LLM, TTS via OpenAI (reference provider) |
IOTTA_CONFIG |
Path to config YAML (default: config.yaml) |
IOTTA_ADMIN_TOKEN |
Bearer token gating the /admin operator API |
IOTTA_SESSION_TOKEN |
Shared device session token (per-device tokens also supported) |
server/ # FastAPI session server + operator UI
src/iotta/ # main package
src/iotta/web/ # operator UI (static ES modules, no build step)
tests/ # pytest suite (no external deps required)
client/ # software device client (mic → Opus → speaker)
deploy/ # reverse-proxy examples (Caddy, nginx)
docs/ # design, product, protocol, subsystem references
cd server
PYTHONPATH=src python -m pytest tests/ -v
Tests run without system audio libraries (opuslib is mocked) and require no network.
| Doc | Purpose |
|---|---|
docs/product.md |
What iotta is, for whom, and how it compares |
docs/design.md |
Engineering vision and design principles |
docs/protocol-spec.md |
Wire protocol — normative message reference |
docs/protocol-design.md |
Protocol rationale + firmware port guide (from xiaozhi) |
docs/commercialization.md |
Open-core model, editions, device-cap design |
CONTRIBUTING.md |
How to contribute (incl. the changelog policy) |
CHANGELOG.md |
Release & change history |
iotta is dual-licensed open-core:
The free Community edition is the full development platform, capped at a small number of
active devices for demos, solo use, and evaluation. See
docs/commercialization.md. The core always runs with no
required cloud dependency.
一体化自托管平台,用于在嵌入式设备上构建、测试和运行语音 AI——从第一天的仿真模拟,到生产环境的设备群管理。
iotta 是将嵌入式设备变成语音助手的服务器——它接收设备发来的音频,通过语音识别 → 大语言模型 → 语音合成流水线进行处理,调度工具调用,并将合成语音流式返回给设备。同时,iotta 也是开发环境,供同一个团队构建该助手:同一台服务器贯穿从无硬件的仿真模拟、原型调试,到生产环境部署的全过程,无需单独的测试工具,也无需在各阶段之间重新集成。
iotta 不包含任何产品相关的特定知识——任何语音 AI 产品都可以直接构建于其上,无需修改平台本身。
完整介绍、功能详述以及与 xiaozhi 的对比,请参阅 docs/product.md(中文版)。
所有管理操作均在浏览器中完成,由平台自身提供,无需单独安装。(截图中为内置的空状态演示内容。)
![]() |
![]() |
|---|---|
| 设备与设备群在线状态 | 工具与提示词注册表 |
![]() |
![]() |
|---|---|
| 固件灰度发布 | 会话追踪 |
cp config.example.yaml config.yaml # 按需修改路径和密钥
cp .env.example .env # 填写 OPENAI_API_KEY(及各类令牌)
docker compose up
运营 UI 随即在 http://localhost:8000/(会自动跳转至 /ui)提供服务。
# 系统依赖
apt install libopus-dev libportaudio2 # Linux
brew install opus portaudio # macOS
# 服务端
cd server
pip install uv
uv pip install -e ".[dev,audio]"
cp config.example.yaml config.yaml # 填写 API 密钥
IOTTA_CONFIG=config.yaml iotta # 在 :8000 启动 API + UI
# 客户端(软件设备模拟器)
cd ../client
uv pip install -e .
iotta-client --server ws://localhost:8000/session
服务端包安装时会同时安装以下运维 CLI:
| 命令 | 用途 |
|---|---|
iotta |
运行会话服务器 + 运营 UI |
iotta-registry |
管理工具/提示词版本及晋升 |
iotta-eval |
运行有评分的评测套件 |
iotta-devices |
设备、智能体、固件、OTA 灰度/回滚 |
iotta-doctor |
预检:存储、磁盘、认证状态、提供商密钥 |
iotta-backup / iotta-restore |
一致性快照 ↔ 恢复(单个 .tar.gz) |
| 变量 | 用途 |
|---|---|
OPENAI_API_KEY |
通过 OpenAI 使用 ASR(Whisper)、LLM、TTS(参考提供商) |
IOTTA_CONFIG |
配置 YAML 的路径(默认:config.yaml) |
IOTTA_ADMIN_TOKEN |
管控 /admin 运营 API 的 Bearer 令牌 |
IOTTA_SESSION_TOKEN |
共享设备会话令牌(同时支持按设备独立令牌) |
server/ # FastAPI 会话服务器 + 运营 UI
src/iotta/ # 主包
src/iotta/web/ # 运营 UI(静态 ES 模块,无需构建步骤)
tests/ # pytest 测试套件(无需外部依赖)
client/ # 软件设备客户端(麦克风 → Opus → 扬声器)
deploy/ # 反向代理配置示例(Caddy、nginx)
docs/ # 设计、产品、协议、各子系统参考文档
cd server
PYTHONPATH=src python -m pytest tests/ -v
测试无需系统音频库(opuslib 已 mock),也不需要网络连接。
| 文档 | 用途 |
|---|---|
docs/product.md |
iotta 是什么、面向谁、与竞品对比(中文版) |
docs/design.md |
工程愿景与设计原则(中文版) |
docs/protocol-spec.md |
通信协议——规范性消息参考(中文版) |
docs/protocol-design.md |
协议设计原理 + 固件移植指南(来自 xiaozhi)(中文版) |
docs/commercialization.md |
开放核心模式、版本规划、设备上限设计 |
CONTRIBUTING.md |
贡献指南(含变更日志规范) |
CHANGELOG.md |
发布历史与变更记录 |
iotta 采用双重授权的开放核心模式:
免费社区版是完整的开发平台,活跃设备数量有上限,适用于演示、个人使用和评估。详见 docs/commercialization.md。核心版本始终可在无需任何云依赖的情况下运行。