Skip to content

Releases: misobadev/neostation-frontend

NeoStation Beta 0.9.4+116

Choose a tag to compare

@github-actions github-actions released this 04 Jul 15:32
  • No changes

What's Changed

  • fix: scrape from the list view via Select, with on-screen feedback by @androosio in #70
  • fix: exclude virtual 'all'/'favorites' groups from "systems found" count by @androosio in #72
  • fix(secondary): keep correct system art on the secondary display when returning from a system by @androosio in #73
  • fix(update): restore download progress bar in UpdateDialog by @misobadev in #74
  • fix(theme): support animated GIF backgrounds from theme store by @misobadev in #75
  • fix(android): resolve Kotlin warnings in EmulatorLauncher and MainActivity by @misobadev in #76
  • fix(android): replace deprecated window.setDecorFitsSystemWindows with WindowCompat by @misobadev in #77
  • fix(android): detect installed RetroArch variant and set as default for all systems by @misobadev in #78
  • fix(systems): stop secondary-display recursion in the systems carousel by @androosio in #79
  • chore: fix formatter drift from newer stable Dart by @androosio in #80
  • feat(secondary): mirror main-screen fanart + logo on secondary, refresh on scrape by @androosio in #81
  • fix(scrape): play nav sound when scraping via the Select shortcut by @androosio in #82
  • fix(startup): don't gate ROM scan behind network update checks by @androosio in #83
  • feat(secondary): RetroAchievements panel, Now Playing dock, screenshots, and dim controls on the secondary display by @androosio in #86
  • build(deps): bump path_provider from 2.1.5 to 2.1.6 by @dependabot[bot] in #51
  • build(deps): bump file_picker from 12.0.0-beta.5 to 12.0.0-beta.7 by @dependabot[bot] in #53
  • build(deps): bump material_symbols_icons from 4.2928.1 to 4.2951.0 by @dependabot[bot] in #54
  • build(deps): bump actions/cache from 5 to 6 by @dependabot[bot] in #60
  • build(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #61
  • build(deps): bump fvp from 0.37.2 to 0.37.3 by @dependabot[bot] in #84
  • build(deps): bump sqlite3 from 3.3.2 to 3.3.4 by @dependabot[bot] in #85
  • feat(i18n): translate missing English strings across 9 locales by @misobadev in #87
  • feat(game): add permanent delete game option with disk and SAF cleanup by @misobadev in #88
  • added armsx2 refresh emulator for ps2 by @ItsRetroPup in #90
  • feat: replace old default flag with default_core and default_standalone by @misobadev in #91

New Contributors

Full Changelog: v0.9.3+114...v0.9.4+116

NeoStation Beta 0.9.3+114

Choose a tag to compare

@github-actions github-actions released this 27 Jun 12:46

Hola everyone! πŸš€ NeoStation update 0.9.3+114 is now available.

Before jumping into the patch notes, I have some great news. Please give a huge welcome to @androosio , who is officially joining as a new dev maintainer for the project.

This entire update is packed with fixes and improvements made directly by him. I'm really excited to have him on board because his work and code align perfectly with the open-source philosophy and the direction I want for NeoStation. Thanks for joining and for the awesome work, @androosio !

Here is the summary of what this new version brings:

Compatibility & Features:

ES-DE / RetroBat folder aliases: NeoStation now mirrors the same folder names (aliases) used by these frontends. Perfect if you share the same ROMs folder, SD card, or hard drive across different setups!

Bugfixes:

Secondary display crash fix: Fixed a critical loop (stack overflow) that caused the app to freeze or crash when updating information on a secondary screen.

OLED theme art: Fixed a visual bug so console art now displays correctly on the secondary screen when using the OLED palette.

DraStic launching on Android: Finally! Fixed launching Nintendo DS games using the DraStic emulator. It now uses the proper URI system (SAF) to bypass file permission issues on modern Android versions.

Gamepad adjustment: The "Random Game" function is now mapped only to the L3 button (previously, it was also triggering by mistake when pressing L2).

NeoStation Beta 0.9.2+113

Choose a tag to compare

@github-actions github-actions released this 22 Jun 03:16

What's Changed

  • feat(settings): add 12-hour (AM/PM) clock option by @androosio in #57
  • fix: change retroachievement game name fuzzy search to prefer main game ov… by @SpamLark in #55

New Contributors

Full Changelog: v0.9.1+112...v0.9.2+113

NeoStation Beta 0.9.1+112

Choose a tag to compare

@github-actions github-actions released this 19 Jun 02:15

New Update Available: NeoStation v0.9.1+112

Hello everyone. First of all, I wanted to apologize if I've been a bit inactive in the channel lately; I have been dealing with a heavy workload these days.

I just published a new version of NeoStation. This update is primarily focused on important fixes for the "Games Grid" and "Games Carousel" views, along with several adjustments to the scraping system.

Download the latest version here: https://neostation.dev/downloads/

Release Notes:

Views and UI:
Added a favorites button in the Games Grid and Games Carousel views.
Fixed the empty card view issue for fanarts in the Games Grid and Games Carousel.
Fixed the aspect ratio changing when switching between fanart and box art in the Games Grid view.
Applied fixes to the music view.

Scraping and Metadata:
Fixed scraping for windows, epic and gog systems for screenscraper.
Fixed scraping directly from the Games Grid and Games Carousel views.
Fixed scraping for games directly from the favorites list.
Updated the scrape button behavior when using a gamepad.

System:
Fixed an issue where ROMs would scan again if NeoStation restarted due to insufficient RAM.

System and Emulator Compatibility:
I'd like to take this opportunity to remind you that if you need to fix or add compatibility with specific systems and emulators, there is a dedicated repository for that: https://github.com/misobadev/neostation-systems
You are more than welcome to submit your changes, contributions, and fixes there.

Thank you all for your patience and support!

NeoStation Beta 0.9.0+106

Choose a tag to compare

@github-actions github-actions released this 06 Jun 04:20

Hey everyone! I’m excited to announce the release of NeoStation 0.9.0+105. I've been working hard on this update to bring you major quality-of-life improvements, a brand-new grid experience, and some serious performance upgrades under the hood.

Here are the biggest highlights from this release:

New Features & UI Upgrades

Redesigned System Cards (1:1 Ratio): I've completely redesigned the system cards to use a new 1:1 square format. Important: I highly recommend re-downloading the "neostation" theme from the downloader! If you don't, the system logos will likely look way too big due to the new proportions.

New Game Grid View: A brand-new Box-2D grid view mode is here! It features smooth border transitions and no shadow clipping. You can easily toggle between List and Grid modes using the new dropdown or directly with your gamepad (X button). Important: You will need to re-scrape your games to download the Box-2D cover art for this new view!

Pinch-to-Zoom & Dynamic Grids: I've added full manual control over your grid densities. You can now use pinch-to-zoom gestures (on Android) to seamlessly scale between Small, Medium, Large, and XL card sizes, complete with a new floating indicator.

Advanced Scraper Control: You now have granular control over your downloads. I've replaced the binary flags with individual toggles for Fanart, Screenshots, Wheels, Box-2D, and Videos.

Interactive Region Priority: I've added a new Region tab in the scraper with a drag-and-drop list (also fully compatible with gamepads) so you can easily set your exact region priorities for metadata.

Pull-to-Refresh: Added custom pull-to-refresh gestures on Android for both the grid and carousel views to quickly rescan your systems.

Performance & Stability

RAM-Aware Image Caching: I implemented a smart, RAM-aware image cache that adjusts dynamically based on your device's memory. This means smoother scrolling and no out-of-memory crashes when browsing massive libraries!

Native Carousel Engine: I completely ripped out the old carousel dependency and built a native PageView-based engine from scratch. Animations, scaling, and gamepad navigation are now significantly smoother.

Bulletproof Database: I've hardened the SQLite initialization to protect against disk I/O errors and automatic recoveries, especially for those of you running ROMs off exFAT SD cards.

Dual Screen Fixes (RP6): Fixed the UI lag and state bugs that occurred when connecting or disconnecting secondary displays.

Known Issues

Idle Performance: I know some of you are still experiencing the idle performance issue. This is not resolved yet, but I will be taking a look at it during the week if I have some free time.

NeoStation Beta 0.8.6+101

Choose a tag to compare

@github-actions github-actions released this 21 May 05:40

fix(android): allow Flycast to read sibling subfolders via SAF tree permissions
Flycast standalone failed to launch NAOMI2 / NAOMI GD games because these
ROMs are .zip files paired with a sibling folder (same name, no extension)
containing .chd files. The emulator builds child document URIs inside the
sibling folder, but those URIs were inaccessible because the granted SAF
permission did not propagate to subfolder descendants.
Changes in EmulatorLauncher.kt:

  • Keep SAF content:// URIs for Flycast instead of converting them to
    FileProvider URIs, which break .zip loading.
  • grantParentTreePermission(): grant permission to the real SAF tree root
    (via getTreeDocumentId) and add FLAG_GRANT_PREFIX_URI_PERMISSION so the
    emulator can access every descendant document in the tree.
  • grantSubfolderContentsIfZip(): when the ROM is a .zip, locate the sibling
    folder in the same directory, list every file inside it, and grant
    explicit read permission to each individual file as a fallback.
    Verified working: AW, DC, NAOMI, NAOMI2 and NAOMI GD with Flycast.

feat(ui): set all Material Symbols icons to filled and rounded

  • Added iconTheme: const IconThemeData(fill: 1.0) to the global theme
    in MaterialApp so all Material Symbols icons render with FILL=1.
  • Updated v_directory_picker.dart to inherit the global icon theme
    via IconTheme.of(context).copyWith(...) instead of overriding it
    with a plain IconThemeData, preserving the fill property.

fix(settings,update): gamepad index, dialog colors, and ROM scan flow

  • GeneralSettingsContent: add Ignore hidden files to getItemCount and
    selectItem to align gamepad navigation with UI order
  • UpdateDialog: change Later button background to match
    SystemsUpdateDialog (tertiary color)
  • UpdateDialog: return true on Update Now so caller can distinguish
    user choice
  • AppScreen: await UpdateDialog result and continue update/scan sequence
    when user presses Later instead of aborting

NeoStation Beta 0.8.5+100

Choose a tag to compare

@github-actions github-actions released this 18 May 21:50

Features

  • fix(scan): ignore hidden/AppleDouble ROM sidecar files by default (adds toggle, fixes #35) (#36) @jbripley
  • feat(systems): add favorites tile with sqlite-backed filtering (#38) @jbripley

Fix

fix(android): resolve scoped-storage permission denied for standalone emulators
Emulators .emu (Imagine-Engine) and DuckStation were receiving raw filesystem
paths or file:// URIs after the launcher refactor. On devices with strict
Scoped Storage enforcement (Huawei EMUI 12, Samsung OneUI, RedMagic, etc.)
the target emulators lack read permission for those external-storage paths,
causing Permission Denied.

Changes:

  • EmulatorLauncher.kt: neostation-localuri: now preserves content:// URIs
    so launchGenericIntent can grant FLAG_GRANT_READ_URI_PERMISSION to the
    target emulator. All .emu emulators across every system are fixed.
  • ps1.json: DuckStation bootPath now uses {file.uri} instead of {file.path}.
    DuckStation supports URI strings in bootPath, letting Android propagate
    read access via the intent grant mechanism.

fix(android): resolve scoped-storage permission denied for standalone emulators
Emulators .emu (Imagine-Engine) and DuckStation were receiving raw filesystem
paths or file:// URIs after the launcher refactor. On devices with strict
Scoped Storage enforcement (Huawei EMUI 12, Samsung OneUI, RedMagic, etc.)
the target emulators lack read permission for those external-storage paths,
causing Permission Denied.

Changes:

  • EmulatorLauncher.kt: neostation-localuri: now preserves content:// URIs
    so launchGenericIntent can grant FLAG_GRANT_READ_URI_PERMISSION to the
    target emulator. All .emu emulators across every system are fixed.
  • ps1.json: DuckStation bootPath now uses {file.uri} instead of {file.path}.
    DuckStation supports URI strings in bootPath, letting Android propagate
    read access via the intent grant mechanism.

fix: systems visibility, favorites virtual system, and ALL scraping

  • Fix inverted toggle logic in Settings > Systems (ON now means visible).
  • Add automatic show/hide for the favorites virtual system based on
    whether game favorites exist (excluding music from the count).
  • Disable the favorites toggle in Settings when no game favorites are
    present; enable it when at least one exists.
  • Ensure favorites appears/disappears instantly in grid and carousel
    when the last favorite is added or removed.
  • Add
    efreshDetectedSystems() to SqliteConfigProvider so UI updates
    immediately after toggling a favorite without requiring a full scan.
  • Update CustomToggleSwitch to support a disabled state with dimmed
    visuals and no interaction.
  • Filter out music from favorites count in otalFavorites and in DB
    queries so music favorites do not keep the favorites system visible.
  • Fix scraping from the ALL system by sending the real game's system
    ID (_effectiveSystem.id) instead of οΏ½ll to ScreenScraper.

Full Changelog: v0.8.4+99...v0.8.5+100

NeoStation Beta 0.8.4+99

Choose a tag to compare

@github-actions github-actions released this 16 May 04:41

fix(launcher): restore RetroArch ROM access for Downloads/SD-card sources
Three regressions introduced by the May 14 launcher refactor:

  1. cacheContentUriToFile wrote to Android/data//cache/ blocked
    by Android 10+ scoped storage for other apps. Cache now goes to
    the public /storage/emulated/0/NeoStation/rom_import/ directory
    which RetroArch (and any app with storage permissions) can read.

  2. _launchGameAndroid fallback (hit when JSON config throws
    ACTIVITY_NOT_FOUND, e.g. user has com.retroarch not .aarch64)
    sent game.romPath raw without the neostation-realpath: marker.
    The May 14 refactor removed the Kotlin-side per-package content://
    resolver, so RetroArch was receiving a raw content:// URI it
    cannot open. Marker now added when romPath is content://.

  3. getDefaultLibretroDirectory hardcoded /data/user/0/ wrong for
    clone/secondary-user profiles (OxygenOS Clone Phone). Now resolved
    dynamically via PackageManager.getApplicationInfo().dataDir with
    /data/user/0/ as fallback.

NeoStation Beta 0.8.3+98

Choose a tag to compare

@github-actions github-actions released this 15 May 18:12

Emulators & Launcher
New: Added support for melonDS Dual.
GameNative: Launch GOG, Epic, and Amazon titles directly (Windows folders on Android).
Fixed SAF Permissions: Multi-track games (.bin/.cue) now load perfectly on Dreamcast/PS1 without missing file errors.
Path Fixes: Improved BIOS and save folder detection for .emu and DuckStation.
Vita3K: Fixed black screen/crash issues when launching Vita games.

NeoSync (Android)
Reliable Switch Sync: Improved title identification and auto-sync triggers shortly after gameplay to ensure your saves are safe.

Stability & UI
Smooth Navigation: Fixed "jumping" lists when toggling favorites or using touch.
No More Video Crashes: Stabilized the menu when navigating quickly through background videos.
Faster Startup: Fixed a double-scan bug for a cleaner, quicker boot.

NeoStation Beta 0.8.2+97

Choose a tag to compare

@github-actions github-actions released this 14 May 04:18

fix(launcher): resolve content:// to file:// for imagine-engine emulators
Imagine-engine emulators (com.explusalpha.*) derive save-state and BIOS
paths from the ROM's filesystem location. Receiving a content:// URI
lets them open the ROM but they cannot compute a valid directory from
it, causing errors like game.fcs: no such file or directory.

Resolve to file:// before setting intent data when the URI maps to
accessible storage. Falls back to content:// for network-hosted ROMs.

fix(launcher): grant SAF read permissions to sibling track files
Standalone emulators (Flycast, Redream, Reicast) receive only the
.cue/.gdi URI permission on launch. When they parse the descriptor
and attempt to open the referenced .bin tracks, Android denies
access because no grant exists for those sibling files.

grantSiblingTrackPermissions() queries the SAF parent directory and
grants FLAG_GRANT_READ_URI_PERMISSION for files that share the same
base name or whose name starts with the master base name, covering
both single-binary (game.bin) and multi-track (game Track 01.bin)
layouts without over-granting to unrelated games in the same folder.

refactor(ui): migrate all icons from Material Icons to Material Symbols Rounded
Icons.xxx replaced with Symbols.xxx_rounded across 52 files.
material_symbols_icons ^4.2928.1 added to pubspec.yaml.
Rounded style applied consistently, sharper at small sizes, better
contrast against dark backgrounds used throughout the UI.