npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

open-xiaozhi-client-webui

v0.1.5

Published

![WebUI](https://img.shields.io/badge/WebUI-Available-22c55e?style=flat-square) ![Xiaozhi](https://img.shields.io/badge/Xiaozhi-Ecosystem-2563eb?style=flat-square) ![Client](https://img.shields.io/badge/Client-Full%20Protocol%20Implementation-7c3aed?style

Readme

🤖 Open Xiaozhi Client

WebUI Xiaozhi Client npm License

Open Xiaozhi Client WebUI 亮色-双栏

🎙️ 面向 小智生态 的开源客户端全协议实现。
让你可以更快地 学习协议、联调服务端、排查问题、体验小智能力

Open Xiaozhi Client 是一个基于小智生态的开源客户端项目,目标是提供一个真正可用、可观察、可调试的客户端实现入口。当前已经提供 WebUI 调试端,后续会继续扩展到更多平台和终端形态。

它既适合开发者作为 小智服务端调试工具 使用,也适合普通用户快速上手体验小智的交互链路。

npm install -g open-xiaozhi-client-webui
open-xiaozhi-client-webui

⚡ 1分钟跑起来!执行后自动启动本地服务并打开浏览器,默认访问 http://127.0.0.1:14100,按 Ctrl+C 退出。

✨ 为什么值得关注

  • 1 分钟跑起来:安装依赖、启动 WebUI、连接服务端,快速进入调试状态
  • 📐 全协议实现定位:围绕小智客户端侧能力建设,方便理解消息流和交互链路
  • 🔍 兼顾调试与体验:既能看协议细节,也能直接体验 WebUI 交互
  • 🔗 适配小智生态:支持官方小智,也支持开源服务端
  • 🔮 面向未来多端:当前是 WebUI,未来会继续支持更多客户端形态

🚀 当前已经可以做什么

当前版本重点提供一个面向学习、联调、排障的 WebUI 小智客户端

| 能力 | 说明 | | --- | --- | | 🖥️ 响应式 WebUI 客户端 | 宽屏双栏布局(对话历史 + 指令中心)/ 窄屏单栏布局,面板宽度可拖拽调整 | | 📡 连接状态查看 | 查看 OTA 获取、连接中、握手中、就绪、播放中等状态变化 | | 🎤 三种监听模式 | 对讲机(手动)/ 智能助理(VAD 自动)/ 通话(全双工实时),可随时切换 | | 🔊 音频可视化 | 录音音量条 + 播放波形动画,实时反映收发音频状态 | | 📋 协议日志面板 | 实时观察 WebSocket 文本帧、二进制帧、系统日志 | | 📨 自定义消息发送 | 手动发送 JSON 消息,便于模拟与调试协议行为 | | 🎛️ 设备控制面板 | 调整音量、屏幕亮度、明暗主题,查看收到的 IoT 命令,设置持久化 | | 🌐 HTTP 面板 | 在连接态下发送服务端管理指令(更新配置、重启等) | | ⚙️ 设置面板 | 调整 Hello 参数、音频参数、心跳、日志数量等配置,持久化保存 | | 🤖 MCP 协议支持 | 客户端作为 MCP Server 响应服务端工具调用(音量、亮度、主题、重启等) | | 📸 摄像头 / 视觉能力 | 支持 self.camera.take_photo:调用浏览器摄像头拍照,通过服务端下发的视觉端点分析图像并回传结果 | | 🔐 设备激活流程 | 对齐 xiaozhi-esp32 OTA 激活协议,自动轮询 /activate 完成设备注册 |

👥 适合谁

  • 📖 想学习 小智协议 / xiaozhi protocol 的开发者
  • 🔧 想联调 官方小智开源服务端 的开发者
  • 🐛 想快速定位连接、握手、消息收发问题的服务端开发者
  • 🏗️ 想基于小智生态继续扩展桌面端、移动端或其他客户端的贡献者
  • 🌟 想先体验小智交互流程的普通用户

🔍 为什么这个项目对服务端调试有价值

很多小智相关项目在服务端开发阶段,最难的不是功能本身,而是:

  • 👀 不容易看清楚客户端到底发了什么
  • 🔄 不容易复现某个握手或协议问题
  • ✅ 不容易快速验证 IoT、HTTP、音频、消息链路是否正常

这个项目的价值就在于提供一个 可视化、可操作、可观察 的客户端调试入口:
你可以一边连接服务端,一边查看协议日志,一边手动发送消息或修改配置,从而更高效地定位问题。

🌐 支持的小智生态项目

官方小智

  • GitHub: https://github.com/78/xiaozhi-esp32

开源服务端

  • GitHub: https://github.com/xinnan-tech/xiaozhi-esp32-server

本项目聚焦 客户端侧实现、协议学习与服务端调试体验,不替代服务端项目本身。

⚡ 快速开始

npm install -g open-xiaozhi-client-webui
open-xiaozhi-client-webui

命令执行后会自动启动本地服务并打开浏览器,默认访问地址为 http://127.0.0.1:14100。若端口被占用会自动顺延。按 Ctrl+C 退出。

进入页面后,你可以:

  1. 在顶部填写服务地址,默认可按小智服务端 OTA 地址格式接入
  2. 点击连接,观察连接状态与握手流程
  3. 在协议日志中查看消息收发
  4. 在设备控制 / HTTP / 设置面板中继续联调和排障

🎛️ 命令行参数

启动时可附加以下参数:

| 参数 | 说明 | 示例 | | --- | --- | --- | | --ota=<url> | 指定默认服务地址(OTA)。启动时注入前端,作为顶部「服务地址」输入框的默认值 | --ota=https://your-server/xiaozhi/ota/ | | --port=<n> | 指定监听端口。不指定时默认 14100,被占用会自动顺延;指定后若端口被占用则报错退出 | --port=14200 |

open-xiaozhi-client-webui --ota=https://your-server/xiaozhi/ota/ --port=14200

说明:

  • 两种写法均可:--ota <url>--ota=<url>--port 同理)。
  • 服务默认监听 0.0.0.0,可通过局域网 IP 访问。
  • --ota 仅作为「服务地址」输入框的默认值;若浏览器本地已保存过手动填写的地址(localStorage),则以本地保存的为准。

