-
-
Notifications
You must be signed in to change notification settings - Fork 14
Contributing
abduznik edited this page Apr 6, 2026
·
1 revision
- Flutter/Dart codebase, Riverpod for state management
- lib/core/ — all business logic (RomM API, save sync, emulator strategies, downloads)
- lib/ui/ — screens and widgets
- lib/providers/ — Riverpod providers (thin wrappers over services)
- gent.md in the repo root — full file map and coding contracts for LLM-assisted development
- No file exceeds 600 lines — split if needed
- All RomM API calls go through omm_service.dart only
- New emulator = new file in core/emulator/strategies/, registered in strategy_registry.dart
- New save strategy = new file in core/save/strategies/, registered in save_sync_service.dart
- Never use Platform.isWindows directly — use dart:io as io and io.Platform
- Create a new strategy file in lib/core/emulator/strategies/
- Extend EmulatorStrategy abstract class
- Implement: ame, emulatorId, supportedSlugs, getExecutableForPlatform(), launch(), launchStandalone(), esolveSavePath(), supportsSaveSync
- Register in lib/core/emulator/strategy_registry.dart
- Add download definition to lib/core/emulator/emulator_registry_data.dart (type: direct or github, with platform URLs/asset filters)
- If save sync needed: create save strategy in lib/core/save/strategies/ and register in save_sync_service.dart
- Create a new file in lib/core/save/strategies/
- Extend SaveStrategy abstract class
- Implement: strategyId, getSaveDir(), getSaveFiles(), estoreSave()
- Register in save_sync_service.dart getStrategyForSlug() switch
- Claude handles planning and architecture decisions
- Gemini CLI executes code changes
- gent.md is the source of truth for file contracts
- Open an issue first for larger changes
- Open a GitHub Issue for bugs or feature requests
- Check existing issues before opening a new one
- For questions, use GitHub Discussions