Quick Start
There are three ways to get LCXL Remote Desk running. Pick the one that matches your network.
Option 1: Download and Run the Host (Recommended)
Best when the controlled device is on your LAN or has a public IP of its own. The host bundles signaling, STUN / TURN, and the web console, so no extra server is involved and the browser connects to it directly.
Download the host package for your platform from the Releases page:
Platform Package Windows x86_64 tauri-windows-x86_64.zipLinux x86_64 tauri-linux-x86_64.zipmacOS Apple Silicon tauri-macos-aarch64.dmgmacOS Intel tauri-macos-x86_64.dmgEvery package is the Tauri desktop shell. It embeds the host server in-process — running in
defaultmode, with signaling, STUN / TURN and the web console — and adds the locally-rendered Privacy Screen and Whiteboard.Run it:
- Windows / Linux — unpack the zip and launch
lcxl-remote-desk-tauri. The archive holds that executable pluslcxl-remote-desk-serverand astatic/directory (the web console assets); keep all three side by side. - macOS — open the
.dmgand drag LCXL Remote Desktop into Applications, then launch it.
- Windows / Linux — unpack the zip and launch
The shell opens the console in its own window and finishes setup there. From another machine on the network the same console is at
http://<host-address>:8081. The wizard creates the admin account, optionally connects a manager, and configures inbound security and telemetry. After that, control the device from the same LAN — or from anywhere that can reach its public IP.
No public IP, but the device can reach the internet?
In the wizard's connection step — or the Outbound Connection settings page afterwards — set the manager domain to the public server lcxbox.app and paste an API token created in its console. It handles signaling and NAT traversal, and control ends then reach the device through https://lcxbox.app.
That public server currently runs in the United States, so access from outside the US may be slow or fail outright. If latency matters or the link is unreliable, self-host signaling with Option 2 instead.
Option 2: Self-Hosted Signaling Server
Use this when the controlled device has no public IP and you want to own the whole path: rent a VPS with a public IP, run signaling on it, and point the host at that address.
On the VPS, clone the repository and start the service. The image starts in
signalingmode, hosting the web control plane, signaling, and optional TURN relay; capture and input injection stay on the controlled devices outside the container:bashgit clone https://github.com/lcxl-remote/lcxl-remote-desk-web.git cd lcxl-remote-desk-web printf 'LRD_BOOTSTRAP_TOKEN=%s\n' "$(openssl rand -hex 32)" > .env docker compose up -dOpen
http://<vps-address>:8081. In the first step, enter the deployment token saved in.env, create the admin account, and accept the agreements. Keep.envafter initialization because Compose validates the required variable on every startup.Harden the endpoint before relying on it: TLS on a reverse proxy, TURN interfaces and relay ports, and the
LRD_*variables are all covered in Deployment.Copy the token from the signaling server's Signaling Access Token page. Run the host as in Option 1, then on its Outbound Connection settings page set the signaling URL to
wss://<your-domain>/api/desk/signalingand paste that token.
WARNING
Hosts refuse plaintext ws:// dials to public signaling addresses by default (require_secure_signaling in the config.toml reference). Loopback, private, and LAN addresses are exempt, so a LAN-only deployment without TLS can use ws://<vps-address>:8081/api/desk/signaling.
Option 3: Run from Source (For Developers)
Prerequisites
Install the repository-pinned Rust toolchain (Edition 2024, Rust 1.90).
Install Node.js 22.16 or higher.
AV1 Encoding (Optional) — requires nasm on Windows:
bash$NASM_VERSION="2.15.05" $LINK="https://www.nasm.us/pub/nasm/releasebuilds/$NASM_VERSION/win64" curl --ssl-no-revoke -LO "$LINK/nasm-$NASM_VERSION-win64.zip" 7z e -y "nasm-$NASM_VERSION-win64.zip" -o "C:\nasm" set PATH="%PATH%;C:\nasm"
For platform-specific system dependencies (Linux / macOS), see Deployment and the project's DEVELOPMENT.md.
Start the Frontend First
A debug build of the desktop shell loads the Vite dev server, so it opens a blank window if the frontend is not up yet:
cd vite-project
npm ci
npm run devThe dev server listens on http://localhost:5174.
Then Start the Host Shell
cargo run -p lcxl-remote-desk-tauriIt embeds the full server and adds the Privacy Screen and Whiteboard. For a headless backend without the GUI shell, run cargo run -p lcxl-remote-desk-server instead and open http://localhost:5174 in a browser.
Next Steps
- Learn how the pieces fit together in Core Concepts.
- Understand the different process layouts in Startup Modes.
- Tune behavior via the config.toml Reference.