DeckPlayer is a small local-first media browser and player aimed at Steam Deck Game Mode and KDE desktop use. The target workflow is simple: launch from Steam as a non-Steam game, browse ~/Videos with controller-friendly inputs, and play files stored locally on the device or SD card.
- Start in
~/Videos - Exclude hidden files and folders by default, with a toggle to reveal them
- Show folders first, then likely media files
- Always start videos from the beginning
- Keep the UI large, simple, and reliable with Steam Input mappings
Qt 6 + QMLfor the shell and UIlibmpvfor playbackCMakefor buildsFlatpakfor Steam Deck distribution
- Folder-first file browser rooted from the user's filesystem
- Persistence for last visited folder and hidden-file toggle
- Embedded
libmpvplayback with pause, seek, subtitle cycling, and audio track cycling - Playback OSD feedback for pause/play, seek, subtitle changes, and audio track changes
- Controller-friendly keyboard mappings that are easy to bind through Steam Input
- Direct SDL gamepad input for Steam Deck controls and standard controllers
- Volume control (LB/RB in player)
- Per-file playback resume (saves and restores position across sessions)
- Exit confirmation hold gesture (hold B for 2 seconds) to prevent accidental closes
You need Qt 6.5 or newer with Core, Gui, Qml, and Quick, plus the libmpv and SDL2 development packages available through pkg-config as mpv and sdl2.
cmake -S . -B build
cmake --build build- Browser: arrows or D-pad move,
Enteropens,Escapegoes back - Browser:
W/Salso move, andQ/EorPage Up/Page Downjump faster through long folders - Browser:
Dalso opens andAalso goes back for Steam Input layouts that prefer face-button letters - Player:
EnterorPpauses,Left/Qseeks backward,Right/Eseeks forward - Player:
Xcycles subtitles,Ycycles audio tracks,Escapeexits playback - Window:
ForF11toggles fullscreen
Native gamepad controls are also supported:
- Browser: D-pad or left stick moves,
Aopens,Bgoes back,LB/RBjumps faster - Player:
AorStartpauses, D-pad/stick left orLBseeks backward, D-pad/stick right orRBseeks forward - Player:
Xcycles subtitles,Ycycles audio tracks,Bexits playback - Window:
Selectexits the app
The recommended Steam Deck package is Flatpak. The Flatpak manifest builds the app, libmpv, and the media playback dependencies inside the KDE Flatpak runtime, which avoids depending on the host distro's glibc and Qt library versions.
To build a local Flatpak bundle:
./packaging/flatpak/build-flatpak.shThe script installs the KDE runtime, KDE SDK, and Flatpak Builder from Flathub when they are missing. It writes the bundle to:
dist/io.github.zeclorn.DeckPlayer.flatpak
Install and run the local bundle with:
flatpak install --user dist/io.github.zeclorn.DeckPlayer.flatpak
flatpak run io.github.zeclorn.DeckPlayerFor early Steam Deck testing as a non-Steam game, map:
- D-pad or left stick to arrow keys
Abutton toEnterBbutton toEscapeXbutton toXYbutton toYLBtoQRBtoEStarttoPSelector one back grip to quit the app- one back grip or extra button to
Ffor fullscreen toggle
- CLAUDE.md codebase documentation for AI assistants
- GitHub Actions CI (build check on every push and PR to main)
- Updated release history and version metadata
- Volume control via LB/RB in the player
- Per-file playback resume (position saved and restored across sessions)
- Exit confirmation hold gesture (hold B for 2 seconds) to prevent accidental closes
- Exit confirmation dialog readability improvements
- Bug fixes for A/B button confirm and close flows
First stable release. Flatpak packaging, controller-friendly browsing, direct Steam Deck gamepad support, local video playback, subtitle/audio track cycling, and fading playback overlays. Smoke-tested on Steam Deck Game Mode.