A WPF GUI account switcher for Elite Dangerous. It is a front-end for
min-ed-launcher: it manages multiple
Frontier account credential files (including first-time sign-in with email 2FA) and
spawns the real MinEdLauncher.exe to perform the actual game update and launch.
- Download the app (Windows 10/11): grab the latest
EDAccountSwitcher-win-x64.zipfrom the Releases page and extract it anywhere. No .NET runtime install required. - Install min-ed-launcher: download the Windows release of
min-ed-launcher and
place
MinEdLauncher.exein your Elite Dangerous install directory, next toEDLaunch.exe. To find that directory in Steam: right-click Elite Dangerous → Manage → Browse local files. (A different location forMinEdLauncher.execan be set in the app's Settings area.) - Run
EDAccountSwitcher.exe. The ED install path is auto-detected; if it isn't found, use Browse… in the Settings area and selectEDLaunch.exe. - Add an account: click Add, enter a profile name (any label you like), your Frontier account email and password, and click Sign in. Check your email for the Frontier verification code, enter it, and click Submit code. This is a one-time step per account per PC.
- Play: select the account, pick a product (e.g. Odyssey), and press Play. Repeat step 4 for every account you want to switch between — from then on, switching is just selecting a different account.
If you are having trouble with controller support, add the ED account switcher as a non-steam game. If you bought Elite Dangerous on Steam or Epic, launch the game at least once through the official launcher first so your purchase is linked to your Frontier account.
Epic-bought copies of Elite Dangerous authenticate through Epic, not through
a Frontier email/password login — so the Add / 2FA sign-in flow in this
app does not apply to them (there are no .cred files for Epic accounts).
Epic copies can also only be played via the Epic ecosystem, not via the
standard or Steam launchers. Use one of min-ed-launcher's two Epic flows
instead:
Option A — Epic client + min-ed-launcher bootstrap (recommended)
- Place
MinEdLauncher.exeandMinEdLauncher.Bootstrap.exefrom the min-ed-launcher Windows release into your ED install directory. - Rename
EDLaunch.exetoEDLaunch.exe.bak, then copyMinEdLauncher.Bootstrap.exeand rename the copy toEDLaunch.exe. (Epic doesn't allow changing the game's startup executable, so the bootstrap pretends to be it. Redo this step after every game update or file verification.) - In the Epic Games client: Settings → scroll to Elite Dangerous →
check Additional Command Line Arguments → enter
/autorun /autoquit. - Launch the game from the Epic client as usual. To switch Epic accounts, sign out/in in the Epic client first — the client must be logged into the Epic account that owns the copy you want to play.
Option B — Legendary (advanced, also enables multi-account scripting)
- Install Legendary and run
legendary authto sign in to your Epic account. - Launch with
legendary launch 9c203b6ed35846e8a4a9ff1e314f6593 --override-exe "C:\path\to\MinEdLauncher.exe" /autorun /autoquit. - Legendary keeps one Epic login per config directory. For multiple Epic
accounts, keep a separate config dir per account and point
LEGENDARY_CONFIG_PATHat the right one before launching (or use Heroic, whose login min-ed-launcher can also read).
Prerequisites: .NET 10 SDK (dotnet --list-sdks should show 10.x).
dotnet build EDAccountSwitcher.sln -c Release
dotnet test EDAccountSwitcher.sln -c Release
dotnet run --project EDAccountSwitcher -c ReleaseSelf-contained publish (produces the same binary as the release zip):
dotnet publish EDAccountSwitcher -c Release -r win-x64 --self-contained -p:PublishSingleFile=true- Settings (top): the ED install path is auto-detected (same search order as
min-ed-launcher: the app's own directory,
C:\Program Files (x86)\Steam\steamapps\common\Elite Dangerous,%ProgramFiles(x86)%\Frontier,%LOCALAPPDATA%\Frontier_Developments, then the saved override). Both paths are editable and persisted to%LOCALAPPDATA%\EDAccountSwitcher\settings.json. - Accounts (left): lists every
.frontier-*.credfile found in%LOCALAPPDATA%\min-ed-launcher. Add opens the sign-in panel (profile name, email, password → email 2FA code). Remove deletes the cred file after confirmation. Re-verify discards the stored machine token and re-runs the sign-in flow (a fresh 2FA code is usually required). - Launch (bottom): pick an account, an installed product (Odyssey
/edo, Horizons 4.x/edh4, base game/ed), optionally VR, and press Play. The launcher's console output streams into the log pane.
The app is a C# port of the relevant min-ed-launcher internals (the F# sources were used as the spec):
- Credential files are fully compatible with min-ed-launcher:
%LOCALAPPDATA%\min-ed-launcher\.frontier-<profile-lowercased>.cred, three lines: plaintext email, encrypted password, encrypted machine token (2 lines when no token exists yet). Encryption is UTF-16LE → DPAPIProtectedDatawithDataProtectionScope.CurrentUserand the salt reflected fromClientSupport.dll(typeClientSupport.DecoderRing, private static fieldsalt) in the ED install dir → Base64. Because the same salt and scope are used, cred files written by this app are readable by min-ed-launcher and vice versa. - Machine ID matches min-ed-launcher exactly: SHA1 over the concatenation of
HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuidandHKCU\SOFTWARE\Frontier Developments\Cryptography\MachineGuid(created if missing), hex, truncated to 16 lowercase chars. - Sign-in talks to
https://api.zaonce.netexactly like min-ed-launcher:GET /1.1/server/time, thenPOST /3.0/user/frontier/authwithemailandpasswordas hex-encoded UTF-8 in the query string plusmachineId,lang,fTime; 2FA is completed withPOST /3.0/user/frontier/token(machineId,plainCode,encCode,lang) which returns the machine token that gets stored on line 3 of the cred file. - Launching spawns
MinEdLauncher.exe /frontier <profile> /autorun /<product-filter> [/vr] /autoquit waitForExitwith the ED install dir as working directory. Since the launcher runs fully unattended (no console prompts), the cred file must already contain all three lines — use Add or Re-verify first. Exit code 0 means success, 1 failure.
EDAccountSwitcher/ WPF app (net10.0-windows)
Core/ Hex, MachineId, CredStore, FrontierAuth, GameLocator, LaunchRunner, AppSettings
ViewModels/ MainViewModel (hand-rolled MVVM, no external MVVM packages)
MainWindow.xaml[.cs] UI
EDAccountSwitcher.Tests/ xUnit tests (net10.0-windows)
Note: this app does not modify min-ed-launcher; it is a separate front-end that shares min-ed-launcher's credential-file format so both tools can be used interchangeably.