v0.4.2
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
.binfiles 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 setupmakemake quick-checkmake verify
make helpandmake print-configare available at the root and in major components, so new developers can discover commands and resolved paths without reading the Makefiles.make quick-checkis the fast local gate. It runs repository hygiene checks,doctor, JS2300 checks, and frontend checks before the slower full firmware/core verification.make verifyremains the handoff gate.make ci-commit-checknow 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.mdnow matches the actual build contract and avoids obsolete instructions.docs/README.mdandcores/README.mdprovide lean maps for retained architecture notes and core workflow details.
Runtime and frontend internals
- JS2300 API version moved from
0.5.0to0.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_typewhen available and falls back tostat()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
MINmacro collision without editing fetched dependency sources.
Verification
These checks passed for this release-note scope:
make quick-check
make verifyFull Changelog: v0.4.1...v0.4.2