A controller-first, 10-foot Windows couch launcher
DualSense-driven · GPU fluid backgrounds · WebGL glass UI · Zero localhost
DesktopConsole turns your Windows PC into a living-room console. Pick up a DualSense, triple-tap the PS button, and your full-screen app launcher appears — game tiles, streaming apps, system settings, all navigable by controller. Launch a game, and the console yields. Double-tap PS mid-game for a glass quick menu. Everything runs on your GPU, nothing leaves your machine.
Home dashboard — top dock, game tiles, hero art, fluid backgrounds
Screenshots coming after next build. Open demo/ pages in a browser for design previews.
- Controller-first — D-pad, left stick, touchpad gestures. Cross to select, Circle to back, L1/R1 to switch tabs.
- DualSense integration — Haptic feedback, lightbar color sync, battery meter, trackpad-as-mouse mode.
- GPU fluid backgrounds — Live WebGL simulations via Fluid by KrackedDevs. Three presets (Midnight / Ember / Void). Completely free, renders on the viewer's GPU.
- Glass UI — Deep frosted glass, specular bloom, accent-glow focus indicators. Apple- and console-inspired visual language.
- Tauri v2 — Rust backend + React frontend in WebView2. No Electron, no localhost server, < 5 MB backend binary.
- Two processes — A tray-resident
listenerwatches for the PS triple-click. A fullscreenlauncheropens on demand and fully unloads when closed. - Quick Menu — Double-tap PS mid-game for a transparent overlay: volume, RGB, controller settings, Game Base, capture, and Console Home.
- Power menu — Right-edge slide panel: minimize, close, lock, rest mode, shutdown. Confirmation required for destructive actions.
- Game detail panels — Box art, hero keyart rotation, action buttons, and an info carousel (playtime / install / per-game settings).
- OpenRGB control — Cycle and set RGB scenes on your DualSense lightbar and motherboard LEDs directly from the Quick Menu or Settings.
- On-screen keyboard — D-pad or touchpad swipe-to-type. Double-Share anywhere (Desktop Mode) types into the foreground app.
- Settings hub — Appearance, Controller sensitivity, Audio mixer, Network, Bluetooth, Display modes, RGB Lighting, Performance toggles, System info, and About page with art credits.
- Lazy art loading — 76 MB of hero keyart loads on first tile focus instead of at startup. Cold launch is near-instant.
- Gaming-first — When yielded to a game, the console's HID thread throttles to ~25 Hz so it never competes for CPU.
- No DLL injection — The Quick Menu uses a transparent click-through window. No hooks, no anti-cheat bypasses, no public ports.
- Windows 11
- DualSense controller (USB or Bluetooth)
- Node.js 18+
- Rust (via rustup)
- WebView2 runtime (included in Windows 11)
- Tauri CLI v2:
cargo install tauri-cli --version "^2"
cd launcher
npm ci
npx tauri build --no-bundleThis produces:
target/release/ps5-launcher.exe— the fullscreen consolelistener/src-tauri/target/release/ps5-listener.exe— the tray-resident trigger
Keep both side by side. The listener looks for ps5-launcher.exe next to itself.
cd launcher
npx tauri devOr use the project's convenience scripts:
.\verify.ps1 # Type-check + cargo check (fast, no linking)
.\rebuild.ps1 # Full production build + restart listener
.\rebuild.ps1 -Dev # Fast build (skip LTO, for iteration)| Gesture | Action |
|---|---|
| Triple-tap PS (from Windows) | Open the console entry screen |
| Press PS (on entry screen) | Enter the dashboard |
| D-pad / Left stick | Navigate tiles, menus, settings |
| Cross (✕) | Select / Launch / Confirm |
| Circle (○) | Back / Cancel |
| Square | Close running app (when tile focused) |
| L1 / R1 | Switch tabs |
| Double-tap PS (in-game) | Toggle Quick Menu overlay |
| Double-tap Share | Open on-screen keyboard (Desktop Mode types into foreground app) |
| Double-tap Share (on dashboard) | Open keyboard overlay |
| Touchpad click (hold 2s) | Toggle trackpad-as-mouse mode |
| Options (triple-click) | Exit console (also PS + Options hold) |
| Power menu | Up/Down to choose, Cross to select, Circle to cancel |
DesktopConsole/
├── launcher/ Fullscreen Tauri + React console
│ ├── src/ React frontend
│ │ ├── components/ All UI: CodexLauncher, QuickOverlay,
│ │ │ SettingsMenu, GameDetailPanel, etc.
│ │ ├── hooks/ useController, useEdges, useGridNav,
│ │ │ useSpringScroll, useTouchpad
│ │ ├── appRegistry.ts Per-app identity: keyart, logos, colors
│ │ ├── settings.ts Persisted settings stores
│ │ ├── motion.ts Animation timing tokens
│ │ ├── theme.ts Accent palettes
│ │ └── assets/logos/ Keyart, icons, lockups
│ └── src-tauri/ Rust backend
│ └── src/
│ ├── hid.rs DualSense HID parsing, input loop
│ ├── commands.rs Tauri IPC surface
│ ├── config.rs Persisted tile list
│ ├── app_launch.rs Shell out to games/apps
│ ├── active_apps.rs Running process detection
│ ├── openrgb.rs OpenRGB SDK client
│ ├── rumble.rs Haptic feedback
│ ├── mouse_inject.rs Trackpad-as-cursor
│ ├── display.rs Resolution / refresh mode control
│ ├── network.rs Wi-Fi profile management
│ ├── audio.rs Master volume / mute
│ ├── power.rs Power plans / idle
│ └── live_backdrop.rs Running app window capture
├── listener/ Tray-resident PS-button watcher
│ └── src-tauri/src/
│ ├── hid.rs DualSense HID poll loop
│ ├── cursor_mode.rs Trackpad mouse mode (outside console)
│ ├── triple_click.rs PS triple-click detection
│ ├── launch.rs Spawn / kill the launcher
│ └── tray.rs System tray icon + Exit
├── demo/ Design mockups (open in browser)
│ ├── game-page-a1.html Home dashboard
│ ├── game-page-a1-idle.html Idle / rest screen
│ ├── game-page-a1-search.html Search
│ ├── game-page-a1-settings.html Settings
│ ├── game-page-a1-power.html Power menu
│ ├── game-page-a1-quickmenu.html Quick Menu
│ └── game-page-a1-keyboard.html Keyboard
├── docs/specs/ Feature specs
├── ISSUES.md Bug & feature tracker
├── OPTIMIZATION_PLAN.md 14-item performance roadmap
└── ART_PROMPTS.md Image generation prompts
| Layer | Technology |
|---|---|
| Desktop shell | Tauri v2 (Rust + WebView2) |
| Frontend | React 19 + TypeScript, Vite 5 |
| Animation | CSS @keyframes + will-change (compositor-only) |
| Fluid backgrounds | Fluid by KrackedDevs (WebGL) |
| Controller HID | Raw HID API (Rust hidapi) |
| RGB | OpenRGB SDK binary protocol |
| Ty…graphy | Manrope variable font (200–800 weight axis) |
| Build | Tauri CLI, Vite, Cargo workspace |
- Compositor-only animations — Everything that moves uses
transformandopacity. No paint triggers, no layout thrash, sub-1 ms per frame. - Container query layout — UI scales proportionally on any display via
cqw/cqhunits. Designed for 1440p, works on 1080p–4K. - Dual surface isolation — Controller events never route to both Home and the Quick Menu at the same time. Each surface owns its own HID stream.
- Dark only — The console is a living-room device. It never blasts white light at the viewer.
- No network ports — Zero listeners on localhost or LAN. The launcher is a local app, not a server.
| Status | Item |
|---|---|
| ✅ | DualSense HID — full input + haptics + lightbar |
| ✅ | GPU fluid backgrounds (Midnight / Ember / Void) |
| ✅ | Glass UI with specular bloom |
| ✅ | Quick Menu overlay (in-game) |
| ✅ | OpenRGB integration |
| ✅ | On-screen keyboard (D-pad + touchpad) |
| ✅ | Tauri v2 migration (Rust + React + WebView2) |
| ✅ | Two-process architecture (listener + launcher) |
| ✅ | Power menu with rest mode + shutdown |
| 📋 | Keyboard + mouse navigation fallback |
| 📋 | Steam Deck + Xbox controller support |
| 📋 | Game cover art auto-fetch (SteamGridDB) |
| 📋 | Media playback controls |
| 📋 | Installer + auto-start on boot |
Issues and PRs welcome. Check ISSUES.md for known bugs and OPTIMIZATION_PLAN.md for the performance roadmap. Feature specs live in docs/specs/.
MIT — see LICENSE.
Built by AJ Apau-Kese. ArtStation pieces used for hero keyart are credited in Settings > About.