diff --git a/CLAUDE.md b/CLAUDE.md index d6a00bb3..83eeb84a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,7 +9,7 @@ fact about it and most of the rules below follow from it. Split by *what a thing is*, not by what language it is written in. ``` -apps/ what runs api, auth (TS) · nescope, neswire, nescapture (Rust) +apps/ what runs api, auth (TS) · nescope, neswire, nescapture, neshub (Rust) crates/ shared Rust nesprotocol packages/ shared TS core, auth docs/ long-form alchemy.md @@ -63,7 +63,15 @@ half matters. **Rust components are guest-side**: they run inside a virtual machine, not on the control plane. `nescope` composites, `nescapture` captures and encodes frames from inside the workload's own process, `neswire` handles audio, and -`nesprotocol` is the wire format all three share. None of them talk to the API. +`neshub` muxes all of it into one connection to the client. `nesprotocol` is +the wire format they share. None of them talk to the API. + +**None of them depend on what they are running.** The box starts a payload that +the open components are not allowed to understand, so no code here may branch on +which one it is. `nescope` does mention Steam and Proton in comments — it +implements public Wayland and Vulkan protocols that gamescope also implements, +and those comments say which real case motivated a workaround. That is the +allowed kind: a name in prose, never a dependency in code. ## Conventions diff --git a/README.md b/README.md index aec40ae6..dc2712e1 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,8 @@ control plane. | [`apps/nescope`](apps/nescope) | A headless Wayland compositor for one fullscreen client. A lighter answer to the same problem gamescope solves. | | [`apps/nescapture`](apps/nescapture) | A Vulkan implicit layer. It captures frames from inside the workload's own process and encodes them on the GPU that drew them — no copy out to the CPU and back. | | [`apps/neswire`](apps/neswire) | Audio capture and transport. | -| [`crates/nesprotocol`](crates/nesprotocol) | The wire types all three share, so no two ends can drift apart silently. | +| [`apps/neshub`](apps/neshub) | One connection out of the box. Muxes video, audio, cursor and input into a single QUIC stream to the client. | +| [`crates/nesprotocol`](crates/nesprotocol) | The wire types they all share, so no two ends can drift apart silently. | The hypervisor these run under is [`nesbox`](https://github.com/nestrilabs/nesbox), a separate repository: a micro-VM with a real GPU in it, using virtio-gpu native