Steam Deck - Getting Started

Notes on getting Elite Dangerous set up well on a Steam Deck, plus the companion tools I run alongside it.

EDCoLauncher (running EDCoPilot + EDCoPTER on Proton)

EDCoPilot and EDCoPTER are Windows tools, so they need help to run under Proton on the Deck. I’m using EDCoLauncher for that — a bash script that automates fetching, installing, and launching both add-ons inside the game’s Proton prefix.

Rough setup:

  1. Download the latest EDCoLauncher release and extract it.
  2. Edit the EDCoLauncher_config file — this is where you toggle which add-ons are enabled, set detection timeouts, and flip on first-time install.
  3. Make the script executable and drop both files (EDCoLauncher.sh + config) into the Elite Dangerous Steam install directory root.
  4. Set it as a Steam launch option:
    STEAM_COMPAT_LAUNCHER_SERVICE=container-runtime %command% & ./EDCoLauncher.sh
    

The EDCoLauncher README doesn’t call out Steam Deck specifically — it targets Proton 10.0-3 in general. Worth double-checking the Deck’s current Proton version against that if something doesn’t launch.

Journal files

Elite Dangerous’s Journal files (what every companion tool reads to know what you’re doing in-game) live under the Proton prefix here:

~/.steam/steam/steamapps/compatdata/359320/pfx/drive_c/users/steamuser/Saved Games/Frontier Developments/Elite Dangerous

(or ~/.local/share/Steam/... instead of ~/.steam/steam/... depending on how Steam’s installed).

Running a materials tool on my Mac

Decided: Odyssey Materials Helper over EDEngineer. EDEngineer is Windows-only and archived (no longer maintained as of mid-2025). Odyssey Materials Helper is a JavaFX app with actual cross-platform releases — its 3.13.9 release ships edomh-3.13.9.auto-updater.macos.arm64.dmg and a portable arm64 .zip, which covers my Mac (Apple Silicon). Note: arm64 only, no Intel Mac build.

The tool runs on the Mac; the Journal stays on the Deck. Plan is Syncthing to bridge the two:

  1. On the Deck: install Syncthing from Discover (it’s on Flathub), point it at the Journal folder from the path above.
  2. On the Mac: brew install --cask syncthing-app — this is the native menu-bar wrapper, not just the bare syncthing service.
  3. Pair the two via Syncthing’s device IDs, share the Journal folder Deck → Mac (one-way, receive-only on the Mac side so nothing ever writes back into the Deck’s live Journal).
  4. Point Odyssey Materials Helper at the local synced copy on the Mac.

Open question: whether the Mac-side tool chokes on reading the Journal mid-sync while the game is actively appending to it on the Deck — haven’t tested yet.

Troubleshooting: keybindings resetting on restart

Still investigating — EDCoPilot occasionally complains about missing keybindings, and I’ve had to re-set bindings after a restart. Not 100% sure yet if this is a Proton/Deck thing or just how Elite Dangerous bindings always work. Notes so far:

  • Elite Dangerous’s control categories (General, Ship/Flight, SRV, On-Foot) each remember their own bound preset independently — editing bindings in one category doesn’t apply to the others. If a category still points at a default/device preset instead of your custom one, that’s enough to make EDCoPilot think bindings are “missing.” (source)
  • The game only loads your custom binds file if every device referenced in it is detected at launch. If a device is missing at startup, ED silently falls back to a default preset for the affected categories — and if you edit anything while in that fallback state, it can overwrite your real custom bindings. There’s a BindingLoadingErrors.log next to the binds file that names the device that tripped this — worth checking next time it happens.
  • The Deck doesn’t support suspending Elite Dangerous — resuming from sleep disconnects from the server and forces a full relaunch. So every “restart” is really a cold start, which is exactly when device-detection issues like the one above would bite.
  • EDCoPilot only reads keyboard key bindings — a bind mapped to a controller or mouse button doesn’t count, and will show up as “missing” to it even though it’s actually bound.
  • EDCoPilot also seems to want all four control categories on the same keybind preset — a mismatch between categories is a separate known cause of its “missing” complaints, on any platform.

Next time it happens: check BindingLoadingErrors.log, and check whether all four binding categories are on the same custom preset before touching anything.


Back to top

Content and writing are my own. Site framework scaffolded with Claude Code.

This site uses Just the Docs, a documentation theme for Jekyll.