Ultra-low-latency desktop control over a USB4 / Thunderbolt cable
GTK4 · libadwaita · Rust · Sunshine · Moonlight · Fedora Tier 1
Status · Roadmap · Architecture · Contributing · Open questions · Brand
Development paused — not ready for daily use. Further work is deferred until Thunderbolt 4 hardware is available for physical two-machine testing. Compatibility detection and the direct-link networking/discovery stack (NetworkManager profile, hotplug, Avahi, peer validation, Polkit prepare) are implemented and unit/simulation-tested, but have never been exercised against real Thunderbolt/USB4 hardware or a second machine. Pairing and desktop streaming are not implemented. See docs/CURRENT_STATUS.md and docs/ROADMAP.md.
CableDesk connects two Linux computers over a direct USB4 or Thunderbolt cable and aims to provide a near-local desktop-control experience — plug in a cable, and the laptop's desktop opens on the desktop computer. It is a native GTK4/libadwaita automation layer around Sunshine (host capture/encoding) and Moonlight (client decode/presentation), not a replacement for either.
CableDesk does not stream over the internet, does not use Wi-Fi as a fallback, and is not a general-purpose remote-desktop tool.
Most remote-desktop tools assume the network already exists. CableDesk starts from the cable: detect real USB4/Thunderbolt hardware honestly, prepare a dedicated direct link, then hand capture and presentation to Sunshine and Moonlight. Built to feel like it could ship with Fedora Workstation — Wayland-first, Polkit/SELinux-aware, no Electron.
An ordinary USB-C cable and port are not enough. USB-C alone does not mean USB4 or Thunderbolt. CableDesk will tell you when the hardware isn't compatible instead of assuming it from the connector shape.
Paused. Development is on hold until Thunderbolt 4 hardware is available; that cable link is required for further testing beyond simulation.
Authoritative board: docs/CURRENT_STATUS.md · docs/ROADMAP.md.
- Cargo workspace, state machine, cable-only error model
- Fedora
PlatformBackend+ NM/Avahi/route/classify/peer libraries - Development-only simulation (
cabledeskctl simulate, Cargo feature) - Agent: hotplug → helper prepare → Avahi →
validate_cable_peer→PairingRequired; cable loss returns toWaitingForCable - Helper: Polkit-gated
PrepareDirectLink(rejects non-direct ifaces) - CLI:
compatibility,status,session,repair-network, … - GTK UI: compatibility groups + live Session panel
- Packaging scaffolding (RPM spec, systemd, Polkit, firewalld zone)
- Physical USB4/Thunderbolt / two-machine validation (docs/HARDWARE_TEST_PLAN.md)
- Pairing (Phase 3), streaming (Phase 4), polish (Phase 5)
- RPM/
rpmlintbuild verification
cargo run -p cabledeskctl --features simulation -- simulate demo
cargo run -p cabledesk-agent &
cargo run -p cabledeskctl -- sessionTier 1 (actively developed): Fedora Workstation, GNOME, Wayland, x86_64, SELinux enforcing, firewalld enabled.
Other distributions are planned — see docs/DISTRO_SUPPORT.md. Do not assume CableDesk works there yet.
CableDesk is not packaged for end users yet.
git clone https://github.com/loafdaddy/CableDesk.git
cd CableDesk
./scripts/dev-setup.sh # checks/installs development dependencies (asks first)
./scripts/dev-build.sh # cargo fmt --check, build, clippy, test
./scripts/dev-install.sh # installs user-level files; asks before any root/system changescabledeskctl compatibility # hardware/compatibility report
cabledesk # GTK UI (compatibility + live Session)
systemctl --user start cabledesk-agent # background agent
cabledeskctl status # connection state
cabledeskctl session # JSON session snapshot (iface, peer, errors)
cabledeskctl repair-network # Polkit-gated prepare via cabledesk-helper
./scripts/dev-uninstall.sh # remove what the scripts installed# Development-only simulation (never enable in production packages)
cargo run -p cabledeskctl --features simulation -- simulate demo| Doc | What it covers |
|---|---|
| docs/PROJECT_PLAN.md | Goals, phases, non-goals |
| docs/ARCHITECTURE.md | Component layout and data flow |
| docs/SECURITY.md / docs/THREAT_MODEL.md | Security model |
| docs/NETWORKING.md | thunderbolt-net, NetworkManager, discovery |
| docs/POWER_DELIVERY.md | USB-C PD and charging research |
| docs/UPSTREAM_INTEGRATION.md | Sunshine / Moonlight integration |
| docs/PACKAGING.md | RPM packaging and hardening |
| docs/ROADMAP.md | Phased plan |
| docs/CURRENT_STATUS.md | Audited phase status |
| docs/HARDWARE_TEST_PLAN.md | Deferred physical tests |
| docs/adr/ | Architecture decision records |
| data/brand/README.md | Lockup, mark, palette |
GPL-3.0-or-later. See LICENSE. CableDesk depends on and manages Sunshine and Moonlight, both also GPL-licensed — see docs/UPSTREAM_INTEGRATION.md.
See CONTRIBUTING.md. Contributors are welcome — research, Rust, GTK, packaging, docs, and hardware testing all help.