Remote control your Elite Dangerous ship functions from your phone's browser.
EDSC is a Windows desktop app that serves a web control panel for Elite Dangerous. Scan a QR code from the desktop UI and control ship functions from any phone browser on the same network.
How it works:
- Desktop app runs a local HTTP server
- UI shows a QR code to open
http://<pc-ip>:9000/web - Phone browser sends commands via HTTP
- Desktop app simulates keypresses in Elite Dangerous
- QR code web UI (no mobile app required)
- HTTP (port 9000) and HTTPS (port 9001) command server
- Voice control with continuous listening
- Keyboard simulation for Elite Dangerous
- Face tracking preview + Opentrack UDP output
- JSON configuration for buttons (categories + SVG icons)
- IP selector with common addresses (192.168.x.x) prioritized
cd src/EDSC.Desktop
dotnet build
dotnet runYou should see:
info: Now listening on: http://[::]:9000
info: Application started
The button layout is stored in config.json (tracked in this repo). The desktop app reads it from:
src/EDSC.Desktop/bin/Debug/net8.0-windows/config.json
Buttons support categories and SVG icons for the web UI. Example:
{
"id": "hardpoints",
"key": "U",
"label": "Hardpoints",
"category": "Combat",
"iconSvg": "hardpoints.svg",
"color": "#6B7280",
"size": 80
}SVG icons are served from src/EDSC.Desktop/Assets/Icons and are copied to the output on build.
Copy it there if needed:
Copy-Item config.json src/EDSC.Desktop/bin/Debug/net8.0-windows/config.json -Force- Select the correct IP address in the desktop app
- Scan the QR code with your phone
- Use the browser UI to trigger ship actions
EDSC/
?? EDSC.sln
?? config.json # Current button layout
?? src/
? ?? EDSC/ # Shared models and view models
? ?? EDSC.Desktop/ # Desktop app + HTTP server
?? installer/
? ?? EDSC.iss # Inno Setup installer script
Health check
GET http://localhost:9000/
Send command
POST http://localhost:9000/command
Content-Type: application/json
{
"buttonId": "hardpoints",
"key": "U",
"timestamp": 1234567890
}
Open in a phone browser:
http://<pc-ip>:9000/web
The web UI groups buttons by category and shows SVG icons above the labels. It also includes a Fullscreen toggle in the toolbar.
EDSC can run AITrack-compatible face tracking using ONNX models and stream the pose to Opentrack (UDP 127.0.0.1:4242).
Setup
- Download
detection.onnxandlm_fast_exp1.onnxfrom the AITrack repo or release. - Copy the files into
src/EDSC.Desktop/Models(they are copied to the build output on build).
Using it
- Open the web UI and click "Face Tracking" to start the camera stream.
- The desktop app shows a preview with a face box + landmarks.
- Use the sliders under "Tracking Sensitivity" to adjust position and rotation scaling.
Persistence
Tracking sensitivity is saved to config.json under tracking:
{
"tracking": {
"translationScale": 1.0,
"yawScale": 1.0,
"pitchScale": 1.0,
"rollScale": 1.0
}
}The web UI supports voice control for hands-free operation. Click the "Voice" button to enable continuous listening.
How it works:
- The browser listens continuously for speech
- When you say a button label (e.g., "left panel", "landing gear", "hardpoints"), it triggers that command
- Commands are matched using fuzzy matching, so slight variations are tolerated
- A 2-second cooldown prevents accidental double-firing
Example voice commands:
- "Left panel" - opens the left ship panel
- "Right panel" - opens the right ship panel
- "Comms panel" - opens the comms panel
- "Landing gear" - toggles landing gear
- "Cargo scoop" - toggles cargo scoop
- "Hardpoints" - deploys/retracts hardpoints
Voice commands use your browser's built-in speech recognition (Web Speech API). This requires an internet connection as most browsers use cloud-based speech recognition.
The web UI is available on both HTTP (port 9000) and HTTPS (port 9001). HTTPS is required for voice commands on most mobile browsers, as the Web Speech API requires a secure context.
Why you'll see a certificate warning:
The app uses a self-signed SSL certificate generated at runtime. Your browser will show a security warning because the certificate is not signed by a trusted certificate authority. This is expected and safe for local network use.
To proceed past the warning:
- Chrome/Edge: Click "Advanced" then "Proceed to [IP address] (unsafe)"
- Safari: Click "Show Details" then "visit this website"
- Firefox: Click "Advanced" then "Accept the Risk and Continue"
The HTTPS connection encrypts traffic between your phone and PC, even though the certificate is self-signed.
Web UI does not load
- Ensure phone and PC are on the same network
- Pick the correct IP in the desktop app
- Allow TCP port 9000 in Windows Firewall
- Test
http://PC_IP:9000/webin a desktop browser
Buttons not triggering reliably
- Some games need longer key presses; the desktop app uses a short long-press (down → delay → up) by default.
Voice commands not working
- Use HTTPS (port 9001) - voice requires a secure context
- Accept the certificate warning in your browser
- Ensure microphone permission is granted
- Check that your browser supports Web Speech API (Chrome, Edge, Safari)
This repo includes an Inno Setup script for a classic unsigned EXE installer (no Appx/MSIX signing required).
- Publish the desktop app:
dotnet publish src/EDSC.Desktop/EDSC.Desktop.csproj -c Release -r win-x64 --self-contained true- Build the installer with Inno Setup:
iscc installer/EDSC.issThe output EXE is written to installer/EDSC-Setup.exe.
- No authentication; local network only
- HTTP is plain text
MIT License - See LICENSE file for details