Skip to content

v0.4.2

Choose a tag to compare

@axgdev axgdev released this 07 May 04:26
· 273 commits to main since this release
d0c5be2

Users

Faster game library browsing

  • Indexing large SD cards is much faster. The frontend now scans the card from native code and writes the game and media indexes directly, instead of doing the recursive scan in JavaScript.
  • Opening a system with many games should be almost instant after the library has been indexed.
  • The file browser is faster in large folders because directory listings avoid extra filesystem lookups when the device already reports whether an entry is a file or folder.
  • The file browser can return more items per folder before hitting the frontend list cap.

More predictable large-library behavior

  • Very large indexes are now capped deliberately and reported as truncated instead of silently producing index files the frontend cannot fully load.
  • PlayStation track .bin files and legacy stub names continue to be hidden from the game list.

Build quality fixes

  • The bundled libretro core build is quieter and cleaner, with warning fixes applied through local patches where needed.

Developers

Build workflow

  • The main workflow is now:
    • make setup
    • make
    • make quick-check
    • make verify
  • make help and make print-config are available at the root and in major components, so new developers can discover commands and resolved paths without reading the Makefiles.
  • make quick-check is the fast local gate. It runs repository hygiene checks, doctor, JS2300 checks, and frontend checks before the slower full firmware/core verification.
  • make verify remains the handoff gate.
  • make ci-commit-check now goes through the same early checks so CI fails quickly on cheap mistakes.

Repository and docs

  • Stale planning and split-repository docs were removed.
  • Root and component READMEs now focus on the current SDK, JS2300, frontend, and core layout.
  • AGENTS.md now matches the actual build contract and avoids obsolete instructions.
  • docs/README.md and cores/README.md provide lean maps for retained architecture notes and core workflow details.

Runtime and frontend internals

  • JS2300 API version moved from 0.5.0 to 0.6.0.
  • Added JS2300.fs.index(root, gameIndexPath, mediaIndexPath).
  • Native indexing streams directly to temporary index files and atomically renames them on success.
  • Index scan limits are explicit:
    • max depth: 12
    • max files: 65535
    • max dirs: 4096
    • per-index text cap: just under 2 MiB
  • The native scanner mirrors the frontend catalog order and keeps the JS fallback scanner in place.
  • JS2300.fs.list() now allocates its entry buffer on the heap, allowing the list cap to increase from 256 to 1024 without growing runtime stack usage.
  • Directory listing now uses dirent.d_type when available and falls back to stat() only when needed.
  • The frontend builds per-system item arrays while parsing indexes, avoiding a full index walk every time a system is opened.
  • Browser sorting now caches lowercase names and uses a shell sort instead of repeatedly lowercasing inside a quadratic compare loop.

Core warning cleanup

  • External core warning suppressions were narrowed to the cores that need them.
  • Added local patch coverage for Snes9x 2005, FCEUmm, and PMP video warning fixes.
  • Added a zlib deflate compatibility include to avoid the HCRTOS/newlib MIN macro collision without editing fetched dependency sources.

Verification

These checks passed for this release-note scope:

make quick-check
make verify

Full Changelog: v0.4.1...v0.4.2