Files
DroidDeck/docs/releases/0.1.5.md
T

8.0 KiB
Raw Blame History

SteamDeck 0.1.5

A new front end, settings that open where they are, the client's frames back on a flagship, a new icon and three themes in its colours, and the first pull requests from a second pair of hands. Install it over 0.1.4; same key, same runtime, nothing to re-download.


The front end

The main screen is a rail and a pane. The rail lists what can be launched - Steam and its installed games, Desktop and its emulators and their games - and Setup under them, every category folded when the app opens so the rail is three headers and their counts. The pane shows the chosen thing with its launch button, its art, and a shelf of the rest. A session left in the background is the first thing on the rail, with a pulse, and tapping it goes back in.

It moves: the selection is one pill that glides between rows, lists unfold with their children staggering in, a page change cascades the new page in row by row over a blurred wash of its own art, tiles lift and shine under the pad, the launch button sweeps a sheen and squashes on press, and the session rises over the front end and sinks back. Every duration follows the system's animator scale, so "no animations" in developer options snaps all of it. Seen on a Pocket FIT and a Fold.

Emulators launch from the rail, under gamescope, with their games. The ROMs folder is scanned per system (one level of subfolders, PS3 game folders, RPCS3's own installed games by their PARAM.SFO with their icons), and each game launches straight in. God of War II HD booted in RPCS3 from the rail, ~40 fps on the FIT - the first emulator game from the app. The desktop's own Steam launchers hand a game to the app's Steam session ( the hand-off itself is not yet proven).

Settings without a pop-up

The cog's window and the Performance dialog are pages in the pane: one row per setting, its value in a chip, and a small faded menu that opens right under the chip. One menu at a time; the page dims while it is open; the back key, the rail and the page's own Back all leave it. Steam and Desktop each have a Settings entry in the rail that lights while its page shows. Frame generation, Session logs, Start offline and Theme open their menu right on their rail row.

The session drawer is the same rows and menus, sliding in from the right: Now (HUD, frame generation, touch, the virtual pad, keyboard, the client's menu) and Next session (display shape, FEX preset, compatibility tools), with Send to background and Stop at the end.

The icon, and themes in its colours

A new launcher icon (Kurt's), and the same mark in the rail and on the loading screen. Three themes under Setup › Theme, in the icon's black, white and blue: Paper on black (the default - white is the primary, the blue is the small signal for rules, rings and dots), Icon blue, and Electric navy. A change applies at once.

Run as a game, and the client's frames back

  • The app is declared a game to Android, with a game-mode config that welcomes Performance mode and refuses the OS-side frame-rate cap and resolution downscaling - the interventions that make a regular flagship's Big Picture crawl while a gaming phone's does not. The session window asks for sustained performance mode, the panel's fastest display mode at its size, tells GameManager it is in gameplay, and opens an ADPF hint session over the compositor thread fed with each presented frame's interval. One perf: line in the session log says what took.
  • The client's GPU process stops dying on its way up. libpci picks its procfs backend because the app can read /proc/bus/pci, then dies on the devices file inside it, which Android denies; Chromium loads libpci in its GPU process, so after a few tries CEF drew the whole interface on the CPU. An empty file bound over that path at session start answers the scan truthfully. (WinNative, maxjivi05: 44 → 85 fps in the Big Picture library on a OnePlus 15.) Big Picture at 117–118 fps on both panels of a 120 Hz Fold, Adreno 830.
  • Client interface switches on the Performance page: threaded GL, lazy descriptors and no GL error checks, all on by default; Steam Deck mode (-steamdeck -steamos3) off by default, since the client then expects Deck hardware. What is in effect is in the device report.
  • 720p by default for the client and the desktop; a cap you chose still wins.
  • FEXCore presets for the x86 games the client launches, Bannerlator's table carried over: Stability, Compatibility, Intermediate, Performance, Performance + TSO, Extreme, Extreme + TSO, Extreme-gn, Denuvo. The default is FEX's own defaults, which is what every session ran on before.
  • The guest gets the device's time zone (the client's clock and logs were UTC).
  • A device without an Adreno GPU is told before the runtime download that a session would be sound over a black screen.
  • The app's own libraries are 16 KB-aligned (Android 15 devices). Six prebuilt PulseAudio libraries are still 4 KB-only and need a rebuild.

On-screen controls: sticks, and the bars

A left and a right stick beside the d-pad, a base and a knob that follows the finger, writing the pad's thumb axes the way a physical stick does. The controls take the bars beside or under the picture when the panel letterboxes it - a Fold's side bars, a square panel's bottom band - and only overlay the picture when there are none wide enough. Not yet tried in a game.

From Kurt (xXJSONDeruloXx)

  • The hardware Back button reaches the app and opens the drawer instead of going into Steam as Select. Verified on an AYN Thor.
  • The launcher icon.
  • Local build and deploy helpers: a Docker build for the preload libraries, a local release build with signing, an ADB install helper.

Every pull request against main now builds by itself and gets one comment kept current: mergeable or the conflicting hunks, and a failed build's compiler errors. The README lists the contributors and a ledger of their pull requests that a workflow keeps.

Smaller

The file manager and the picker stay in landscape · a session's log folder goes with it when it ends and the next session gets its own · a replaced session's exit no longer ends the one that replaced it · the desktop page says "Linux desktop environment" · the Kotlin compiler's session files are ignored.


Carried over - still open

The desktop → Steam hand-off and the sticks are untested on a device. A stick click is not yet offered. VAC-protected games report insecure. Games that ship only a Linux build won't start.

Credits

  • maxjivi05 (Max) - the gamescope runtime this is built on, the sandbox shims, the controller work, the NetworkManager stand-in and the libpci fix, from WinNative.
  • Kurt Himebauch (xXJSONDeruloXx) - the launcher icon, the hardware Back fix, the local build helpers.
  • The412Banner - the app, the Wayland compositor, the runtime plumbing, the Steam session, the front end and the File Manager (from Bannerlator).
  • Winlator (brunodev85) - the audio stack, the gamepad model and the shape of a session.
  • Vauzi (Vauzi-17/710) - the Adreno 710/720/722 device entries the experimental driver carries.

Frame generation: Win-FG is built in; LSFG uses the shader chain from your own copy of Lossless Scaling, read on device and never redistributed, on groundwork from lsfg-vk (PancakeTAS).

GPL-3.0. gamescope, Mesa, Turnip, Xwayland, labwc, LXQt, PulseAudio, proot and Arch Linux ARM are their own authors'. Not affiliated with Valve - Steam, Proton and Steam Deck are Valve's, and no Valve software is redistributed here: the client is fetched from Valve's own manifest on your device.


APK SteamDeck-0.1.5.apk - 21093959 bytes sha256 85b4295431ddea6f35025959864f3fbb47ad238693e146405ac0fe6ae87504f1 versionCode 6, built from d2f4a84 by run 35813465422. Signed with the AOSP test key (v1 + v2 + v3), so it installs over 0.1.4 in place.