This guide covers the active Electron-based OpenNOW client in opennow-stable/.
- Node.js 22 or newer
- npm
- A GeForce NOW account for end-to-end testing
Install app dependencies inside the Electron workspace:
cd opennow-stable
npm installYou can then work either from the app directory or from the repository root.
From the repository root:
npm run dev
npm run typecheck
npm run build
npm run distDirectly inside opennow-stable/:
npm run dev
npm run preview
npm run typecheck
npm run build
npm run dist
npm run dist:signedopennow-stable/
├── src/
│ ├── main/ Electron main process
│ │ ├── gfn/ Auth, game catalogs, subscriptions, CloudMatch, signaling
│ │ └── services/ Cache and refresh helpers
│ ├── preload/ Safe API exposed to the renderer
│ ├── renderer/src/ React application
│ │ ├── components/ Screens, stream UI, settings, library, navigation
│ │ ├── gfn/ WebRTC client and input protocol
│ │ └── utils/ Diagnostics and UI helpers
│ └── shared/ Shared types, IPC channels, logging helpers
├── electron.vite.config.ts
├── package.json
└── tsconfig*.json
The main process handles platform and system responsibilities:
- OAuth and session bootstrap
- Game catalog fetches and cache refresh
- CloudMatch session creation, polling, claiming, and stopping
- Signaling and low-level Electron integration
- Local media management for screenshots and recordings
- Persistent settings storage
Key entry point:
The preload layer exposes a narrow IPC surface to the renderer with contextBridge.
Key entry point:
The renderer is a React app responsible for:
- Login and provider selection
- Browsing the catalog and public listings
- Managing stream launch state and session recovery
- Rendering the WebRTC stream
- Handling controller input, shortcuts, stats overlay, screenshots, recordings, and settings UI
Key entry points:
opennow-stable/src/renderer/src/App.tsxopennow-stable/src/renderer/src/components/StreamView.tsxopennow-stable/src/renderer/src/components/SettingsPage.tsx
cd opennow-stable
npm run devcd opennow-stable
npm run typecheckcd opennow-stable
npm run buildUnsigned packages:
cd opennow-stable
npm run distSigned packages, if your environment is configured for signing:
cd opennow-stable
npm run dist:signedThe repository includes two main GitHub Actions workflows:
auto-build.ymlbuilds pull requests and pushes tomainanddevrelease.ymlpackages and publishes tagged or manually-triggered releases
Current build matrix:
| Target | Output |
|---|---|
| Windows | NSIS installer, portable executable |
| macOS x64 | dmg, zip |
| macOS arm64 | dmg, zip |
| Linux x64 | AppImage, deb |
| Linux ARM64 | AppImage, deb |
- The active app is the Electron client. If you see older references to previous implementations, prefer
opennow-stable/. - Root-level npm scripts are convenience wrappers around the
opennow-stableworkspace. - Before opening a PR, run
npm run typecheckandnpm run build.
For contribution workflow details, see .github/CONTRIBUTING.md.