This is a fork of https://github.com/bschlenk/node-roku-client modified to work in a JS only react-native environment. The main difference is that this library doesn't support discovery of roku devices on the network. Yes, this makes it essentially useless. This requires knowing the ip of the roku.
If you are looking for a react-native version that does support discovery, you should look for another library.
Discover Roku devices via
ssdp and control the device with methods that perform
http requests to the device.
6.0.0 or higher
- connected to the same network as the Roku device.
- a router/network that supports UPnP (for ssdp)
$ npm install roku-client
// es2015;// commonjsconst Client keys = ;Client;// Or, if the roku address is already knownconst client = '';client;
Client.discover() will return a promise which resolves to a Client object on success. The Client will be initialized to the address of the first device to respond. This client object will contain the methods needed to control a roku device. Commands are sent to the Roku device via
HTTP protocol as found on the docs.
If there are mutiple Roku devices on the network, call
discover with the wait parameter set to true. It will return a promise that resolves to a list of all addresses found.
|Method Name||Return Type||Details|
||network ip and port
||List of all apps installed on this device.|
||A single object representing the active app, or null if the home screen is active.|
||A map of this Roku device's properties. Varies from device to device.|
||Send a keypress from keys.js or a single character to send that letter (e.g. to an input box).|
||The same as
||The same as
||Saves the image to a temp file and returns the filename.|
||Launch the given app by its id.|
||Send the text string as a series of
keys.js contains a list of keypress values understood by Roku. It can be accessed programmatically:
;keysHOME // 'Home'keysLEFT // 'Left'
Client#command() method provides a simpler interface over the keypress and text methods.
It allows them to be chained and repeated and handles all promise chaining internally.
Each key within the keys.js module is available on the commander
instance in camelcase form. Additionally, a
.text() method is available to send
text strings. Each key command takes an optional number to specify the number
of times to repeat the command, defaulting to
After chaining the desired methods, call
.send() to send them to the Roku.
a promise that completes when all buttons have been pressed, or when the Roku fails to respond to
any of the commands. A
Commander instance should not be reused after calling
Navigate to a search box and enter text
Turn the volume up by 10
Conditionally perform a command
let command = client;if goUpcommand = command;elsecommand = command;commandright;
$ npm test
This will run the linter, unit tests, and coverage.
Tested on OSX & raspberry pi w/ raspbian jessie, and with Roku TV.