Skip to content
 
 

Repository files navigation

Parti

English | 简体中文

和朋友一起创造,一起游玩。

Parti 是一个用于创建和游玩多人互动房间的 Web 平台与 Runtime。你可以从模板开始、导入自己的房间代码,随后通过链接或二维码邀请朋友加入;房间创作者只需编写 HTML 和 JavaScript,状态同步、网络连接、沙箱与断线恢复由 Runtime 处理。

我想…… 从这里开始
体验 Parti 打开线上版本,浏览大厅、创建房间并邀请朋友
用 AI 快速创建 用 AI 快速创建联机游戏:复制提示词 → 生成 → 一键导入 → 邀请联机
手写一个房间 阅读房间开发快速开始,或从完整井字棋示例开始
参与开发 查看本地开发项目结构

Parti 能做什么

  • 创建与导入:使用空白房间或内置模板开始,在编辑器中修改房间文件;也可用 AI 生成房间并一键导入,或从 ZIP / GitHub 导入房间包;还可以在「房间市场」标签页浏览并一键安装社区通过 GitHub 发布的房间。
  • 即时联机:房主在浏览器中创建房间,通过 WebRTC 与玩家连接;房间代码可由房主点对点分发。
  • 轻松邀请:支持邀请链接、二维码、4 位数字密码,以及可选的公开在线大厅。
  • 专注玩法:创作者只提交 action、更新权威 state;Runtime 负责协议、完整状态快照与事件广播。
  • 隔离运行:房间 UI 运行在沙箱 iframe 中,权威逻辑运行在房主的 Web Worker 中。
  • 从中断中恢复:房主刷新可恢复现场,玩家刷新或短暂掉线可回到原有身份和座位。
  • 开箱即玩:仓库内置多人聊天、计数器、猜词、贪吃蛇和斗地主等房间。

Parti 采用 Host Authoritative 模型:玩家只发送操作意图,房主浏览器中的 Worker 维护唯一权威状态并将结果同步给所有玩家。创作者无需直接处理 WebRTC、postMessage、序列号或确认机制。

用 AI 快速创建联机游戏

不必先啃 API。打开 线上版本 的创建页,复制一段为 Parti 准备的提示词,交给 ChatGPT、Claude、Gemini 等常用 AI;它会按仓库 docs 约束生成完整房间代码。粘贴回复即可导入三个文件,随后用链接或二维码邀请朋友联机。

  1. 在创建页点击「没有想要的游戏?让 AI 写一个」,复制提示词并发给 AI。
  2. 补充玩法、玩家人数、胜负条件和视觉风格,等待 AI 生成完整回复。
  3. 回到编辑页,用「快速导入 AI 结果」粘贴整段回复,自动填入 parti.room.jsonindex.htmlroom.worker.js;预览确认后创建房间并邀请好友。

AI 生成的代码仍可能有误,建议先本地预览再邀请。若更想从零手写,见下方创建一个房间

适用场景与边界

Parti 的核心目标是服务普通人的朋友聚会、家庭娱乐、线下活动和其他轻量社交互动。它更适合彼此信任的人群共同游玩,而不是开放、对抗或高风险的公共服务。

Parti 不提供防作弊、公平竞技或安全对抗保证。Host Authoritative 只描述状态由房主计算和同步,并不意味着房主、玩家客户端或房间代码可信。请勿将 Parti 用于赌博、奖金竞赛、金融交易、关键业务、安全敏感场景或任何违法用途。

创建一个房间

一个最小 Parti 房间只有三个文件:

my-room/
  parti.room.json   # 元信息、入口与权限
  index.html        # 沙箱中的房间 UI
  room.worker.js    # 房主 Worker 中的权威逻辑

parti.room.json

{
  "partiVersion": "0.1.0",
  "protocolVersion": 1,
  "id": "counter",
  "name": "多人计数器",
  "version": "0.1.0",
  "packageMode": "blob",
  "entry": {
    "ui": "index.html",
    "worker": "room.worker.js"
  },
  "room": { "minPlayers": 1, "maxPlayers": 8 },
  "sync": { "mode": "snapshot" },
  "permissions": { "network": false, "storage": "session" }
}

room.worker.js

import { defineRoom } from '@parti/worker-sdk';

export default defineRoom({
  initialState() {
    return { count: 0 };
  },
  actions: {
    increment(ctx) {
      ctx.state.count += 1;
    },
  },
});

