Skip to content

Navigation Menu

Sign in
Sign up

Contributing

abduznik edited this page Apr 6, 2026 · 1 revision

Contributing

Project Structure

  • 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

Key Rules

  • 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

Adding a New Emulator

  1. Create a new strategy file in lib/core/emulator/strategies/
  2. Extend EmulatorStrategy abstract class
  3. Implement: ame, emulatorId, supportedSlugs, getExecutableForPlatform(), launch(), launchStandalone(), esolveSavePath(), supportsSaveSync
  4. Register in lib/core/emulator/strategy_registry.dart
  5. Add download definition to lib/core/emulator/emulator_registry_data.dart (type: direct or github, with platform URLs/asset filters)
  6. If save sync needed: create save strategy in lib/core/save/strategies/ and register in save_sync_service.dart

Adding a New Save Strategy

  1. Create a new file in lib/core/save/strategies/
  2. Extend SaveStrategy abstract class
  3. Implement: strategyId, getSaveDir(), getSaveFiles(), estoreSave()
  4. Register in save_sync_service.dart getStrategyForSlug() switch

Development Workflow

  • 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

Getting Help

  • Open a GitHub Issue for bugs or feature requests
  • Check existing issues before opening a new one
  • For questions, use GitHub Discussions

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /