Skip to content

TypeScript · ESM · Plugin Runtime

Zhin.js

用 TypeScript 写一次,让你的 Bot 同时跑在 QQ、微信、飞书、钉钉、Discord、Telegram 等 20+ 平台。文件即能力、跨平台 JSX 互动卡片、Generation 热重载、按需 AI Agent —— 浏览器里一站管理。

IM 核心 <10MBNode ≥20.19MIT
zsh
$ npm create zhin-app my-bot -y && cd my-bot && pnpm dev
✔ Bot 已启动 —— 打开 http://127.0.0.1:8068/sandbox 立即开聊(无需平台账号或模型 Key)

你想从哪里开始?

无需先读完整套架构。挑一个眼下的目标,每条路径都能在一次会话内走完。

为什么是 Zhin.js

01

一套代码,20+ 平台

QQ、微信、企业微信、钉钉、飞书、Discord、Telegram、Slack、KOOK、LINE……业务代码只面对一种统一消息,平台差异交给适配器。

02

写功能 = 放一个文件

commands/hello/index.ts 就是 /hello 命令。中间件、组件、定时任务、AI 工具同理,不用手写注册代码。

03

改代码不用重启

保存即热重载;正在处理的消息用旧版本跑完,新代码报错时旧版本继续服务,Bot 不会因为一次手滑而掉线。

04

零账号也能开发

内置 Sandbox 模拟聊天窗口,不用申请任何平台账号或模型 Key,就能完整开发和测试。

05

浏览器里管理

打开 console.zhin.dev 填入地址和 Token:发测试消息、看日志、改配置、管插件,无需部署前端。

06

AI 按需加装

默认只有不到 10MB 的 IM 核心。运行 npx zhin setup --ai 即可接入大模型、工具、记忆与 MCP。

直观感受 Zhin.js 开发体验

文件即命令 + 跨平台 JSX 互动卡片(commands/poll/index.tsx):支持按钮的平台渲染原生按钮,纯文本平台自动降级为数字选项。

tsx
import { defineCommand } from 'zhin.js/command';

export default defineCommand({
  description: '发起快速投票',
  params: { topic: { type: 'text', default: '今天发版吗?' } },
  execute: ({ params }) => (
    <card title={`📊 ${params.topic}`}>
      <text>点击按钮(或回复对应序号):</text>
      <button label="👍 赞成" onClick={(m) => `${m.$sender.name} 投了赞成`} />
      <button label="🤔 再议" onClick={(m) => `${m.$sender.name} 投了再议`} />
    </card>
  ),
});

约定目录自动发现:无需手写注册样板,保存文件即热重载。

text
my-bot/
├── plugin.ts                 # Root 插件入口:definePlugin()
├── commands/poll/index.tsx   # /poll 命令(自动发现)
├── middlewares/…             # 每条消息经过的拦截器
├── tools/weather/index.ts    # 给 AI 调用的工具(可选)
└── zhin.config.yml           # configVersion: 2(插件与平台配置)

3 步跑通本地开发(无需任何平台账号或模型 Key):

bash
npm create zhin-app my-bot -y
cd my-bot && pnpm dev
  1. 直接开聊:打开 http://127.0.0.1:8068/sandbox 发送 /hello
  2. 完整后台:或打开 console.zhin.dev,填入 http://127.0.0.1:8068 与 .env 中的 HTTP_TOKEN
  3. 热重载扩展:修改 commands/ 下的文件并保存,无需重启即刻生效

接下来读哪里