A Windows desktop app to run multiple Roblox accounts side-by-side in separate Roblox processes. Built with .NET 8 + WPF.
- Multi-instance: holds the
ROBLOX_singletonEventnamed mutex so additional Roblox processes can launch. - Per-account auth: stores
.ROBLOSECURITYcookies and fetches a fresh authentication ticket for each launch (no cookie injection into a running client). - Encrypted storage: account data is encrypted on disk with Windows DPAPI (
CurrentUserscope — only your Windows account can decrypt it). - Batch launch: select N accounts, paste a game URL or place ID, click Launch — staggered with a configurable delay.
- Camera-grid Instances view: live DWM thumbnails of every running Roblox window. Double-click any tile to enter Play mode — the Roblox window is repositioned over the app's play area and given focus so you can play inside it. "Back to Grid" sends it back.
- Account avatars: headshot thumbnails pulled from the Roblox thumbnails API.
- Window management: arrange all Roblox windows in a desktop grid, minimize all, or focus a single instance.
- Tabbed UI: Accounts and Instances tabs in a dark, card-based layout.
Requirements:
- Windows 10/11
- .NET 8 SDK (build) or .NET 8 Desktop Runtime (run)
- Roblox installed
Clone and run:
git clone https://github.com/<you>/roblox-multi-instance.git
cd roblox-multi-instance
dotnet run --project src/RobloxMultiInstanceOr build a release binary:
dotnet publish src/RobloxMultiInstance -c Release -r win-x64 --self-contained false -o publish
.\publish\RobloxMultiInstance.exe- Accounts tab → Add an account: click
+ Add Account, paste a.ROBLOSECURITYcookie, clickValidateto confirm, thenSave. Avatar headshot is fetched automatically. - Enter a game: paste a Roblox game URL (e.g.
https://www.roblox.com/games/920587237/...) or the place ID directly. - Select accounts: check the boxes for the accounts you want to launch.
- Launch: click
Launch Selected. Each account opens in its own Roblox process. - Switch to the Instances tab to see live thumbnails of every Roblox window in a camera-grid layout.
- Click "Play Here" on any tile (or double-click) to enter Play mode: that Roblox window is moved over the play area and brought to the foreground so you can move/control it directly. Other instances stay in a side panel of mini-thumbnails — click "Switch" on any of them to hand control over. Click "Back to Grid" to return.
- Log into roblox.com in a browser.
- F12 → Application tab → Cookies →
https://www.roblox.com. - Copy the value of the
.ROBLOSECURITYcookie (it starts with_|WARNING:-DO-NOT-SHARE-THIS...).
Treat this cookie like a password — anyone who has it can sign into your account.
Roblox prevents itself from launching multiple times by checking a named mutex called ROBLOX_singletonEvent. On startup, this app opens a handle to that mutex and keeps it for the app's lifetime. With the mutex already in existence, the Roblox client's singleton check stops blocking additional launches.
.ROBLOSECURITY cookies are session tokens that the Roblox website uses. The Roblox player binary doesn't accept the cookie directly — it expects a short-lived authentication ticket. Each launch does:
- POST
https://auth.roblox.com/v1/authentication-ticket/with the cookie → server returns a403with anx-csrf-tokenheader. - POST the same URL again with
X-CSRF-TOKEN+RBXAuthenticationNegotiation: 1headers → server returnsrbx-authentication-ticket. - Construct a
roblox-player:URI withgameinfo:<ticket>+placelauncherurl:<encoded launcher URL>and start it withProcess.Start.
Accounts live in %LOCALAPPDATA%\RobloxMultiInstance\accounts.dat, encrypted with DPAPI (CurrentUser scope). The file is unreadable on another machine or under another Windows user.
The Instances view uses DWM thumbnails — the same API Windows uses for Alt+Tab previews. DwmRegisterThumbnail registers each Roblox window's HWND as a thumbnail source for our app, and DwmUpdateThumbnailProperties repositions the destination rectangle on every layout pass. DWM composites the live window contents into our app at near-zero cost.
Process-to-account association is done by snapshotting the set of RobloxPlayerBeta.exe PIDs immediately before launch, then claiming the next-appearing new PID for that account.
Play mode moves the selected Roblox window over the app's play area via SetWindowPos. When you click "Back to Grid", the window is restored to its prior position. This avoids the complexity (and crashes) of true SetParent window reparenting while still giving an embedded feel.
- Cookie storage is encrypted at rest, but the cookie is loaded into memory while the app runs. Don't run this on shared / untrusted machines.
- The app does not exfiltrate cookies — it only talks to
auth.roblox.comandusers.roblox.com. Auditsrc/RobloxMultiInstance/Services/RobloxAuth.csto confirm. - This is a third-party tool, not affiliated with or endorsed by Roblox Corporation.
src/RobloxMultiInstance/
App.xaml / App.xaml.cs # entry, DI-lite singletons, dark theme
MainWindow.xaml / .cs # shell: top bar with nav tabs + mutex indicator
Views/
AccountsView.xaml / .cs # account list, batch launch
InstancesView.xaml / .cs # camera-grid + play mode
AddAccountWindow.xaml / .cs # add/edit account dialog
Models/
Account.cs # alias, cookie, username, avatar URL
RobloxInstance.cs # PID, HWND, account binding
Services/
MutexHolder.cs # ROBLOX_singletonEvent
AccountStore.cs # DPAPI-encrypted JSON store
RobloxAuth.cs # CSRF + auth ticket flow + avatar API
RobloxLauncher.cs # roblox-player: URI construction
RobloxProcessTracker.cs # polls processes, associates with accounts
WindowManager.cs # focus / move / arrange wrappers
Win32.cs / Dwm.cs # P/Invoke
Controls/
DwmThumbnailHost.cs # WPF FrameworkElement hosting a DWM thumbnail
ViewModels/
MainWindowViewModel.cs # tab nav + mutex pill
AccountsViewModel.cs # account-side commands
AccountItemViewModel.cs # per-account row
InstancesViewModel.cs # live tracker → tiles
InstanceTileViewModel.cs # per-instance tile
AddAccountViewModel.cs # add/edit dialog
Converters/Converters.cs
MIT — see LICENSE.