docs: list neshub, and say the tree does not know what it runs

The payload-independence rule is the one thing about this repo that is
easy to violate by being helpful. Stating it where it will be read before
the first edit is cheaper than catching it in review.
This commit is contained in:
Wanjohi
2026-08-26 19:03:33 +03:00
parent 40b80d4b14
commit c103e1257f
2 changed files with 12 additions and 3 deletions

View File

@@ -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. 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 crates/ shared Rust nesprotocol
packages/ shared TS core, auth packages/ shared TS core, auth
docs/ long-form alchemy.md docs/ long-form alchemy.md
@@ -63,7 +63,15 @@ half matters.
**Rust components are guest-side**: they run inside a virtual machine, not on **Rust components are guest-side**: they run inside a virtual machine, not on
the control plane. `nescope` composites, `nescapture` captures and encodes the control plane. `nescope` composites, `nescapture` captures and encodes
frames from inside the workload's own process, `neswire` handles audio, and 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 ## Conventions

View File

@@ -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/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/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. | | [`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), 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 a separate repository: a micro-VM with a real GPU in it, using virtio-gpu native