Roku Dev Studio — setup and build instructions.
apps/roku-dev-studio/— Electron desktop app (npm startfrom repo root runs this workspace).packages/roku-dev-studio-api/— shared Node API package.packages/roku-dev-studio-remote-server/— HTTP relay server.
Always run npm install from the repository root so workspaces link correctly.
-
Install dependencies (from repo root):
npm install
-
Run the app:
npm start
-
Optional — verify TypeScript (API, Electron main/preload, HTML renderer modules, remote server, Solid renderer):
npm run typecheck
From the repository root; runs all workspace
tsc --noEmittargets. The desktop app also transpiles throughapps/roku-dev-studio/scripts/build/index.ts(viatsx: main, preload,renderer/dist/).
npm run build:macThis creates (under apps/roku-dev-studio/dist/):
apps/roku-dev-studio/dist/mac/arm64/Roku Dev Studio-{version}-arm64.dmg— Apple Silicon installerapps/roku-dev-studio/dist/mac/arm64/Roku Dev Studio-{version}-arm64-mac.zip— portable Apple Silicon app
Intel Mac builds are no longer produced by default. To build them locally (deprecated):
npm run build:mac:intelnpm run build:winThis creates (under apps/roku-dev-studio/dist/):
apps/roku-dev-studio/dist/win/Roku Dev Studio Setup {version}.exe- Windows installer (x64)apps/roku-dev-studio/dist/win/Roku Dev Studio {version}.exe- Portable Windows app (x64)
npm run build:linuxThis creates (under apps/roku-dev-studio/dist/):
apps/roku-dev-studio/dist/linux/Roku Dev Studio-{version}.deb- Debian package (x64 & arm64)apps/roku-dev-studio/dist/linux/Roku Dev Studio-{version}-{arch}.AppImage- AppImage (x64 & arm64)
npm run build:allBuilds for macOS, Windows, and Linux simultaneously.
The mac block in apps/roku-dev-studio/package.json ships with hardenedRuntime: true and notarize: false. By default electron-builder produces a signed-but-not-notarized build if a Developer ID Application certificate is present in your login keychain, and an ad-hoc-signed build otherwise.
If you ship a build without a Developer ID, end users have to clear quarantine before launching:
xattr -cr "/Applications/Roku Dev Studio.app"To remove that step for end users, set up Apple Developer ID signing + notarization. The full one-time setup (cert generation, App Store Connect API key, GitHub Actions secrets, env-var contract) is captured in .discussion-docs/macos-code-signing-and-notarization.md. Once you have the cert and an app-specific password / API key, set:
export APPLE_ID="you@example.com"
export APPLE_APP_SPECIFIC_PASSWORD="xxxx-xxxx-xxxx-xxxx"
export APPLE_TEAM_ID="ABCDE12345"
# Then build:
npm run build:macapps/roku-dev-studio/scripts/notarize.cjs is the afterSign hook that runs @electron/notarize against your build.
Default macOS builds target Apple Silicon (arm64) only. Intel/x64 artifacts are not produced in CI. To build them locally:
npm run build:mac:intelOr, from apps/roku-dev-studio/:
npx electron-builder --mac dmg:x64 zip:x64The win target builds an NSIS installer and a portable .exe for x64. No code signing is configured by default — Windows will show a SmartScreen warning until you add an Authenticode certificate (win.certificateFile + win.certificatePassword, or an EV cert in a hardware token).
Cross-building Windows artifacts from macOS / Linux requires Wine. The reliable option is to run npm run build:win on Windows (or in a Windows VM / GitHub Actions runner — see RELEASE_SETUP.md).
The deb target lists the runtime dependencies it needs in package.json → build.deb.depends:
libgtk-3-0 libnotify4 libnss3 libxss1 libxtst6 xdg-utils libatspi2.0-0 libuuid1
On Debian / Ubuntu users install with:
sudo apt install ./Roku\ Dev\ Studio-*.debapt resolves the depends automatically. The AppImage variant is self-contained — chmod +x and run.
To build Linux artifacts, the build host needs the standard build essentials (gcc, make, python3) plus the same shared libraries listed above so electron-builder can stage the bundle.
GitHub Actions workflow + secret layout (signing identity, notarization API keys, etc.) is documented in RELEASE_SETUP.md.
- Ensure Roku and computer are on the same network
- Control by Mobile Apps (ECP):
Settings → System → Advanced system settings → Control by mobile apps → Network access. The app supports all four modes:
- Disabled – Remote control is off; the app shows a warning and blocks remote/keypress areas.
- Limited – Text input, app launch, and app query work; full remote keypress may not. The app shows an "ECP Limited" badge and adapts.
- Permissive – Full control; Roku accepts commands only from private network or same subnet. If you see a "Check Network" warning, ensure this computer is on the same subnet.
- Enabled – Full control on private network addresses.
- Firewall: Allow connections on port 8060
- macOS code signing: For distribution, you'll need an Apple Developer certificate
- Windows builds on macOS: Use a Windows VM or GitHub Actions
- Linux builds: Ensure required dependencies are installed (see package.json deb.depends)