mcpField
Y
yjs-nextjs

yjs-nextjs

github.com/pproenca开发21861 次安装11 周前更新
代码仓库

关于 yjs-nextjs

yjs-nextjs 是面向在 Next.js 16 App Router 中实现 Yjs 协作编辑的编码参考技能,涵盖同步、持久化及 React 绑定。规则针对 Yjs 13.6.31,聚焦并发编辑中容易被忽略的数据丢失与配置问题。

主要功能

  1. 01覆盖同步拓扑与依赖选择
  2. 02说明二进制更新传输和持久化
  3. 03指导共享类型的数据建模
  4. 04处理 React 文档生命周期与绑定
  5. 05涵盖撤销、离线加载和光标
  6. 06指导 Tiptap 与表单集成

适用场景

  1. 01为 Next.js 应用添加协作编辑或离线同步
  2. 02排查并发编辑导致的内容丢失或重复
  3. 03设计 Y.Doc 持久化与更新压缩
  4. 04检查 React 中 Yjs Provider 的生命周期

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pproenca/dot-skills --skill yjs-nextjs

安装后在 Claude Code 中输入/yjs-nextjs确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

AGENTS.md
metadata.json
assets/templates/
_template.md
references/
_sections.md
hist-scope-undo-by-origin.md
hist-snapshots-require-gc-disabled.md
hist-wait-for-indexeddb-sync.md
host-authorize-rooms-not-updates.md
host-pin-the-yjs-13-track.md
host-route-handlers-cannot-upgrade.md
host-trpc-is-not-the-sync-channel.md
host-vercel-lacks-instance-affinity.md
host-websocket-server-is-not-production.md
model-nested-types-not-plain-objects.md
model-seed-the-document-once.md
model-yarray-has-no-move.md
model-ytext-only-for-prose.md
pres-awareness-is-ephemeral.md
pres-relative-positions-for-cursors.md
react-keep-yjs-client-only.md
react-stable-doc-and-provider.md
react-subscribe-via-usesyncexternalstore.md
ui-do-not-drive-inputs-from-the-doc.md
ui-tiptap-collaboration-wiring.md
wire-base64-not-superjson.md
wire-compaction-needs-a-doc-roundtrip.md
wire-rehydrate-to-uint8array.md
wire-send-updates-not-state.md

详细介绍

Next.js 16、tRPC 与 shadcn/ui 中的 Yjs

在 App Router 代码库中使用 Yjs 13.6.31——协同编辑带来的决策,以及如何解决这些问题。本文旨在让 Agent 在编写或审查代码时应用这些规则。每条规则都指出它要纠正的错误默认做法;对于模型本来就能处理好的内容,不设规则。

这些问题大多不会立即显现。Yjs 会收敛,编辑器仍能正常工作,数据丢失却要等到后来才暴露为“我的修改被还原了”——因此,以下规则会先给出问题发生的证据,其中大部分是直接针对 Yjs 13.6.31 测得的,而非仅凭断言。

适用场景

  • 在 Next.js 16 App Router 应用中构建协同编辑、在线状态或离线同步功能
  • 为文档模型选择共享类型,或审查在并发情况下会丢失编辑内容的模型
  • 决定同步后端的运行位置,或在 Yjs Provider 旁接入 tRPC procedure
  • 将 Y.Doc 状态持久化到数据库,或压缩存储的更新
  • 将 Yjs 文档绑定到 React——Provider 生命周期、订阅、Strict Mode、SSR
  • 将 Tiptap 或 shadcn/ui 表单控件接入实时文档
  • 调试已完成同步,却出现内容重复、空白或还原的文档

本技能不涵盖通用的 Next.js App Router 模式(请使用 nextjs 技能)、通用 tRPC 用法(trpc)或 shadcn/ui 组件约定(shadcn)——只涵盖这些内容与 CRDT 交互的部分。

版本锁定

规则针对 Yjs 13.6.31、y-websocket 3.0.0、y-protocols 1.0.7 和 y-indexeddb 9.0.12。Yjs 正在迁移到 @y/* 作用域下的 v14,多个软件包已将 latest 或 main 切换到该预发布版本轨道——@y/[email protected] 依赖 yjs@^14.0.0-7。安装任何内容之前,请参阅 host-pin-the-yjs-13-track。

规则类别

#类别前缀涵盖内容
1同步拓扑与依赖项host-同步循环的运行位置、要基于哪种后端构建、信任边界的位置,以及哪些版本属于 v13 轨道
2二进制传输与持久化wire-在 JSON 边界间传输 Uint8Array 更新并写入存储
3在共享类型中建模状态model-每个字段应使用哪种共享类型——决定并发编辑是合并还是互相覆盖
4文档生命周期与 React 绑定react-跨渲染共享一个文档、Strict Mode、订阅、服务端边界
5撤销、快照与离线加载hist-按来源区分历史记录、垃圾回收、加载顺序
6在线状态与光标pres-临时在线状态,以及在并发编辑后仍能定位的光标
7编辑器与表单集成ui-Tiptap 和 shadcn/ui 表单控件与实时文档的集成

快速参考

1. 同步拓扑与依赖项
2. 二进制传输与持久化
3. 在共享类型中建模状态
4. 文档生命周期与 React 绑定
5. 撤销、快照与离线加载
6. Awareness 与光标
7. 编辑器与表单集成

如何使用

在需要做出相关决策时,阅读对应的参考文件。每条规则都会指出它要纠正的错误默认做法,然后展示规范做法;如果错误做法确实容易让人踩坑,还会对比错误与正确的写法。

排查问题而非编写代码时,请从症状入手:

症状优先阅读
文档加载后为空白wire-rehydrate-to-uint8array、hist-wait-for-indexeddb-sync
内容出现两次model-seed-the-document-once、ui-tiptap-collaboration-wiring
某人的编辑被悄悄还原model-nested-types-not-plain-objects、hist-scope-undo-by-origin
拖动时列表项重复model-yarray-has-no-move
两个编辑器始终无法互相看到对方的内容host-vercel-lacks-instance-affinity
用户编辑了其无权访问的字段host-authorize-rooms-not-updates
协作者离开后,其头像仍然显示pres-awareness-is-ephemeral
输入时光标跳到末尾ui-do-not-drive-inputs-from-the-doc
无限渲染循环或快照错误react-subscribe-via-usesyncexternalstore
在生产环境中正常运行,在开发环境中却出错react-stable-doc-and-provider

参考文件

文件描述
references/_sections.md分类定义与排序
assets/templates/_template.md新规则模板
AGENTS.md自动生成的所有规则目录
metadata.json版本与来源引用

相关技能

  • nextjs — CRDT 层之外的 App Router 缓存、Server Components 和路由
  • trpc — 完整的 tRPC v11 router、link 和订阅规则
  • shadcn — 本技能所依赖的组件组合与表单模式
  • zod — 此处 tRPC procedure 示例中使用的验证器

评论

支持 Markdown