# slap_yjs v0.4.0 - Table of Contents > Yjs documents stored in Durable Streams (y_ex). ## Pages - [slap_yjs](readme.md) - [Changelog](changelog.md) - [LICENSE](license.md) ## Modules - Documents - [Slap.Yjs.DocServer](Slap.Yjs.DocServer.md): A `Yex.DocServer` whose document is stored with `Slap.Yjs.Store`, and shared with the servers of the same document on other nodes through it. - [Slap.Yjs.Docs](Slap.Yjs.Docs.md): The document servers of this node, one per `{module, doc_id}`, started on the first `join/3` and stopped after `:idle_timeout` without subscribers. Each node that has clients for a document runs its own server; the servers share the document through its `.updates` stream and presence through a `:pg` group (see `Slap.Yjs.DocServer`). - [Slap.Yjs.Presence](Slap.Yjs.Presence.md): Publishes an awareness state for a server-side participant, such as an agent or tool. The process subscribes to a document and keeps one client id for its lifetime. - [Slap.Yjs.Store](Slap.Yjs.Store.md): Yjs documents as `Slap.SnapshotLog`s, in the reference `y-durable-streams` server's layout, so its HTTP clients can later read the same documents - Wire format - [Slap.Yjs.Awareness](Slap.Yjs.Awareness.md): Encodes and decodes awareness (presence) updates in the y-protocols format. An update starts with its entry count as a varuint. Each entry contains a client id and clock as varuints, then a length-prefixed JSON state; `"null"` removes the client's state. - [Slap.Yjs.Frame](Slap.Yjs.Frame.md): The framing of Yjs updates in a `.updates` stream, as lib0's `writeVarUint8Array` writes it and the reference `y-durable-streams` provider reads it: each update is its byte size as a varuint, then the update. Frames are concatenated, so a batch of frames is itself valid framing.