Roku CLI
Fast TypeScript CLI and library for controlling Roku devices via the ECP API.
Highlights
- Full ECP control (keys, text, search, apps, device info, media state).
- Interactive mode for remote-like control from the terminal.
- Local bridge mode for other apps to send commands over HTTP.
- SSDP discovery, emulator server, and proxy tools.
- Strong typing, retries, timeouts, and better error handling.
Requirements
- Node 18+ (Node 20+ recommended)
Install (recommended)
npm install -g roku-ts-cli@latest
npm install
npm run build
npm link
Quick Start
roku discover --save livingroom --index 1
roku --host livingroom device-info
roku --host livingroom apps
CLI Usage
roku 192.168.1.118
roku --host livingroom command home
roku --host livingroom literal "hello"
roku --host livingroom search --title "Stargate"
roku --host livingroom search --app plex
roku alias set plex 13535
roku --host livingroom launch plex
Interactive Mode
roku livingroom
roku --host livingroom interactive --listen 19839 --token secret
Bridge Mode (Local HTTP)
roku --host livingroom bridge --listen 19839 --token secret
Send commands from other apps:
curl -X POST http://127.0.0.1:19839/key \
-H "Content-Type: application/json" \
-H "Authorization: Bearer secret" \
-d '{"key":"home"}'
curl -X POST http://127.0.0.1:19839/text \
-H "Content-Type: application/json" \
-H "Authorization: Bearer secret" \
-d '{"text":"hello"}'
Endpoints:
POST /key { "key": "home" }
POST /text { "text": "hello" }
POST /search { "title": "Stargate" }
POST /launch { "app": "plex" }
GET /health
GET /stats
Run Bridge as a Service
You can run the bridge in the background using your OS service manager.
macOS + Linux (user service)
Install and manage the service entirely through the CLI (no manual plist/unit edits needed):
roku bridge install-service --port 19839 --token YOUR_TOKEN --host YOUR_HOST_OR_ALIAS --user
roku bridge start --port 19839 --token YOUR_TOKEN --host YOUR_HOST_OR_ALIAS --user
roku bridge stop --user
roku bridge restart --port 19839 --token YOUR_TOKEN --host YOUR_HOST_OR_ALIAS --user
roku bridge status --user
roku bridge status --port 19839 --token YOUR_TOKEN
roku bridge diagnose --user
roku bridge uninstall --user
Emulator & Proxy
roku server --port 8060
roku proxy --remote-host 192.168.1.10 --local-port 8061
Library Usage
import { Roku } from "roku-ts-cli";
const roku = new Roku("192.168.1.10");
const apps = await roku.getApps();
await roku.home();
Tests
npm run build
npm test
License
MIT