Skip to content

Development

RadicalMuffinMan edited this page Jul 31, 2026 · 2 revisions

Development

Notes for working on the Moonfin Roku codebase. For build commands, see Building from Source.

Developer notes

  • Written in BrighterScript, which transpiles to BrightScript, with SceneGraph XML for the UI.
  • Built with the brighterscript compiler (bsc) through npm run build.
  • Linted with @rokucommunity/bslint and formatted according to bsfmt.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.

Project structure

├── 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

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.

Contributing

  • 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.json and bslint.json enforce.
  • 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.

Clone this wiki locally