{"_id":"y-atproto","_rev":"4-5700d1b52f13fea038561b22e37d28d5","name":"y-atproto","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"y-atproto","version":"1.0.0","license":"MIT","_id":"y-atproto@1.0.0","maintainers":[{"name":"zas","email":"bobgant@outlook.com"}],"dist":{"shasum":"d7b8bb785fdb0f30fe60e8405e7a7eb20480adb9","tarball":"https://registry.npmjs.org/y-atproto/-/y-atproto-1.0.0.tgz","fileCount":56,"integrity":"sha512-jCctTKzQT/rXp2SwpkjV4p+8mCBkab99NRByYgTw4BDY+4aCzqWL+4icQKPHvxUuI11KCMetxhT9Fiz9AK1uxg==","signatures":[{"sig":"MEYCIQCSIAduz0kcJUpnC7KN3lwvO/5gfyvX/qfqL8jpPaMDiAIhANp/5/8NL+HSnjnEW+axOtKfNEdeOnqK+WUMANm5zYN2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117046},"main":"out/index.js","type":"module","_from":"file:y-atproto-1.0.0.tgz","types":"./out/index.d.ts","scripts":{"build":"pnpm build:typelex && pnpm build:lex && tsc && pnpm build:demos","build:lex":"lex-cli generate","build:demos":"pnpm -r build","deploy:demos":"pnpm build:demos && pnpm deploy:demo-excalidraw && pnpm deploy:demo-monaco && pnpm deploy:demo-prosemirror","build:typelex":"typelex compile io.github.uwx.yjs.*","deploy:demo-monaco":"wispctl deploy maxine.puppykitty.racing -p demos/monaco-react/dist -s y-atproto-demo-monaco --store \".wisp-store\"","deploy:demo-excalidraw":"wispctl deploy maxine.puppykitty.racing -p demos/excalidraw/dist -s y-atproto-demo-excalidraw --store \".wisp-store\"","deploy:demo-prosemirror":"wispctl deploy maxine.puppykitty.racing -p demos/react-prosemirror/dist -s y-atproto-demo-prosemirror --store \".wisp-store\""},"_npmUser":{"name":"zas","email":"bobgant@outlook.com"},"_resolved":"C:\\Users\\Maxine\\AppData\\Local\\Temp\\022b7f668fb68c423dc7b9ef071f64ed\\y-atproto-1.0.0.tgz","_integrity":"sha512-jCctTKzQT/rXp2SwpkjV4p+8mCBkab99NRByYgTw4BDY+4aCzqWL+4icQKPHvxUuI11KCMetxhT9Fiz9AK1uxg==","_npmVersion":"11.11.0","description":"A [Yjs](https://yjs.dev/) CRDT provider that syncs documents over the [AT Protocol](https://atproto.com/). Documents are stored as ATProto records and real-time updates are delivered via [Jetstream](https://github.com/bluesky-social/jetstream).","directories":{},"_nodeVersion":"25.8.0","dependencies":{"yjs":"^13.6.29","lib0":"^0.2.117","js-base64":"^3.7.8","y-atproto":"^1.0.0","@atcute/tid":"^1.1.2","kitty-agent":"13.0.1","y-protocols":"^1.0.7","@atcute/client":"^4.2.1","@atcute/atproto":"^3.1.10","@atcute/lexicons":"^1.2.9","@atcute/jetstream":"^1.1.2","@atcute/uint8array":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"@typelex/cli":"^0.4.0","@biomejs/biome":"1.9.4","@atcute/lex-cli":"^2.5.3","@typelex/emitter":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/y-atproto_1.0.0_1773221616352_0.698836189341945","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"y-atproto","version":"1.0.1","license":"MIT","_id":"y-atproto@1.0.1","maintainers":[{"name":"zas","email":"bobgant@outlook.com"}],"dist":{"shasum":"a92ddaa2054bdb0d70d5a9ccc0bd3d37e140064b","tarball":"https://registry.npmjs.org/y-atproto/-/y-atproto-1.0.1.tgz","fileCount":18,"integrity":"sha512-NEZ92btsjIqG5bHfPzKnaUZtf3W3/mIc/TK/YIcpDsmZzI6ydWCJBFeGO8d6X8AzxXYJfehidm02nT2TU3Z2OQ==","signatures":[{"sig":"MEUCIQC7RqvhmVK0Xpa68Z7FvHcm6bEu3YZ+WCGmyp+9Nabn1gIgARJbJAfv/fJfqf/4jZpBZpSENk/pJaqmVDohdKwqq5g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47707},"main":"out/index.js","type":"module","_from":"file:y-atproto-1.0.1.tgz","types":"out/index.d.ts","scripts":{"build":"pnpm build:typelex && pnpm build:lex && tsc && pnpm build:demos","build:lex":"lex-cli generate","build:demos":"pnpm -r build","deploy:demos":"pnpm build:demos && pnpm deploy:demo-excalidraw && pnpm deploy:demo-monaco && pnpm deploy:demo-prosemirror","build:typelex":"typelex compile io.github.uwx.yjs.*","deploy:demo-monaco":"wispctl deploy maxine.puppykitty.racing -p demos/monaco-react/dist -s y-atproto-demo-monaco --store \".wisp-store\"","deploy:demo-excalidraw":"wispctl deploy maxine.puppykitty.racing -p demos/excalidraw/dist -s y-atproto-demo-excalidraw --store \".wisp-store\"","deploy:demo-prosemirror":"wispctl deploy maxine.puppykitty.racing -p demos/react-prosemirror/dist -s y-atproto-demo-prosemirror --store \".wisp-store\""},"_npmUser":{"name":"zas","email":"bobgant@outlook.com"},"_resolved":"C:\\Users\\Maxine\\AppData\\Local\\Temp\\7838dcc5ea67557671a66fc5596573cf\\y-atproto-1.0.1.tgz","_integrity":"sha512-NEZ92btsjIqG5bHfPzKnaUZtf3W3/mIc/TK/YIcpDsmZzI6ydWCJBFeGO8d6X8AzxXYJfehidm02nT2TU3Z2OQ==","_npmVersion":"11.11.0","description":"A [Yjs](https://yjs.dev/) CRDT provider that syncs documents over the [AT Protocol](https://atproto.com/). Documents are stored as ATProto records and real-time updates are delivered via [Jetstream](https://github.com/bluesky-social/jetstream).","directories":{},"_nodeVersion":"25.8.0","dependencies":{"yjs":"^13.6.29","lib0":"^0.2.117","js-base64":"^3.7.8","y-atproto":"^1.0.0","@atcute/tid":"^1.1.2","kitty-agent":"13.0.1","y-protocols":"^1.0.7","@atcute/client":"^4.2.1","@atcute/atproto":"^3.1.10","@atcute/lexicons":"^1.2.9","@atcute/jetstream":"^1.1.2","@atcute/uint8array":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"@typelex/cli":"^0.4.0","@biomejs/biome":"1.9.4","@atcute/lex-cli":"^2.5.3","@typelex/emitter":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/y-atproto_1.0.1_1773222125015_0.8273471207042935","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"y-atproto","version":"1.1.0","license":"MIT","_id":"y-atproto@1.1.0","maintainers":[{"name":"zas","email":"bobgant@outlook.com"}],"dist":{"shasum":"f8c7fe8815112e71d5147b788caef3c459e4736a","tarball":"https://registry.npmjs.org/y-atproto/-/y-atproto-1.1.0.tgz","fileCount":18,"integrity":"sha512-t1tFyCVViH1PueuHvIRrYtY//F2YB760C3HRMHLv/lNcXYuvq+jeI+5qzpWWTbktBVmzcYlua1OfgR2WdMH7gQ==","signatures":[{"sig":"MEQCIE6Bo4HY2FkbbKkgk14AZ+42SsIkTS9FbqONlqnp806FAiBdlBOIAhhdW7ifYRZnMNbcV3mklETj7RiV8kyovL8d+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47791},"main":"out/index.js","type":"module","_from":"file:y-atproto-1.1.0.tgz","types":"out/index.d.ts","scripts":{"build":"pnpm build:typelex && pnpm build:lex && tsc && pnpm build:demos","build:lex":"lex-cli generate","build:demos":"pnpm -r build","deploy:demos":"pnpm build:demos && pnpm deploy:demo-excalidraw && pnpm deploy:demo-monaco && pnpm deploy:demo-prosemirror","build:typelex":"typelex compile io.github.uwx.yjs.*","deploy:demo-monaco":"wispctl deploy maxine.puppykitty.racing -p demos/monaco-react/dist -s y-atproto-demo-monaco --store \".wisp-store\"","deploy:demo-excalidraw":"wispctl deploy maxine.puppykitty.racing -p demos/excalidraw/dist -s y-atproto-demo-excalidraw --store \".wisp-store\"","deploy:demo-prosemirror":"wispctl deploy maxine.puppykitty.racing -p demos/react-prosemirror/dist -s y-atproto-demo-prosemirror --store \".wisp-store\""},"_npmUser":{"name":"zas","email":"bobgant@outlook.com"},"_resolved":"C:\\Users\\Maxine\\AppData\\Local\\Temp\\c892ceb4a3c545820994c33f8e9a5a5c\\y-atproto-1.1.0.tgz","_integrity":"sha512-t1tFyCVViH1PueuHvIRrYtY//F2YB760C3HRMHLv/lNcXYuvq+jeI+5qzpWWTbktBVmzcYlua1OfgR2WdMH7gQ==","_npmVersion":"11.11.0","description":"A [Yjs](https://yjs.dev/) CRDT provider that syncs documents over the [AT Protocol](https://atproto.com/). Documents are stored as ATProto records and real-time updates are delivered via [Jetstream](https://github.com/bluesky-social/jetstream).","directories":{},"_nodeVersion":"25.8.0","dependencies":{"lib0":"^0.2.117","js-base64":"^3.7.8","@atcute/tid":"^1.1.2","@atcute/client":"^4.2.1","@atcute/atproto":"^3.1.10","@atcute/lexicons":"^1.2.9","@atcute/jetstream":"^1.1.2","@atcute/uint8array":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"yjs":"^13.6.29","kitty-agent":"^13.0.1","y-protocols":"^1.0.7","@typelex/cli":"^0.4.0","@biomejs/biome":"1.9.4","@atcute/lex-cli":"^2.5.3","@typelex/emitter":"^0.4.0"},"peerDependencies":{"yjs":"^13.6.29","kitty-agent":"^13.0.1","y-protocols":"^1.0.7"},"_npmOperationalInternal":{"tmp":"tmp/y-atproto_1.1.0_1773226407305_0.208877941845524","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"author":{"name":"uwx","email":"maxine@cybergal.com","url":"maxine"},"name":"y-atproto","type":"module","license":"MIT","version":"2.0.0","main":"out/index.js","types":"out/index.d.ts","repository":{"type":"git","url":"git+https://github.com/uwx/y-atproto.git"},"devDependencies":{"@atcute/lex-cli":"^2.5.3","@biomejs/biome":"1.9.4","@typelex/cli":"^0.4.0","@typelex/emitter":"^0.4.0","kitty-agent":"13.1.0","typescript":"6.0.0-dev.20260324","vitest":"^4.1.2","wispctl":"^1.0.10","y-protocols":"^1.0.7","yjs":"^13.6.29"},"dependencies":{"@atcute/atproto":"^3.1.10","@atcute/client":"^4.2.1","@atcute/jetstream":"^1.1.2","@atcute/lexicons":"^1.2.9","@atcute/tid":"^1.1.2","@atcute/uint8array":"^1.1.1","js-base64":"^3.7.8","lib0":"^0.2.117"},"peerDependencies":{"kitty-agent":"^13.0.1","y-protocols":"^1.0.7","yjs":"^13.6.29"},"scripts":{"build:typelex":"typelex compile io.github.uwx.yjs.*","build:lex":"lex-cli generate","build:demos":"pnpm -r build","build":"pnpm build:typelex && pnpm build:lex && tsc && pnpm build:demos","deploy:demo-excalidraw":"wispctl deploy maxine.puppykitty.racing -p demos/excalidraw/dist -s y-atproto-demo-excalidraw --store \".wisp-store\"","deploy:demo-monaco":"wispctl deploy maxine.puppykitty.racing -p demos/monaco-react/dist -s y-atproto-demo-monaco --store \".wisp-store\"","deploy:demo-prosemirror":"wispctl deploy maxine.puppykitty.racing -p demos/react-prosemirror/dist -s y-atproto-demo-prosemirror --store \".wisp-store\"","deploy:demos":"pnpm build:demos && pnpm deploy:demo-excalidraw && pnpm deploy:demo-monaco && pnpm deploy:demo-prosemirror"},"_id":"y-atproto@2.0.0","description":"A [Yjs](https://yjs.dev/) CRDT provider that syncs documents over the [AT Protocol](https://atproto.com/). Documents are stored as ATProto records and real-time updates are delivered via [Jetstream](https://github.com/bluesky-social/jetstream).","bugs":{"url":"https://github.com/uwx/y-atproto/issues"},"homepage":"https://github.com/uwx/y-atproto#readme","_integrity":"sha512-VY7NXQP2NpaCQKkM4QYCXHg7pRWOC1meuT50g5eLDVdZOj9jpZ/uLVBHRxH/M4T+sHHYXf5sgPpVJ7BA7qT3BA==","_resolved":"C:\\Users\\Maxine\\AppData\\Local\\Temp\\62df1c37b9067bd6144c5138ad6053a2\\y-atproto-2.0.0.tgz","_from":"file:y-atproto-2.0.0.tgz","_nodeVersion":"25.8.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-VY7NXQP2NpaCQKkM4QYCXHg7pRWOC1meuT50g5eLDVdZOj9jpZ/uLVBHRxH/M4T+sHHYXf5sgPpVJ7BA7qT3BA==","shasum":"b8feda35a8a6182ec16a401014c307e9a95404aa","tarball":"https://registry.npmjs.org/y-atproto/-/y-atproto-2.0.0.tgz","fileCount":24,"unpackedSize":21336104,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCVrzsPAJjHc06OZWZEAov1vFRVQLbT14huzxsEmTsSMQIhAIkoCkyp9ZN6AP5xf/7AyPflsrLmWRrACYdAN4V+E4m7"}]},"_npmUser":{"name":"zas","email":"bobgant@outlook.com"},"directories":{},"maintainers":[{"name":"zas","email":"bobgant@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/y-atproto_2.0.0_1775565549140_0.9277486469808833"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-11T09:33:36.270Z","modified":"2026-04-07T12:39:09.524Z","1.0.0":"2026-03-11T09:33:36.486Z","1.0.1":"2026-03-11T09:42:05.222Z","1.1.0":"2026-03-11T10:53:27.447Z","2.0.0":"2026-04-07T12:39:09.425Z"},"license":"MIT","description":"A [Yjs](https://yjs.dev/) CRDT provider that syncs documents over the [AT Protocol](https://atproto.com/). Documents are stored as ATProto records and real-time updates are delivered via [Jetstream](https://github.com/bluesky-social/jetstream).","maintainers":[{"name":"zas","email":"bobgant@outlook.com"}],"readme":"# y-atproto\n\nA [Yjs](https://yjs.dev/) CRDT provider that syncs documents over the [AT Protocol](https://atproto.com/). Documents are\nstored as ATProto records and real-time updates are delivered via\n[Jetstream](https://github.com/bluesky-social/jetstream).\n\n## Breaking changes in 2.0.0\nA new algorithm for resuming rooms from update records has been introduced, which should increase reliability when\nmultiple clients are using the app at the same time. Existing rooms will still be compatible but the initial download\nmay take longer. Please let me know if you experience any issues with the new resume behavior.\n\n## How it works\n\n- Each collaborative session is represented by a **room** record (`io.github.uwx.yjs.room`) in the user's ATProto\nrepository.\n- Document updates are written as `io.github.uwx.yjs.update` records, with small updates stored inline and large updates\n(>1 MB) stored as blobs.\n- Real-time sync is achieved by subscribing to Jetstream for new update and awareness records.\n- Rooms can optionally be **encrypted** (AES-256-GCM with PBKDF2 key derivation) and restricted to an **allowlist of**\n**DIDs**.\n- Awareness (cursor positions, user presence) is supported via `io.github.uwx.yjs.awareness` records.\n\n## Installation\n\n```\npnpm install y-atproto\n```\n\n## Usage\n\n### Creating a new room\n\n```ts\nimport { Doc } from \"yjs\";\nimport AtprotoProvider from \"y-atproto\";\n\nconst ydoc = new Doc();\n\nconst { provider, room } = await AtprotoProvider.createNew({\n  secret: \"optional-password\",\n  repo: did,\n  handler: agent,\n  ydoc,\n  autosaveInterval: 1000,\n});\n```\n\n### Joining an existing room\n\n```ts\nconst provider = await AtprotoProvider.resume({\n  secret: \"optional-password\",\n  repo: did,\n  handler: agent,\n  room: \"at://did:plc:.../io.github.uwx.yjs.room/...\",\n  ydoc,\n  autosaveInterval: 1000,\n});\n```\n\n### Options\n\n| Option | Type | Description |\n|---|---|---|\n| `secret` | `string` | Optional password for end-to-end encryption |\n| `repo` | `ActorIdentifier` | DID or handle of the authenticated user |\n| `handler` | `FetchHandler \\| KittyAgent` | Authenticated AT Protocol agent |\n| `ydoc` | `Doc` | Yjs document to sync |\n| `autosaveInterval` | `number` | Milliseconds between flushes of queued updates |\n| `resendAllUpdates` | `boolean` | If true, always send the full document state |\n| `fullUpdateRate` | `number` | Probability (0-1) of sending a full update on each flush (default 0.1) |\n| `awareness` | `Awareness` | Custom Yjs awareness instance to reuse |\n| `awarenessLive` | `boolean` | If true, broadcast awareness on every local change instead of on an interval |\n| `awarenessBroadcastInterval` | `number` | Milliseconds between awareness broadcasts (default 29000) |\n\n## Demos\n\n- **demos/monaco-react** -- Collaborative Monaco editor. Live at [y-atproto-demo-monaco.wisp.place](https://y-atproto-demo-monaco.wisp.place)\n- **demos/react-prosemirror** -- Collaborative ProseMirror editor. Live at [y-atproto-demo-prosemirror.wisp.place](https://y-atproto-demo-prosemirror.wisp.place)\n- **demos/excalidraw** -- Collaborative whiteboard using Excalidraw. Live at [y-atproto-demo-excalidraw.wisp.place](https://y-atproto-demo-excalidraw.wisp.place)\n\n## Building\n\nRequires [pnpm](https://pnpm.io/).\n\n```\npnpm install\npnpm build\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md","homepage":"https://github.com/uwx/y-atproto#readme","repository":{"type":"git","url":"git+https://github.com/uwx/y-atproto.git"},"author":{"name":"uwx","email":"maxine@cybergal.com","url":"maxine"},"bugs":{"url":"https://github.com/uwx/y-atproto/issues"}}