forked from jellyfin/jellyfin-roku
-
Notifications
You must be signed in to change notification settings - Fork 11
Development
RadicalMuffinMan edited this page Jul 31, 2026
·
2 revisions
Notes for working on the Moonfin Roku codebase. For build commands, see Building from Source.
- Written in BrighterScript, which transpiles to BrightScript, with SceneGraph XML for the UI.
- Built with the
brighterscriptcompiler (bsc) throughnpm run build. - Linted with
@rokucommunity/bslintand formatted according tobsfmt.json. - Target resolution is FHD, 1920x1080.
- UI changes should be tested on real Roku hardware when possible. The emulator doesn't reproduce focus and animation behavior faithfully.
├── source/ # Entry point, API clients, utilities, constants, enums
│ ├── Main.bs # Channel entry point
│ ├── api/ # Jellyfin, Seerr, and plugin API calls
│ └── utils/ # Shared helpers
├── components/ # SceneGraph components, one .bs + .xml pair each
│ ├── home/ # Home screen, media bar, rows
│ ├── details/ # Movie, series, season, and playlist detail screens
│ ├── settings/ # Settings screens and the plugin sync surface
│ ├── seerr/ # Seerr discovery, browse, and request flows
│ ├── mediaPlayers/ # Video, audio, and photo playback
│ ├── liveTv/ # Guide, channels, and recordings
│ └── ... # Login, search, genres, favorites, keyboards, tasks
├── locale/ # Translations, one folder per locale
├── images/ # Bundled artwork and icons
├── settings/ # Settings definitions
└── manifest # Roku channel manifest
Translations are managed in Weblate at translate.moonfin.io, which owns the contents of locale/. Edit strings there rather than by hand so contributions aren't overwritten on the next sync.
- Check the existing issues before starting, in case your idea or bug is already tracked.
- Open an issue first for anything significant, so the approach can be discussed before the work happens.
- Match the existing code style, which
bsfmt.jsonandbslint.jsonenforce. - Test on real Roku hardware.
To submit a change, fork the repo, create a feature branch, make your changes with clear commit messages, test on device, and open a pull request with a clear description.