diff --git a/extensions/core-ruffle/src/middleware/standalone.ts b/extensions/core-ruffle/src/middleware/standalone.ts
index 2151a7e9b..f3f911d4a 100644
--- a/extensions/core-ruffle/src/middleware/standalone.ts
+++ b/extensions/core-ruffle/src/middleware/standalone.ts
@@ -189,8 +189,11 @@ export class RuffleStandaloneMiddleware implements IGameMiddleware {
};
// Replace application path with ruffle standalone executable (//)
+ // On macOS the release ships as a `Ruffle.app` bundle, so the binary lives inside it.
const executable = os.platform() === 'win32' ? 'ruffle.exe' : 'ruffle';
- const execPath = path.join(this.ruffleStandaloneRoot, middlewareConfig.version, executable);
+ const execPath = os.platform() === 'darwin'
+ ? path.join(this.ruffleStandaloneRoot, middlewareConfig.version, 'Ruffle.app', 'Contents', 'MacOS', 'ruffle')
+ : path.join(this.ruffleStandaloneRoot, middlewareConfig.version, executable);
// If exec path is missing, we need to download the correct version
if (!fs.existsSync(execPath)) {