# nigig-lite Shared, dependency-light crates for the nigig / nimanyatta family. ## `crates/common` — `nigig-common` The shared foundation crate consumed by the `nimanyatta` chat/sync server (as a path dependency from `nimanyatta/Cargo.toml`) and by its load-test suites: - **`ids`** — strongly-typed ULID identifiers (`UserId`, `RoomId`, `EventId`, `DeviceId`) that serialise in prefixed wire form (`user_01H…`). - **`errors`** — the unified `AppError` model: HTTP status mapping, stable machine-readable codes, and an xitca-web `Service` impl that renders JSON error bodies. - **`auth`** — REST DTOs for register/login/refresh/logout, token pairs, and the `UserProfile` record shape. - **`rooms`** — room, membership, timeline-event and message-content models plus the rooms REST DTOs. - **`roles`** — server/room/custom role and permission model (`PermissionSet`, `ResolvedPermissions`). - **`sync`** — the `/sync` request/response contract (filters, pagination tokens). - **`protocol`** — the WebSocket chat protocol (`ClientToServerMsg`, `ServerToClientMsg`, presence, receipts) mirrored from `nimanyatta/crates/nimanyatta-protocol`. - **`validatable`** — shared input validators (username/password/message body rules). The crate is standalone (empty `[workspace]` table) and has its own unit tests (`cargo test` → 21 tests). The WebSocket wire shapes are kept byte-compatible with `nimanyatta/crates/nimanyatta-protocol` — the client library — so both sides of the socket agree on field names and tagging.