源码开发模式

适合在本地修改代码、参与开发的贡献者。

环境要求:Node.js 18+、npm 9+

npm install
npm run dev

启动后默认访问:http://localhost:5173

🏗️ 构建

npm run build

📁 项目结构

采用六边形 / 端口-适配器 + 事件驱动架构,状态机与副作用分离,UI 与服务器交互完全解耦:

src/
  🧠 core/         纯领域核心(零依赖 React/浏览器):FSM 内核、连接/会话状态机、协议消息、端口接口、事件与命令
  🔌 adapters/     端口的浏览器实现:WebSocket 传输、HTTP OTA/激活、麦克风/扬声器、时钟
  🎛️ application/  应用编排:组合根、连接/会话编排、MCP 服务、入站消息路由
  🌉 ui/           运行时桥:组合根装配、命令分发、领域事件投影到 Zustand
  🧩 components/   WebUI 组件与调试面板
  ⚙️ features/     业务功能与 Zustand slice(连接、协议、音频、IoT、MCP、设备、摄像头、耗时统计等)
  🪝 hooks/        音频与连接相关 Hook
  🗄️ store/        全局状态聚合(Zustand slice 模式)

数据流:UI 通过 dispatch(Command) 表达意图 → 状态机产出 effects → 编排层经端口产生副作用并广播领域事件 → 投影层将事件单向写入只读视图模型 → React 重渲染。

🎯 这个项目的定位

这不是一个单纯的演示页面,也不只是一个简单的调试脚本。

它更适合作为:

  • 📌 小智客户端实现参考
  • 🔧 小智服务端联调工具
  • 📚 小智协议学习入口
  • 🏗️ 未来多端客户端的基础工程

🗺️ 路线图

  • [x] ~~WebUI 调试端~~ ✅
  • [x] ~~面向协议学习与服务端调试的基础交互能力~~ ✅
  • [x] ~~响应式双栏布局 + 三种监听模式~~ ✅
  • [x] ~~MCP 协议支持 + 设备控制面板~~ ✅
  • [x] ~~摄像头 / 视觉能力(self.camera.take_photo)~~ ✅
  • [x] ~~设备激活流程(OTA 激活协议对齐)~~ ✅
  • [ ] 📱 更多客户端形态支持
  • [ ] 🖥️ 更完整的多端体验
  • [ ] 🔄 持续完善小智生态下的客户端能力

🤝 贡献与关注

如果你也在关注 小智客户端、xiaozhi WebUI、服务端联调、协议实现,欢迎:

  • ⭐ Star 这个项目
  • 🐛 提交 Issue 反馈问题或需求
  • 🔀 提交 PR 一起完善客户端能力
  • 🌍 参与多端扩展与生态适配

💡 如果你希望有一个 更容易上手、又足够专业的小智客户端调试入口,这个项目正是为此而生。