Maestro Makes roku development easier, especially for experienced software engineers from other platforms
I believe that experienced developers from android, ios, c#, web, node, etc, should be able to be productive on a roku app in no more than a week, just as they would on any other platform. So I wrote maestro to make that possible.
Maestro is built to:
- Raise velocity
- Increase productivity
- Reduce learning
- Simply cross-skilling
- Make roku development more fun
- Produce roku apps that can be maintained by non roku developer
- Produce roku apps that can be unit tested easily
- Write code that can be tested and breakpoint debugged, outside of SG views (which are slow as hell, and prone to crashing when breakpoint debugging)
- to view a sample, with no need for compiling, sideload the maestro sideload.zip, onto your roku.
- git clone https://github.com/georgejecook/maestro-roku-sample.git
- npm install
- npm run ropm
- open the project in vscode
- ensusre you have the brighterscript vscode extension installed
- .vscode/.env.sample to .vscode/.env and edit the
ROKU_DEV_TARGET
andROKU_DEVPASSWORD
variables, to match your roku device. - launch the
SAMPLE APP
dev target.
note, some sample screens will lose focus when you back out of them. Sorry about that! We will fix that soon - for now, just press home and launch again.
In bsconfig.json, you can change the rokuLog settings to control how logging works (this is part of roku-log)
- use
strip
flag to remove logs - use
insertPkgPath
to inject the file details into each log line - if you set the vscode brightscript plugin setting"brightscript.output.hyperlinkFormat":
to"FilenameAndFunction"
, then the output will automatically include clickable hyperlinks, which is a very pleasant deubgging experience.
We maintain a simple sample project with sensible examples, which can show you everything you can do with maestro. It is WIP.
Presently the project may be broken - we will get it fixed up, with a more full example of how to use maestro to build a FULL app in 2024Q2
- Clone the sample project and follow the instructions there
Maestro-roku docs can be found here
Because of the way that maestro plugin generates certain files, ropm can will cause errors when you install maestro. You will have to include a script to fix any of these broken files, and run it after you ropm hook.
/* eslint-disable github/array-foreach */
/* eslint-disable @typescript-eslint/no-var-requires */
/* eslint-disable @typescript-eslint/no-require-imports */
const fs = require('fs-extra');
const path = require('path');
let sourceDir = path.join(__dirname, '..', 'src', 'components', 'roku_modules', 'maestro');
try {
fs.readdirSync(sourceDir).forEach(file => {
let filePath = path.join(sourceDir, file);
if (filePath.endsWith('Task.xml')) {
let text = fs.readFileSync(filePath, 'utf8');
let r = /\/roku_modules\/rokucommunity_bslib/gim;
text = text.replace(r, '/roku_modules/maestro');
fs.writeFileSync(filePath, text);
}
});
} catch (e) {
}
Change your ropm task, as follows. in package.json, scripts:
"ropm": "node scripts/maestro-ropm-hook.js ropm copy",