1# crates 2 3The portable Rust core of Whiskers, as small crates with no user 4interface. Each platform shell (the Kotlin and Compose app on the Fire 5tablet, later the parents' app) draws and listens; everything else lives 6here. The shape is the estate's "one Rust core, native shells". 7 8| Crate | What | 9|---|---| 10| [`whiskers-core`](whiskers-core/) | The conversation pipeline, the ports it runs through (`Model`, `Guard`, `Log`, `Clock`) and the log format. | 11| [`whiskers-gateway`](whiskers-gateway/) | `Model` over the Anthropic Messages API, reached through an operator-run gateway. | 12| [`whiskers-pet`](whiskers-pet/) | How the cat behaves: gaze, poke, dizzy, sleep. No drawing. | 13| [`whiskers-icons`](whiskers-icons/) | The curated pixel icons a fact may be pictured with (`allowlist.txt`), their reader and their Kotlin form. | 14| [`whiskers-art`](whiskers-art/) | The cat's drawing and motion as data: the grey cat in every mood, drawn by the website and the app from the same definition. | 15| [`whiskers-guard`](whiskers-guard/) | What Jev is asked about a message and what the answer means; the tablet's client. | 16| [`whiskers-ports`](whiskers-ports/) | The backend's interface in Whiskers' own words: hubs that `merge`, the journal, pictures, the allowance, the judge, the voice, the thinker, secrets, a clock. Builds for wasm. | 17| [`whiskers-service`](whiskers-service/) | What the service does with a request, generic over those ports. Plain request in, plain response out. Builds for wasm. | 18| [`whiskers-conformance`](whiskers-conformance/) | The in-memory adapter of the ports, and the suite of contract laws every adapter must pass. | 19| [`whiskersd`](whiskersd/) | The native adapter: files, `ureq` and a Jev thread behind the ports, served over HTTP. Holds the keys and answers the client. | 20| [`whiskers-cli`](whiskers-cli/) | The same pipeline from a terminal, for trying the persona against the real services. | 21| [`whiskers-engine`](whiskers-engine/) | The cat, the conversation, the parents' view and the voice allowance in one `Send + Sync` object. | 22| [`whiskers-ffi`](whiskers-ffi/) | The UniFFI boundary for Kotlin; mirrors the engine, no logic. |