Are you the author? Sign in to claim
Cross-platform Electron desktop studio for Roku developers: remote control, device queries, sideload, telnet console, RA
Roku Developer Tools for macOS, Windows, and Linux — remote control, BrightScript sideload, ECP automation, RALE / App Connector, Network Inspector, Action Scripts, MCP server for AI agents (Cursor, Claude, VS Code), and a rds CLI. Supports both local network and internet-bridged devices.
A comprehensive cross-platform desktop application for controlling and developing on Roku devices over your local network or via remote server using the External Control Protocol (ECP).
This repository is an npm workspace monorepo. Run npm install and npm start from the repository root so workspaces link correctly. Installing runs a postinstall (npm run build:libs) that compiles the shared roku-dev-studio-platform and roku-dev-studio-api packages to their dist/ outputs, which the app and remote server import. Use npm run typecheck for a full TypeScript check across every workspace and npm test to run unit tests. CI runs these plus per-package build/syntax smoke checks on each push and pull request. Setup, scripts, and distributable builds are documented in INSTALLATION.md.
| Location | What it is |
|---|---|
apps/roku-dev-studio/ | Electron desktop app (main process, renderer, packaging). Dev and distributable builds: INSTALLATION.md. |
packages/roku-dev-studio-api/ | Shared Node library + rds CLI: discovery, ECP, screenshots, sideload, RALE, action-script runner, headless validator — package README. |
packages/roku-dev-studio-mcp/ | MCP server that lets AI agents (Cursor, Claude Desktop, VS Code) drive a Roku through this app — package README. |
packages/roku-dev-studio-network-inspector/ | Network Inspector engine: hotspot packet capture (DNS/SNI/HTTP) + local MITM proxy, transport-agnostic so it runs in both the desktop app and the remote server. |
packages/roku-dev-studio-remote-server/ | HTTP/WebSocket relay to control Rokus over the internet — package README. |
packages/roku-dev-studio-platform/ | Shared host-platform helpers (OS identity, modifier keys, path-safe, node-only filesystem helpers) used by the app and other packages so platform logic lives in one place. Built to dist/ on npm install. |
roku-components/ | BrightScript-side artifacts: TrackerTask.xml (drop into your channel for App Connector / RALE) and the fiddle/ SceneGraph scaffold — components README. |
Author: Hareendra Donapati
| Term | One-line meaning |
|---|---|
| ECP | External Control Protocol — Roku's HTTP API on port 8060 (keypress, launch, query, deep link). |
| Telnet 8085 / 8080 | The BrightScript debug console (8085) and dev system commands (8080) on a Developer-Mode Roku. |
| RALE | Roku Advanced Layout Editor — Roku's SceneGraph inspection protocol over a TCP socket (default port 49200), spoken by the TrackerTask component. |
| TrackerTask | The BrightScript component channel developers add to their app to make it reachable from RALE / App Connector — see roku-components/README.md. |
| App Connector | The Dev Studio tab that talks RALE: list / call your channel's GetExternalControlFunctions, plus built-ins (node lookup, registry editor, update node). |
| Network Inspector | The Dev Studio tab / engine that inspects a dev channel's HTTP(S) traffic through a local MITM proxy, with optional hotspot packet capture. |
| Sideload | Uploading and installing a .zip / .pkg dev channel onto a Developer-Mode Roku via its Dev Password. |
| Sideload Relay | RDS advertising itself as a Roku so one sideload from your IDE / browser fans out (install → launch → console) to many targeted devices. |
| Action Script | JSON-described automation that chains keypresses, queries, sideload, App Connector calls, screenshots, conditionals, waits, and variables. Built and run from the Action Scripts tab; also runnable headless via rds. |
| MCP server | Roku Dev Studio's Model Context Protocol server — lets Cursor / Claude Desktop / VS Code drive a real device through this app while it's open. Toggle clients in Settings → MCP Server. |
| Fiddle | The BrightScript scratch editor (Monaco + brighterscript lint) that wraps your snippet into a temporary channel and runs it on a selected device. |
rds | The terminal CLI shipped by roku-dev-studio-api (rds discover, rds keypress, rds script run, rds rale repl, …). |
Roku Dev Studio is available for:
| Platform | Options |
|---|---|
| macOS | DMG installer, Portable ZIP archive |
| Windows | NSIS installer, Portable executable |
| Linux | DEB package, AppImage |
| Home |
|---|
![]() |





.zip uploader is served at the relay address for sideloads without an IDE8085
49200)GetExternalControlFunctions exposes in your scenefunctionParams arrayselectNode, setField, or removeField on the matched nodegetNodeById, getNodeByName) plus a full registry editor — get all sections, add / update section, remove section, set / edit / remove section key, clear all
host:, method:, status:, type:, kind:, path: (comma = OR), group by host, and jump to errorsroku-dev-studio-network-inspectorassignToVar on Device Query / App Function / RALE Command stores values; reference them as ${name} in later step fieldsmedia-player state, the active app, a RALE node field, or a stored variable; branches can nestdelayMs, or wait until a condition becomes true — media-player state, or rale-node-field polling getNodeById with operators (equals, contains, matches, hasAnyValue, …) plus optional timeoutMs / pollIntervalMsrds script run

