Cross the edge.Keep control.
deskway is a software KVM for Linux machines running Wayland. Push your pointer past a screen edge and your keyboard, mouse, and clipboard follow it to the next box, over an encrypted QUIC channel. No X11 bridge, no portal, no compromise on the compositor.
- zwp_virtual_keyboard_v1
- zwlr_virtual_pointer_v1
- quinn + rustls
- Hyprland / wlroots
A handoff model built for real Wayland sessions.
No X11 bridge, no generic remote desktop loop, no portal dependency. deskway keeps the local machine responsible for capture and gives the target compositor native virtual input events.
Session sequence
edge -> tunnel -> inject
-
01
Capture at the source
flowd reads raw keyboard and pointer events straight off
/dev/inputand watches for the edge you configured. -
02
Switch on intent
Push the pointer past that edge and forwarding starts immediately. The server keeps the reclaim hotkey live the whole time.
-
03
Inject natively
flowc turns that stream into compositor-level virtual keyboard and pointer events, no X11 bridge involved.
flowd
- input
- evdev
- bind
- 0.0.0.0:7832
- trigger
- screen edge
flowc
- keyboard
- virtual_keyboard_v1
- pointer
- virtual_pointer_v1
- fallback
- ydotool optional
Three processes, one operating surface.
The pieces stay small on purpose: one daemon captures, one daemon injects, and one CLI handles pairing, trust, and runtime status.
flowc
flowctl
Input forwarding is treated like a privileged channel.
The page leads with security because the product sends keyboard events. Pairing is short-lived, trust is explicit, and reclaim is enforced where forwarded input is produced.
60-second PSK
flowd prints a short pairing code. flowc must present it during first contact.
DESKWAY_PSK=482159 flowctl pair studio-rig:7832TLS 1.3 over QUIC
rustls protects the session before keyboard or pointer events leave the server.
quinn + rustls + rcgenTOFU fingerprint
Known peers are pinned after the first handshake. Unknown certificates stay out.
trusted_peersHard stop hotkey
Super+Ctrl+BackSpace stops forwarding at the protocol level and returns control.
instant server reclaimCurrent surface area, tied to shipped code.
The matrix traces each capability to configuration, protocol, packaging, or a source module in the current build.
| Feature | Description | Implementation | Status |
|---|---|---|---|
| Edge trigger | Push cursor to a configured screen edge to switch control. | server.edge = "right" | live |
| TOFU pinning | Certificate fingerprint pinned after first PSK authentication. | rcgen + rustls | live |
| Clipboard sync | Bidirectional text clipboard between paired machines. | wl-clipboard | live |
| Emergency key | Server-side reclaim even if the target compositor misbehaves. | protocol-level | live |
| systemd units | User services for startup and recovery behavior. | systemd/ | live |
| Arch packaging | Installs daemons, services, and group setup from a PKGBUILD. | PKGBUILD | live |
| Clipboard size cap | Reject text clipboard payloads above the configured safety limit. | clipboard.max_size_kib | live |
| DPI scaling | Scale relative pointer deltas from exchanged server and client DPI values. | Caps.dpi | live |
Built in public enough to inspect. Private while the protocol settles.
The switching model, pairing flow, and clipboard bridge are implemented and unit-tested; the repository stays closed until they've been run across real hardware, not just CI. Progress lives on the portfolio.