diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3620fe1..ae47aff 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,16 @@
- Log when using the fallback products directory in cases when user doesn't have permissions to write to default
products directory ([#177])
+- Add a workaround to get Flatpaks to be launched.
+ You can now clear and override `$LD_LIBRARY_PATH` to allow processes defined in `processes` in your settings file to
+ be launched using the host's libraries by setting `$MEL_LD_LIBRARY_PATH`. Mainly useful for Steam Deck users
+ (i.e. auto-launching EDMC).
+
+ `konsole` Steam launch options example:
+ ```sh
+ LD_LIBRARY_PATH="" konsole -e env MEL_LD_LIBRARY_PATH="$LD_LIBRARY_PATH" ./MinEdLauncher %command% /autorun /autoquit
+ ```
+
## [0.12.2] - 2025-07-25
### Bug Fixes
diff --git a/README.md b/README.md
index 48d8de0..cfef0e8 100644
--- a/README.md
+++ b/README.md
@@ -230,9 +230,17 @@ Linux: `$XDG_CONFIG_HOME/min-ed-launcher/settings.json` (`~/.config` if `$XDG_CO
| gameStartDelay | Time to delay after starting processes but before starting ED. Defaults to zero |
| shutdownDelay | Time to delay before closing processes. Defaults to zero |
-When specifying a path for `gameLocation`, `cacheDir` or `processes.fileName` on Windows, it's required to escape backslashes. Make sure to use a
+> [!NOTE]
+> When specifying a path for `gameLocation`, `cacheDir` or `processes.fileName` on Windows, it's required to escape backslashes. Make sure to use a
double backslash (`\\`) instead of a single backslash (`\`).
+> [!NOTE]
+> Launching Flatpaks via `processes` through Steam requires resetting the LD_LIBRARY_PATH env var and setting
+> MEL_LD_LIBRARY_PATH to the host's LD_LIBRARY_PATH.
+> ```sh
+> LD_LIBRARY_PATH="" konsole -e env MEL_LD_LIBRARY_PATH="$LD_LIBRARY_PATH" ./MinEdLauncher %command% /autorun /autoquit
+> ```
+
```json
{
"apiUri": "https://api.zaonce.net",
diff --git a/src/MinEdLauncher/MinEdLauncher.fsproj b/src/MinEdLauncher/MinEdLauncher.fsproj
index d3bf737..67c0741 100644
--- a/src/MinEdLauncher/MinEdLauncher.fsproj
+++ b/src/MinEdLauncher/MinEdLauncher.fsproj
@@ -53,9 +53,9 @@
+
-
diff --git a/src/MinEdLauncher/Process.fs b/src/MinEdLauncher/Process.fs
index fcaec59..2f83da7 100644
--- a/src/MinEdLauncher/Process.fs
+++ b/src/MinEdLauncher/Process.fs
@@ -45,4 +45,21 @@ let waitForExit (processes: Process list) =
|> List.iter(fun p ->
use p = p
p.WaitForExit()
- )
\ No newline at end of file
+ )
+
+///
+/// Override $LD_LIBRARY_PATH with $MEL_LIBRARY_PATH if it's set
+///
+///
+/// This allows things like flatpaks to run properly within Steam's runtime environment. Users can set
+/// $MEL_LD_LIBRARY_PATH to $LD_LIBRARY_PATH and then clear $LD_LIBRARY_PATH when launching so that only the game
+/// process get Steam's runtime environment's $LD_LIBRARY_PATH. Mostly useful for Steam Deck users
+///
+let overrideLdLibraryPath (startInfo: ProcessStartInfo) =
+ System.Environment.GetEnvironmentVariable("MEL_LD_LIBRARY_PATH")
+ |> Option.ofObj
+ |> Option.iter(fun path ->
+ Log.debug $"Setting $LD_LIBRARY_PATH to $MEL_LD_LIBRARY_PATH: {path}"
+ startInfo.EnvironmentVariables["LD_LIBRARY_PATH"] <- path
+ )
+ startInfo
\ No newline at end of file
diff --git a/src/MinEdLauncher/Product.fs b/src/MinEdLauncher/Product.fs
index a4c9e28..84a94f2 100644
--- a/src/MinEdLauncher/Product.fs
+++ b/src/MinEdLauncher/Product.fs
@@ -329,7 +329,7 @@ let createProcessInfo proton args product =
type RunResult = Ok of Process | AlreadyRunning | DryRun of ProcessStartInfo | Error of exn
let run dryRun proton args (product:RunnableProduct) =
- let startInfo = createProcessInfo proton args product
+ let startInfo = createProcessInfo proton args product |> Process.overrideLdLibraryPath
Log.debug $"Process: %s{startInfo.FileName} %s{startInfo.Arguments}"
diff --git a/tests/MinEdLauncher.Tests.fsproj b/tests/MinEdLauncher.Tests.fsproj
index 5aa5e45..3492063 100644
--- a/tests/MinEdLauncher.Tests.fsproj
+++ b/tests/MinEdLauncher.Tests.fsproj
@@ -21,6 +21,7 @@
+
diff --git a/tests/Process.fs b/tests/Process.fs
new file mode 100644
index 0000000..921d16c
--- /dev/null
+++ b/tests/Process.fs
@@ -0,0 +1,43 @@
+module MinEdLauncher.Tests.Process
+
+open System
+open System.Diagnostics
+open Expecto
+
+[]
+let tests =
+ testList "Process" [
+ let MEL_LIBRARY_PATH = "MEL_LD_LIBRARY_PATH"
+ let LD_LIBRARY_PATH = "LD_LIBRARY_PATH"
+ let overrideTests setup = [
+ test "Sets LD_LIBRARY_PATH if MEL_LD_LIBRARY_PATH is set" {
+ setup (fun () ->
+ let startInfo = ProcessStartInfo()
+
+ Environment.SetEnvironmentVariable(MEL_LIBRARY_PATH, "test")
+ MinEdLauncher.Process.overrideLdLibraryPath startInfo |> ignore
+
+ Expect.isTrue (startInfo.EnvironmentVariables.ContainsKey(LD_LIBRARY_PATH)) ""
+ Expect.equal startInfo.EnvironmentVariables[LD_LIBRARY_PATH] "test" ""
+ )
+ }
+ test "Doesn't set LD_LIBRARY_PATH if MEL_LD_LIBRARY_PATH is not set" {
+ setup (fun () ->
+ let startInfo = ProcessStartInfo()
+
+ MinEdLauncher.Process.overrideLdLibraryPath startInfo |> ignore
+
+ Expect.isFalse (startInfo.EnvironmentVariables.ContainsKey(LD_LIBRARY_PATH)) ""
+ )
+ }
+ ]
+ overrideTests (fun test ->
+ try
+ test()
+ finally
+ Environment.SetEnvironmentVariable(MEL_LIBRARY_PATH, null)
+ Environment.SetEnvironmentVariable(LD_LIBRARY_PATH, null)
+ )
+ |> testList "overrideLdLibraryPath"
+ |> testSequenced
+ ]