index.html

<button id="increment">+1</button>
<strong id="count">0</strong>

<script>
  parti.onState((state) => {
    document.getElementById('count').textContent = String(state.count);
  });
  document.getElementById('increment').onclick = () => {
    parti.action('increment');
  };
  parti.ready();
</script>

将三个文件放入 apps/web/public/rooms/<room-id>/,或打包为 ZIP 后在 Parti 中导入;也可以把房间包提交到自己的公开仓库并按房间市场登记,让其他用户在市场中一键安装。完整开发流程和约束见房间开发文档

本地开发

需要 Node.js、pnpm 以及支持 WebRTC 和 Web Worker 的现代浏览器。

pnpm install
pnpm dev        # 启动 Web 应用:http://localhost:5173
pnpm test       # 运行协议与 Runtime 测试
pnpm typecheck  # 检查整个 monorepo 的类型
pnpm build      # 先构建 apps/room-*,再构建包含这些 Room 的 Web 应用

开发环境提供本地多人预览和 DevTools;它们不会出现在生产构建中。即使没有配置大厅服务,仍然可以创建私密房间并通过邀请链接加入。

可选配置

复制 .env.example,按需设置:

# 启用公开在线大厅
VITE_LOBBY_SERVICE_URL=https://<project-ref>.supabase.co/functions/v1/parti-lobby

# 覆盖房间市场的 GitHub issue 注册表(默认 glink25/Parti)
VITE_MARKET_REGISTRY=<owner>/<repo>

大厅服务由仓库中的 Supabase Edge Function 和迁移提供。接口、租约与 CORS 约定见大厅服务文档

项目结构

apps/web/                 React + Vite Web 应用、在线大厅、编辑器与房间界面
packages/core/            协议、Host/Client Runtime 与状态同步
packages/worker-sdk/      defineRoom、RoomEngine 与 Worker 宿主
packages/client-sdk/      iframe 中的 parti API 与宿主页沙箱桥
packages/transport-local/ 本地预览和测试使用的内存 Transport
packages/transport-peerjs/基于 PeerJS / WebRTC 的联机 Transport
packages/transport-lan/   基于 LocalSend 信令与 WebRTC DataChannel 的局域网 Transport
packages/room-packager/   Manifest 校验与内容寻址房间包
supabase/                 可选的在线大厅数据库迁移与 Edge Function
docs/                     房间开发、API 和 Runtime 文档

核心数据流:

iframe UI
  -> host bridge -> ClientRuntime -> Transport
  -> HostRuntime -> room.worker.js
  -> authoritative state -> snapshot broadcast -> every player's UI

Runtime 的核心原则是:Runtime First、Protocol Stable、User Code Untrusted、Host Replaceable、Actions Over Messages、Snapshot First。

文档

文档 内容
快速开始 房间模型、最小示例与运行方式
完整井字棋示例 从零实现一个可运行的多人游戏
Worker API defineRoom、action、上下文与生命周期
Client API iframe 中可用的 parti.* API
Manifest parti.room.json 字段与约束
房间市场 发布流程、parti.room.zip 打包格式与标签规则
Host Runtime 准入、容量、恢复与安全边界
协议参考 底层消息、状态同步与错误码
大厅服务 REST API、租约、部署与 CORS
局域网直连 LocalSend 发现、网络边界、自建服务与隐私说明

许可证

Parti 采用 PolyForm Noncommercial License 1.0.0。任何人均可出于非商业目的使用、修改和分发 Parti;将 Parti 用于商业经营或其他营利目的,需要事先取得 Parti 作者的书面许可。

发布到 Parti 房间市场的第三方游戏房间,其版权仍归各自作者所有。Parti 的许可证仅适用于 Parti 本身,不取得第三方游戏房间的版权,也不替代游戏作者为其作品选择的许可证。


☕️ 请我喝杯咖啡

点击查看捐赠方式

感谢你对 Parti 的支持!Parti 目前由单人维护,你的捐赠将用于项目维护和持续开发。

支付宝 (Alipay)

支付宝收款码

Solana (SOL)

钱包地址:

vEzM9jmxChx2AoMMDpHARHZcUjmUCHdBShwF9eJYGEg

Solana 钱包二维码

About

Parti - 和朋友一起创造,一起游玩 Create & Play with friends

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages