Skip to content

Releases: AverageConsumer/R-Shop

v1.7.0 — 66 Systems, Download UX & Polish

12 Apr 21:04

Choose a tag to compare

Massive platform expansion, download progress everywhere, and a full UI polish pass. All backwards-compatible — existing configs and libraries work as-is.

Highlights

  • 66 supported systems — up from 28. Added TurboGrafx-16/CD, Neo Geo Pocket/CD, WonderSwan, Virtual Boy, FDS, DSi, SG-1000, ColecoVision, Intellivision, Vectrex, MSX, Amstrad CPC, Commodore 64, Amiga, ZX Spectrum, Arcade, DOS, and many more. Each with icon, RetroAchievements ID, IGDB mapping, and folder aliases. (Closes #10)
  • Download progress on every screen — global progress bar at the top, eShop-style cover reveal on game cards, and live percentage fill in the download button on detail screens.
  • App-wide contrast fix — accent-colored text replaced with high-contrast near-white tints. Every label is readable regardless of system color.
  • Unified controller mapping — L1/R1 always zoom (column count), L2/R2 always switch tabs. Consistent across all screens, no more per-screen surprises.

Change Log

Added:

  • 38 new platform definitions with SVG icons from Monochrome Gaming Logos
  • RetroAchievements IDs for GameCube (16), Wii (19), Wii U (20), 3DS (62), Atari 5200 (50)
  • Global download progress bar (thin green bar at screen top)
  • Game card download overlay — cover reveals from bottom to top during download
  • Download button shows live progress (queued → percentage → extracting)
  • Color.forText / Color.forIcon contrast extensions
  • Localized "X GB free" storage text across all 6 languages
  • Localized download button states (queued, extracting)

Improved:

  • ConsoleHud: non-functional buttons are hidden instead of greyed out
  • Share button disabled (unfocusable) when game not installed
  • Collection button disabled when no shelves exist
  • D-pad skips disabled icon buttons automatically
  • Exit confirmation dialog modernized (icon, clean buttons, ConsoleHud)
  • Delete confirmation dialog modernized (same pattern)
  • Variant picker focus glow toned down for readability
  • Summary section shows 6 lines by default (was 4)
  • Cover column wider in landscape when no metadata available
  • Shoulder button section-jump removed from filter overlay

Removed:

  • Other Versions section (always showed "not found", provided no value)
  • Per-screen shoulder button overrides (now handled globally)
  • Greyed-out HUD button rendering

Fixed:

  • FDS RetroAchievements ID corrected (81, was incorrectly 43/3DO)
  • RomM folder aliases for sega32 and pico added
  • 12 dark accent colors brightened for readability (SG-1000, ColecoVision, DSi, Jaguar, C64, etc.)

Install

Download R-Shop-v1.7.0.apk below and install on your handheld.

Upgrade note: Existing installs keep all settings and library data. The 38 new systems appear automatically when your RomM server or local folders contain matching content — no reconfiguration needed.

v1.6.0 — Sources, Pairing & Onboarding Rewrite

12 Apr 15:27

Choose a tag to compare

The biggest architectural update since launch — R-Shop now has a proper Sources management system, RomM 4.8 token pairing, and a completely rewritten onboarding flow. All backwards-compatible: existing configs migrate transparently on first launch.

Highlights

  • Sources screen — a unified hub to add, configure, disable, and remove all your game sources (RomM, SMB, FTP, Web). Per-system mapping for manual sources, colored source dots on every game card showing where each ROM comes from.
  • RomM 4.8 token pairing — authenticate via QR code scan or manual token entry. Live server probe validates your connection before saving. One-tap re-pair when tokens expire.
  • One-question onboarding — "How do you store your ROMs?" replaces the old multi-step wizard. Each answer leads to a tailored path: local folder picker, network source setup, or RomM pairing. No more dead-end "Skip" option.
  • Full localization — every user-facing string is now translatable. Ships with English, German, Spanish, French, Portuguese, and Japanese.
  • Merge-only mode — failover logic removed entirely. Merge is simpler, faster, and handles all multi-source scenarios. Existing configs upgrade silently.

Change Log

Added:

  • Sources management screen with controller-grade focus handling
  • RomM 4.8 Client API Token pairing (QR + manual) with live server probe
  • Per-card source dots (game grid + library); stacked dots for multi-source games
  • Manual source creation (SMB, FTP, Web) with type picker and per-system mapping editor
  • Re-pair action for expired RomM tokens
  • Onboarding chooser with ROM folder picker on every path
  • Full l10n framework with 6 languages (EN, DE, ES, FR, PT, JA)

Improved:

  • Merge is now the sole multi-source strategy (default enabled for all configs)
  • Settings restructured: Sources first, "Edit Systems" read-only and links to Sources
  • Unified RA setup screen (shared between onboarding and settings)
  • Transparent v2→v3 config migration on first launch

Removed:

  • RomM Server settings tile (replaced by Sources)
  • Scan Library tile (use Sync All from quick menu)
  • Failover mode
  • "Skip for now" onboarding option

Fixed:

  • Game list filter state (installed only, favorites, regions) now persists when leaving and re-entering a system (#12)
  • Sync timestamps persist correctly from syncAll/syncSystem
  • Auto-merge providers when a system has 2+ contributing sources
  • Installed games stay visible after disabling their source
  • Legacy providers tagged as managed so disable/remove cleans up properly
  • Alternative sources persisted in DB (multi-source games survive sync)
  • RA screen focus clipping

Install

Download R-Shop-v1.6.0.apk below and install on your handheld.

Upgrade note: Existing installs keep all settings, downloads, and library data. Your config will silently migrate to v3 format on first launch — no action needed. The new Sources screen lives in Settings and replaces the old RomM Server tile.

🚀 v1.5.2 — RomM Sync Hotfix

09 Apr 12:00

Choose a tag to compare

Hotfix release addressing a long-standing RomM sync bug that broke library fetching for users with larger collections. Thanks to @jpgalina for the detailed bug report in #11.

Highlights

  • RomM platform filter actually works now (#11) — the platform_ids query parameter was being serialized in a way the RomM API silently ignored, so every system received the entire library mixed across all platforms. Combined with the heavier RetroAchievements metadata payloads in recent RomM versions, this caused syncs to stall at 0/N for users with bigger libraries. The serialization is fixed and the server now actually filters by platform.
  • Local fallback when remote fails — if a remote source can't be reached for a system, the sync now falls back to a local-only filesystem scan so your locally-present ROMs stay visible instead of disappearing from the grid.
  • Persistent error visibility — the status pill in the top-left now turns red, pulses gently, and stays visible until the next sync starts. Previously it was amber and auto-dismissed after 6 seconds, which was easy to miss.
  • Sync receive timeout doubled+ — bumped from 30s to 90s. A single 500-ROM page from RomM with embedded RA achievements and screenshots can be several MB, especially with high server latency.

Change Log

Fixed:

  • RomM platform_ids query parameter now uses repeated query params (platform_ids=1&platform_ids=2) so the RomM API actually applies the filter (#11)
  • Sync receiveTimeout raised from 30s to 90s for paginated RomM fetches with large metadata payloads

Added:

  • Local-only fallback scan when remote sync fails — applied to all four sync paths (full sync, smart sync, library scan, single-system sync)
  • Persistent red error pill with subtle pulse animation, replacing the auto-dismissed amber warning

Internal:

  • Test for RommApiService.fetchRoms query params updated to assert the correct list-format serialization

Install

Download R-Shop-v1.5.2.apk below and install on your handheld.

Upgrade note: existing installs will keep all settings, downloads, and library data. The first sync after upgrading may take a bit longer than usual as it re-fetches the (now correctly filtered) per-platform ROM lists.

🚀 v1.5.1 — Detail Screen UX Polish

16 Mar 18:23

Choose a tag to compare

Universal layout fixes and detail screen polish — focused on making every screen work perfectly on both 4:3 and 16:9 handhelds.

Highlights

  • Crystal-clear focus indicators — white borders and glow replace accent-color-only styling, so you always know where the D-pad focus is, regardless of system theme color.
  • Phantom focus eliminated — previously, the download button, favorite icon, and first screenshot all appeared focused simultaneously. Now only the actually focused element lights up.
  • Universal 4:3 / 16:9 layout — 9 overlays and dialogs replaced hardcoded pixel constraints with screen-relative values. No more overflow on narrow screens, no wasted space on wide ones.
  • Variant picker redesign — compact tag pills with region flags, marquee-scrolling filenames for long ROM names, wider overlay, and D-pad left/right blocked to prevent focus leaking to the background.
  • Action buttons anchored — Download/Delete and icon buttons now stick to the bottom of the left column in landscape, consistent across all detail views.

Change Log

Improved:

  • Detail screen focus visibility — white borders and dual-layer glow (white inner + accent outer) on all focusable elements
  • Correct focus tracking — sub-widgets only highlight when their section is active
  • Action buttons anchored to bottom of left column in landscape layout
  • Variant picker — wider (55%), compact tag pills, marquee filenames, D-pad L/R consumed
  • Other Versions section — shows only RomM/IGDB siblings, no longer duplicates local variants
  • Universal 4:3 and 16:9 layout — screen-relative clamp() values across description overlay, game detail overlay, exit dialog, system picker, shelf picker, game list overlay, system selector, quick menu, and detail screen cover column
  • MarqueeText shared widget — ticker-scroll for long text in version cards and sibling entries

Fixed:

  • Variant picker focus restore after returning from download queue
  • Icon button resize on focus — removed labels that caused multi-line wrapping on 4:3 screens
  • LanguageBadges overflow in version cards

Internal:

  • Extracted MarqueeText to lib/widgets/marquee_text.dart
  • isSectionFocused parameter threaded through ActionButtonsRow, ScreenshotsCarousel, OtherVersionsSection

🚀 v1.5.0 — Smart Sync & Quick Menu Controls

15 Mar 20:06

Choose a tag to compare

Smart sync, enriched game details, and ROM file sharing — the biggest update yet.

Highlights

  • Enriched game detail screens — RomM metadata now powers a console-store-style detail view with genres, age ratings, developer, release date, game modes, star rating, summary, screenshots, and related games. Blurred cover background with accent-tinted glassmorphic cards.
  • Smart sync with cooldown — app launch skips recently-synced systems, drastically reducing redundant network traffic on frequent launches. Configurable cooldown (Always / 15 min / 30 min / 1 hour / 2 hours / 6 hours).
  • Per-system sync from quick menu — press Start on the home screen to sync just the selected console, with a "Synced X ago" subtitle showing freshness at a glance.
  • Per-system auto-sync toggle — each console can opt out of automatic sync via console configuration; disabled systems only sync manually.
  • ROM file sharing — Share button on game detail now sends the actual ROM file via the system share sheet.
  • Shelf add & remove — when a game is already in all shelves, the action flips to "Remove from Shelf" with a picker.

Change Log

Added:

  • Enriched game detail screen — genres, age ratings, developer, release year, game modes, star rating, summary, screenshots, and related games from RomM/IGDB metadata
  • Game metadata table (DB v8) with separate game_metadata storage that survives game list refreshes
  • Blurred cover background with accent-tinted gradient overlay on detail screens
  • Smart sync with cooldown — syncSmart() skips systems within the configured cooldown window
  • Per-system auto-sync toggle in console configuration
  • Sync cooldown setting (Always / 15 min / 30 min / 1 hour / 2 hours / 6 hours)
  • Per-system sync from quick menu with human-readable "Synced X ago" subtitle
  • Sync All from quick menu — forces full sync regardless of cooldown
  • Shelf removal from game detail — "Add to Shelf" flips to "Remove from Shelf" when game is in all shelves
  • Quick menu subtitle support
  • ROM file sharing via Share.shareXFiles

Improved:

  • Game detail layout — console-store-style with scrollable landscape columns, adaptive portrait aspect ratio
  • Post-settings sync only force-syncs newly added consoles instead of re-syncing everything
  • Shelf picker dialog accepts custom title parameter
  • Per-system last sync persistence via SharedPreferences (survives app restarts)
  • LibrarySyncService.waitForCompletion() for clean cancel-then-act flows
  • Game detail opens with Download/Delete button focused by default

Removed:

  • Per-system sync list in Settings (replaced by quick menu sync)
  • "Retry Sync" quick menu entry (replaced by "Sync [System]" and "Sync All")

Fixed:

  • Blurred background bleeding through at bottom edge of game detail screen (ClipRect fix)
  • Dead-end when enabling "Hide Empty Consoles" during first sync — never hides ALL systems

Internal:

  • GameMetadataInfo model for IGDB metadata, gameMetadataProvider / groupMetadataProvider
  • SystemConfig.autoSync field with JSON serialization and copyWith
  • SyncCooldownNotifier / syncCooldownProvider with cycle-through UI
  • StorageService.getLastSyncTime() / setLastSyncTime() for per-system ISO 8601 persistence
  • LibrarySyncService.syncSmart() with cooldown, forceSystemIds, and autoSync filtering
  • 143 new test lines (1666 total)

Thanks to @yangeric for the feature ideas and bug reports that shaped this release — the per-system sync, ROM count dashboard, and sync cooldown all came from your feedback. 🎮

🚀 v1.4.2 — Sync Controls & Cover Fix

09 Mar 19:58

Choose a tag to compare

Per-system sync, configurable timeouts, and cover search fix — thanks to @yangeric for the feature ideas and bug reports.

Highlights

  • Per-system sync — Sync individual consoles from Settings instead of being forced to sync everything at once.
  • ROM counts per platform — Each console tile now shows its game count directly in Settings.
  • Configurable sync timeout — Choose between 1, 2, 5, or 10 minutes for slow connections (Synology NAS etc.).
  • Cover search fix — Running "Search Game Covers" twice no longer causes the progress bar to exceed 100%.

Change Log

Added:

  • Per-system sync button on each console tile in Settings (#7)
  • ROM count badges per system in Settings (#7)
  • Sync timeout setting (1m / 2m / 5m / 10m) passed through to all providers (#7)
  • gameCountsPerSystemProvider for stable post-sync ROM counts (#6)

Fixed:

  • Cover search progress exceeding 100% on consecutive runs — generation-based cancellation ensures clean state (thanks @yangeric! #8)
  • DB cascade deletes — removing games now also cleans up orphaned game_metadata and ra_matches rows
  • Background refresh orphan safety — saveGames orphan deletion is now explicit to prevent incomplete fetches from wiping cached games

Internal:

  • LibrarySyncService.syncSystem() for single-system sync
  • CoverPreloadService._generation counter for stale-worker protection
  • 78 new tests (1615 total)

Thanks to @yangeric for the detailed reports and feature suggestions — the screenshots and NAS context really help me prioritize the right things. 🎮

🚀 v1.4.1 — The "Archive & Scale" Hotfix

07 Mar 19:10

Choose a tag to compare

Hotfix for ZIP handling and large RomM libraries — thanks again to @yangeric for the detailed reports.

Highlights

  • ZIP install detection fixed — Game detail screen now correctly recognizes archive files (.zip, .rar) as installed, matching the game list badge.
  • autoExtract setting works — The per-system toggle is now respected. When off, downloaded .zip files stay as-is in the ROM folder.
  • Large libraries supported — RomM pagination no longer times out with 7k+ ROMs per platform. Partial results are returned on failure instead of nothing.

Change Log

Fixed:

  • ZIP install status inconsistency — detail screen now matches the game list badge for archive files (thanks @yangeric! #5)
  • ZIP deletion — deleting a game kept as a .zip archive now works correctly
  • autoExtract setting ignored — the per-system toggle is now properly wired through the download pipeline
  • RomM pagination timeout — large libraries (7k+ ROMs per platform) no longer time out (thanks @yangeric! #4)
  • Provider timeout separation — RomM gets a dedicated 10-minute paginated timeout; FTP/SMB/Web keep a tighter 60-second safety net
  • Flaky clearFilters test — no longer fails intermittently under full test suite load

Thanks to @yangeric for both reports — the nginx log analysis on #4 and the clear reproduction steps on #5 made these quick fixes. 🎮

🚀 v1.4.0 — The "Community Fixes" Update

06 Mar 15:16

Choose a tag to compare

First community-driven release — fixing bugs reported by users, plus performance improvements across the board.

Highlights

  • 3DS ROM support expanded — .cci, .cxi, and .app formats now recognized alongside .3ds and .cia.
  • RomM Switch downloads fixed — Games served as ZIP archives by RomM are now correctly detected and extracted via Content-Disposition header parsing.
  • Faster home screen — Carousel animations scoped per-item instead of globally, reducing unnecessary widget rebuilds.
  • Smarter sync errors — Failed sources are now tracked individually with specific messages instead of a generic "Offline" banner.

Change Log

Fixed:

  • 3DS extension support — added .cci, .cxi, and .app ROM formats (thanks @yangeric! #1)
  • RomM Switch downloads — games served as ZIP archives are now correctly detected and extracted (thanks @gulasch! #2)
  • Deleted games now immediately disappear from the game collection instead of lingering until the next background refresh

Improved:

  • Home carousel performance — AnimatedBuilder now wraps individual items instead of the entire PageView
  • Game list performance — favorites provider uses selective watch to avoid rebuilding when unrelated favorites change
  • Visible systems query — single batch query replaces N individual database calls
  • Sync error reporting — per-system failure tracking with specific error messages ("2 sources unavailable")
  • Library screen — setEquals guard prevents unnecessary rebuilds when installed files haven't changed
  • Thumbnail migration — batch size increased from 3 to 15 (capacity guard handled by ThumbnailService)
  • Memory — gameMetadataProvider now auto-disposes when detail screen is closed

Internal:

  • DatabaseService.deleteGame() for targeted cache entry removal
  • DatabaseService.systemsWithCache() for batch system presence checks
  • LibrarySyncState.failedSystems replaces single error string with per-system failure map
  • 170+ new database upsert tests
  • Updated sync and onboarding tests

Thanks to @yangeric and @gulasch for the first community bug reports — your detailed reports made tracking these down easy. Keep them coming! 🎮

🚀 v1.3.0 — The "Store Detail" Update

01 Mar 14:34

Choose a tag to compare

Console store-style game detail with IGDB metadata, variant picker, and quick menu consolidation.

Highlights

  • Console store-style game detail — Redesigned detail screen with structured layout, section headers, and download area inspired by digital storefronts.
  • IGDB metadata — RomM games now display genre, developer, release year, and summary via a glassmorphic "About This Game" card.
  • Variant picker overlay — Multi-version games open a dedicated picker with all variants, install status, and per-variant download/delete.
  • Quick menu consolidation — Tags, Description, Filename toggle, and Achievements now live in the quick menu instead of dedicated button shortcuts.

Change Log

Added:

  • Console store-style game detail — redesigned detail screen with structured layout, section headers, and download area inspired by digital storefronts.
  • IGDB metadata — RomM games now display genre, developer, release year, game modes, and summary via a glassmorphic "About This Game" card (fetched from RomM's IGDB data).
  • Description overlay — full game summary accessible from the quick menu when metadata is available.
  • Variant picker overlay — pressing A on multi-version games opens a dedicated picker with all variants, install status, and per-variant download/delete actions.
  • Game metadata database — new game_metadata table (DB v8) stores IGDB metadata separately from game entries, surviving library re-syncs.

Improved:

  • Quick menu consolidation — Tags, Description, Filename toggle, and Achievements are now accessible from the quick menu instead of dedicated button shortcuts.
  • Detail screen layout — portrait mode uses scrollable layout with adaptive cover aspect ratio; landscape uses two-column layout with expandable info card.
  • Download action button — redesigned as a standalone widget with distinct states (download, delete, installed, adding, unavailable) and variant count badge.

Fixed:

  • RA sync not triggering after first-time onboarding due to premature mounted check.

Internal:

  • GameMetadataInfo model with hasContent, genreList, averageRating helpers.
  • gameMetadataProvider (FutureProvider.family) for async metadata loading.
  • RommRom extended to parse summary, genres, companies, first_release_date, game_modes, average_rating.
  • 194 new API service tests covering metadata parsing edge cases.

🚀 v1.2.0 — The "RetroAchievements" Update

27 Feb 22:26

Choose a tag to compare

RetroAchievements integration with hash verification, achievement tracking, and per-game progress — plus 1,209 tests.

Highlights

  • RetroAchievements integration — Connect your RA account to track achievements, verify ROMs via hash matching, and view per-game progress directly in R-Shop.
  • Achievements screen — Dedicated viewer with earned/locked badges, points, progress bar, mastery status, and full D-pad navigation.
  • RA badges on game cards — Achievement count and match type (gold for name match, green for hash verified) displayed on every card; mastery outline when fully completed.
  • Post-download hash verification — Downloaded ROMs are automatically hashed and matched against the RA database in the background.

Change Log

Added:

  • RetroAchievements integration — connect your RA account to track achievements, verify ROMs via hash matching, and view per-game progress.
  • Achievements screen — dedicated viewer with earned/locked badges, points, progress bar, mastery status, and full D-pad navigation.
  • RA onboarding step — optional setup during first-run wizard with connection test and skip option.
  • RA config screen — manage credentials (encrypted via SecureStorage) from Settings with connection testing.
  • Post-download hash verification — downloaded ROMs are automatically hashed and matched against the RA database in the background.
  • RA sync service — 3-phase background sync (catalog fetch → name matching → hash verification) with 24h freshness cache and cancellation support.
  • RA badges on game cards — achievement count and match type (gold/green) on every card; mastery outline when fully completed.
  • Add-to-queue toast — animated bottom-right notification when a game is added to the download queue.
  • Hide empty consoles — new toggle in Settings → Preferences to hide systems with no games from the home screen.

Improved:

  • Sync badge — now shows dual pills for library sync (cyan) and RA sync (gold) with independent progress tracking.
  • Game detail screen — RA info section below metadata showing match status, progress bar, and "View Achievements" button; quick menu gains "Achievements" option.
  • Download overlay — visual refinements and better state display.
  • SystemModel — 15+ systems now carry RA console IDs (NES, SNES, N64, GB, GBC, GBA, Mega Drive, SMS, Game Gear, 32X, Atari 2600/7800, Lynx, NDS).
  • Library screen — deduplication of installed entries when same game exists in multiple formats.
  • Cover preload service — improved reliability and error handling.

Internal:

  • Database schema v7 — new tables: ra_games (catalog cache), ra_hashes (hash index), ra_matches (match results).
  • Hash computation for 10+ systems: simple MD5, NES (iNES header strip), SNES (copier header), NDS (multi-section), Lynx, Atari 7800.
  • RaNameMatcher with 4-tier fallback: exact → contains → No-Intro filename → fuzzy (Levenshtein).
  • New providers: raGameProgressProvider, raRefreshSignalProvider, raMatchResultProvider, raSyncServiceProvider.
  • 1,209 tests (up from 1,069) — new suites: RA hash service, RA models, RA name matcher, expanded database and onboarding tests.