Low-latency screen streaming over raw TCP. No GPU required. No account. No relay. Just a socket.
neyrd loosely translates to "Not Yet Another Remote Desktop". You can call it nerd though.
Grab the latest binaries from the Releases page:
neyrd.emitter— run on the host (the machine you want to stream from)neyrd.receiver— run on the client (the machine you watch on)
Make them executable on Linux:
chmod +x neyrd.emitter neyrd.receiverRun neyrd.receiver on the client machine. It will listen on TCP port 22222 and display the stream once the emitter connects.
Run neyrd.emitter on the host machine, pointing it at the receiver's IP address:
# Linux (X11)
./neyrd.emitter --receiver-ip <receiver-ip> --adapter X11
# macOS (ScreenCaptureKit)
./neyrd.emitter --receiver-ip <receiver-ip> --adapter ScreenCaptureKit| Flag | Description |
|---|---|
--receiver-ip |
IP address of the machine running neyrd.receiver |
--adapter |
Capture backend: X11 (Linux) or ScreenCaptureKit (macOS) |
--preset |
Name of a .neyrd preset file (replaces both --receiver-ip and --adapter) |
A preset is a .neyrd file that stores a receiver IP and capture adapter so you don't have to type them every time.
Example — home.neyrd:
name=home
ip=192.168.1.42
adapter=X11
Use it with:
./neyrd.emitter --preset homeThe emitter looks for <name>.neyrd in the current working directory. --preset is mutually exclusive with both --receiver-ip and --adapter.
neyrd has two components:
- Emitter — runs on the host machine. Captures frames using native platform APIs, encodes them, and streams over TCP port 22222.
- Receiver — runs on the client machine. Receives, decodes, and renders frames in real time.
The connection is bi-directional, enabling input events (pointer, keyboard) to be sent back to the host.
- TCP port 22222 open on both machines
- A reasonably modern CPU — encoding/decoding 30 FPS is compute-intensive and performance will degrade under heavy load
| Role | Platform | Capture backend |
|---|---|---|
| Emitter | macOS | ScreenCaptureKit |
| Emitter | Linux | X11 |
| Receiver | macOS / Linux | Avalonia UI |
- 30 FPS stable stream
- ~20–50ms end-to-end latency on LAN
| Stage | Budget |
|---|---|
| Capture → encode | ~5–10ms |
| Network transit | ~5–20ms |
| Decode → display | ~5–10ms |
Not an RDP client. No RDP protocol involved — neyrd uses its own framing over a plain TCP socket.
| Tool | Protocol | Latency | Open source | Self-hosted |
|---|---|---|---|---|
| neyrd | Raw TCP (custom framing) | ~20–50ms | Yes | Yes |
| RDP | Microsoft RDP | 50–150ms | No | Yes |
| TeamViewer | Proprietary (relay-based) | 100–300ms+ | No | No |
| VNC | RFB | 50–200ms | Yes | Yes |
| Parsec | Proprietary | ~15–30ms | No | No |
| Sunshine/Moonlight | RTSP/custom | ~15–40ms | Yes | Yes |
Latency figures are approximate end-to-end estimates on LAN and vary by hardware and network conditions.
Key differences:
- RDP / VNC — general-purpose protocols with broad feature sets (clipboard, audio, file transfer). neyrd is video-only with minimal overhead and no protocol negotiation complexity.
- TeamViewer — traffic is routed through relay servers. neyrd is direct TCP with no third-party involvement and no account required.
- Parsec — closest in goals (low-latency streaming), but closed-source, requires an account, and relies on GPU encoding. neyrd works on any CPU-equipped machine.
- Sunshine/Moonlight — the strongest open-source alternative, but requires a GPU-capable host (NVIDIA, AMD, or Intel). neyrd is the open-source, self-hosted option that works without one.