roku-dev-studio-mcp server lets Cursor, Claude Desktop, and VS Code drive a real Roku through this app while it's openroku-dev-studio MCP entry; other entries in that client's MCP config are left untouchedkeypress, launch_app, screenshot, app_function, rale_command, telnet_connect / get_telnet_log / telnet_disconnect, …) plus Action Scripts for multi-step / conditional flows that drop into the Builder for human reviewpackages/roku-dev-studio-mcp/README.md for the tool catalog, bridge protocol, and design notes
Each row is one supported host (Cursor, Claude Desktop, VS Code, Visual Studio Code Insiders, VSCodium, ChatGPT Desktop, Windsurf). Toggling a row writes / removes only the roku-dev-studio entry in that client's MCP config — other entries in the same file are left untouched. Open Config File opens the rendered JSON for inspection. Hosts that aren't installed are disabled with an inline hint.
Ctrl/Cmd+Shift+B) or the Open Fiddle button on the Query tabroku-components/fiddle/), sideloads it on the selected device, and streams the BrightScript debug console (8085) into the Fiddle window| Fiddle window (desktop) |
|---|
![]() |
| Same snippet running on the Roku |
![]() |
Ctrl/Cmd+Shift+O) opens a dedicated window with the same find / structured-log / URL-detection chrome as the live Console tab — handy for triaging logs from a previous session or a teammaterds CLI (terminal)roku-dev-studio-api: rds discover, rds device info, rds keypress, rds launch, rds ecp query, rds sideload, rds screenshot, rds script validate / run, rds rale repl, rds appconnector connect — works direct over LAN or against a --relay server URL.Open with Ctrl/Cmd+, (or Roku Dev Studio → Settings on macOS, File → Settings on Windows / Linux). Seven sections:
roku-dev-studio in your AI client(s) — see AI Agents (MCP Server) above for the screenshot| General | Action Scripts |
|---|---|
![]() | ![]() |
| Device Performance | Timing & Network |
![]() | ![]() |
Ctrl/Cmd+Shift+D)Ctrl/Cmd+Shift+P)Ctrl/Cmd+Shift+L)safeStorage — backed by macOS Keychain, Windows DPAPI, secret-service, or kwallet where available; UI shows the storage backend status (encrypted / unencrypted / unavailable)Roku Dev Studio can control devices over the internet using a remote server bridge. This lets you manage devices in remote locations without being on the same network as the desktop app.
Option A — From this repo:
git clone https://github.com/paramount-engineering/roku-dev-studio.git
cd roku-dev-studio
npm install
npm run remote-server # listens on port 4951 by default
Option B — From npm:
npm install -g roku-dev-studio-remote-server
roku-remote-server # or: roku-remote-server 4951
See the remote server package README for the full HTTP/WebSocket API and Swagger docs.
4951) on the host running the relay.http://remote-server-ip:4951)./api-docsSee the remote server package README for detailed setup instructions and API documentation.
.
├── apps/
│ └── roku-dev-studio/ # Electron desktop app (see INSTALLATION.md)
├── packages/
│ ├── roku-dev-studio-api/ # Shared API + `rds` CLI (npm: roku-dev-studio-api)
│ ├── roku-dev-studio-mcp/ # MCP server bundled into the desktop app
│ ├── roku-dev-studio-network-inspector/ # Network capture + MITM proxy engine
│ ├── roku-dev-studio-platform/ # Shared platform helpers (path-safe, OS identity)
│ └── roku-dev-studio-remote-server/ # HTTP/WS relay (npm: roku-dev-studio-remote-server)
├── roku-components/ # TrackerTask + Fiddle SceneGraph assets
├── package.json # Workspace root (workspaces: apps/*, packages/*)
├── INSTALLATION.md
└── README.md
The Electron app’s own tree (TypeScript main.ts / preload.ts bundled to main.bundled.cjs / preload.bundled.cjs, renderer/, build assets) lives under apps/roku-dev-studio/.
See Installation for setup and build instructions.
This project is licensed under the MIT License.
Third-party components used in this software and their licences:
| Library | Purpose | Licence |
|---|---|---|
| @tanstack/virtual-core | Virtualized list rendering (telnet console, large script results) | MIT |
| archiver | Building sideload .zip packages | MIT |
| brighterscript | BrightScript linting in the Fiddle editor | MIT |
| commander | rds CLI argument parsing | MIT |
| electron | Desktop app runtime | MIT |
| electron-builder | Packaging & installers | MIT |
| form-data | HTTP multipart uploads | MIT |
| modern-screenshot | DOM-to-image capture for chart cards / PDF export | MIT |
| monaco-editor | Code editor (Fiddle, action-script step editors) | MIT |
| pdf-lib | PDF generation | MIT |
| sharp | Image processing (icons/build) | Apache-2.0 |
| solid-js | Reactive framework powering the new renderer | MIT |
| ws | WebSocket client | MIT |
Their dependencies are used under the terms declared in package-lock.json and each package’s repository.
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official GitHub integration for repos, issues, PRs, and CI/CD workflows